汇编下才能看出区别的问题
来源:互联网 发布:seo常用外链资源整理 编辑:程序博客网 时间:2024/05/22 10:34
int main(){ unsigned char a = 0xff; char b = 0xff; int c = (a==b); printf("c = %d\n",c); return 0;}
这段代码执行的时候,得到的结果是
c = 0
有点出乎意料哈。GCC在编译的时候对于位宽不足32位/64位的有符号和无符号的变量赋值,采用的mov指令是不一样的。有符号数用movsbl/movswl/movslq,符号位会扩展。无符号数采用movzbl/movzwl/movzlq,符号位不会扩展。在执行比较指令到时候,用的是32位的cmpl指令。因此,被扩展的符号位就造成了差异。
main: pushl %ebp movl %esp, %ebp subl $16, %esp movb $-1, -1(%ebp) movb $-1, -2(%ebp) movzbl -1(%ebp), %edx movsbl -2(%ebp),%eax cmpl %eax, %edx sete %al movzbl %al, %eax movl %eax, -8(%ebp) movl -8(%ebp), %eax leave ret
在32位系统上对于32bit的变量和在64位系统上对于64bit的变量没有影响
0 0
- 汇编下才能看出区别的问题
- 一些常见的ios面试问题 一眼看出ios初级和高级工程师的区别
- 您能看出这个Double Check里的问题吗?
- 怀才就像怀孕,时间久了才能让人看出来
- 解决windows下C32ASM反汇编无法打开的问题
- x64平台下VC++中汇编函数的编写问题
- 解决Linux下内联汇编的宏融合寻址问题
- Minix下的汇编
- Linux下的汇编
- 关于windows下网络连接禁用后启用才能上网的问题
- 关于“ISIS_PJPlan_Doc.dll必需和计划书文件在同一目录下才能检查保护”的问题
- Ubuntu下Wireshark必须使用Root权限才能运行的问题
- 000041:通过本实例可看出while语句与do...while语句的区别
- 汇编的有趣问题
- 汇编bne的问题
- 小小的笑话,看出人生哲理
- 如何看出自己的进步
- 从这件事看出的飞鸽传书
- Python--控制语句
- iOS GCD的一些小结
- Python--函数,自定义函数
- iOS NSInvocation用法简介
- leetcode 283. Move Zeroes
- 汇编下才能看出区别的问题
- linux下LAMP安装与配置
- Python简介
- -webkit-box-
- SVN: E155036:This client is too old to work with working copy…解决方法
- 翻翻git之---基于universalimageloader实现的图片加载控件BlurImageView
- 2、利用User类来封装,ResultSet的返回结果
- 技术对游戏公司来讲到底有多重要?
- svm与logistic regression的区别