- 论坛徽章:
- 0
|
10可用积分
想测试一下int和unit类型的整数,编译出来的汇编代码到底有什么不同:
[zhang@localhost kg]$ cat i.c
int main(){
int i=4;
unsigned j=8;
int k=i+j;
unsigned int l=i+j;
return 0;
}
[zhang@localhost kg]$ gcc -S i.c
[zhang@localhost kg]$ cat i.s
.file "i.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $32, %esp
movl $4, -24(%ebp)
movl $8, -20(%ebp)
movl -24(%ebp), %eax
movl %eax, -16(%ebp)
movl -20(%ebp), %eax
movl %eax, -12(%ebp)
movl -24(%ebp), %eax
addl -20(%ebp), %eax
movl %eax, -8(%ebp)
movl $0, %eax
addl $32, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 20071124 (Red Hat 4.1.2-42)"
.section .note.GNU-stack,"",@progbits
--------------------------------------------------
似乎没看出来int和uint有什么处理上的不一样啊,dx能解释一下产生的汇编代码有没有反应出什么区别吗?
10分感谢! |
最佳答案
查看完整内容
说了那么多,才觉得被你绕进去了。看有符号运算与无符号运算的差别,不需要把转换扯进来。这是两个不同的问题,放在一起只会把人搞晕。下面的代码能看出不同:加、减、乘的运算是没有不同的。在你那里都是 mod 2^32 的运算,符号仅取决与你如何理解这些数。但除法无法合理地对应到环运算中,所以需要特殊处理。[ 本帖最后由 win_hate 于 2009-1-14 08:56 编辑 ]
|