gpt4 book ai didi

c - 错误的 Visual Studio 程序集输出?

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:53 25 4
gpt4 key购买 nike

我写了这个经典函数:(在 32 位模式下)

void ex(size_t a, size_t b)
{
size_t c;
c = a;
a = b;
b = c;
}

我在 main 中调用它如下:

size_t a = 4;
size_t b = 5;
ex(a,b);

我对输入函数时生成的汇编代码的期望是这样的:

1-将 b 和 a 的值压入堆栈:(已完成)

mov         eax,dword ptr [b]
push eax
mov ecx,dword ptr [a]
push ecx

2-使用栈中a和b的值:

push        ebp
mov ebp, esp
sub esp, 4
c = a;
mov eax, dword ptr [ebp+8]
mov dword ptr [ebp-4], eax

其他变量依此类推。

然而,这是我在调试时发现的:

push        ebp  
mov ebp,esp
sub esp,0CCh // normal since it's in debug with ZI option
push ebx
push esi
push edi
lea edi,[ebp-0CCh]
mov ecx,33h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]
size_t c;
c = a;
mov eax,dword ptr [a]
mov dword ptr [c],eax

为什么它直接使用变量a而不是调用存储在堆栈中的值?我不明白...

最佳答案

调试器不显示使用 ebp 访问 a 的指令。编写内联汇编时允许使用相同的语法。否则 dword ptr 仍然出现的原因。

很容易获得您喜欢的方式,右键单击 > 取消选中“显示符号名称”。

关于c - 错误的 Visual Studio 程序集输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43564513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com