我对 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)
...
附言
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)