【发布时间】:2010-06-07 10:08:38
【问题描述】:
想要查看编译器的输出(在汇编中)对于一些 C 代码,我用 C 编写了一个简单的程序并使用 gcc 生成了它的汇编文件。
代码是这样的:
#include <stdio.h>
int main()
{
int i = 0;
if ( i == 0 )
{
printf("testing\n");
}
return 0;
}
为其生成的程序集在这里(仅主要功能):
_main:
pushl %ebpz
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
call __alloca
call ___main
movl $0, -4(%ebp)
cmpl $0, -4(%ebp)
jne L2
movl $LC0, (%esp)
call _printf
L2:
movl $0, %eax
leave
ret
我完全无法关联 C 代码和汇编代码。代码所要做的就是将 0 存储在寄存器中并将其与常量 0 进行比较并采取适当的措施。但是大会中发生了什么?
【问题讨论】:
-
您应该将其设置为输出 intel 语法以使其可读 (
-MintelIIRC)。 -
AT&T 语法完美无瑕,如果您使用的是 UNIX,建议您具备足够的双语能力来阅读它。
-
投票结束,因为范围太广。