我希望你能帮忙翻译GCC生成的汇编代码(使用-S选项)。由于我对汇编语言很陌生,所以我的问题可能比较基础。但我还是希望有人能够回答:
假设我有以下C代码:
main(){
int x = 15;
int y = 6;
int z = x - y;
return 0;
}
如果我们查看汇编代码(尤其是与 int z = x - y 对应的部分),我们会看到:
主函数:
...
subl $16, %esp
movl $15, -4(%ebp)
movl $6, -8(%ebp)
movl -8(%ebp), %eax
movl -4(%ebp), %edx
movl %edx, %ecx
subl %eax, %ecx
movl %ecx, %eax
movl %eax, -12(%ebp)
...
为什么GCC不生成类似于这样的内容,少复制一些东西呢?
主函数:
...
movl $15, -4(%ebp)
movl $6, -8(%ebp)
movl -8(%ebp), %edx
movl -4(%ebp), %eax
subl %edx, %eax
movl %eax, -12(%ebp)
...
P.S.
Linux zion-5 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux gcc版本为4.4.3(Ubuntu 4.4.3-4ubuntu5)
-O2
编译选项,我发现赋值和减法也会消失,因为它们是死代码。 - ArjunShankar-O1
本身就会移除所有内容。生成的代码只相当于return 0;
。 - ArjunShankar