|
发表于 2004-9-21 10:25:19
|
显示全部楼层
看看这个就什么都明白了
#include <stdio.h>
int main( )
{
int tmp,i;
tmp = i++;
tmp = ++i;
return 0;
}
gcc翻译成的汇编(添加了说明)
.file "test.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
第一个操作
movl -8(%ebp), %edx //临时保存i
//i自加1
leal -8(%ebp), %eax
incl (%eax)
movl %edx, -4(%ebp) //赋值给tmp
第二个操作
//i自加1
leal -8(%ebp), %eax
incl (%eax)
//后赋值
movl -8(%ebp), %eax
movl %eax, -4(%ebp)
movl $0, %eax
leave
ret
.size main, .-main
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.3 20040412 (Red Hat Linux 3.3.3-7)"
速度应该几乎一样,中间都使用了寄存器中转 |
|