我有以下C ++代码:
int main()
{
int i;
int j;
i = 1111;
j = 2222;
return 0;
}
我想查看此C ++代码编译的汇编代码,因此我选择了以下选项:
此选项将输出每个C ++语句,并在其下直接输出与其对应的汇编指令。但是有一些C ++语句与任何汇编指令都不对应(例如:int i;
)。所以我想在阅读生成的汇编代码时确保我的以下假设是正确的:
答案 0 :(得分:2)
int i; int j;
只是变量声明..它们甚至没有用声明进行初始化,因此从这个意义上说,这两行没有明确的汇编指令。但请注意局部变量声明确实导致在堆栈上分配这些局部变量。
是的,对于问题的后半部分,mov DWORD PTR_i$[ebp], 1111
仅对应i = 1111;
。
答案 1 :(得分:0)
我认为(出于教育目的)你应该将这些语句放在一个函数中并从main调用函数然后(在main函数中):
sub esp, 216 ; 000000d8H
变为:
sub esp, 192 ; 000000c0H
和
lea edi, DWORD PTR [ebp-216]
变为:
lea edi, DWORD PTR [ebp-192]
正在发生的是那些指令是为i和j保留堆栈中的内存。因此,有机器指令(除非通常包含其他值,否则将始终存在),但您需要了解正在发生的事情才能理解指令的内容。 216值将用于包含i和j定义的函数中(假设没有其他定义)。
请注意,mov指令为" i"设置值。正在使用ebp寄存器。该寄存器指向堆栈。所以我认为你可以认为指令是唯一的指令。