对三目运算符的反汇编。
来源:互联网 发布:电脑编程培训费用 编辑:程序博客网 时间:2024/05/28 16:26
之前一直没有对三目运算符反汇编过,本以为会很简单,几个cmp,jg,jl之类的,昨天反汇编了一下,大吃一惊。
int b=a>5?2:20;
反汇编之后:
0040102F xor eax,eax
00401031 cmp dword ptr [ebp-4],5
00401035 setle al
00401038 dec eax
00401039 and al,0EEh
0040103B add eax,14h
0040103E mov dword ptr [ebp-8],eax
看了好久才看明白,大致流程是这样的:
先让a和5比较,根据比较结果,设置al的数值(setle 为:大于等于则置位),之后在进行减一操作。在dec eax指令执行完毕之后,如果a的值小于等于5,eax里面的数值是0xffffffff,否则是零。然后在进行and操作,如果a的值小于等于5,and之后eax值为-18,否则为0,然后再加上20.
之所以这样,不用跳转指令,估计是因为CPU使用了超流水线技术,如果跳转的话,那么下面预先执行的指令都没用了,为了减少浪费,让指令顺序执行了。
- 对三目运算符的反汇编。
- 反汇编下的字符运算
- 运算符与表达式 表达式及查看反汇编的代码
- 常见运算的x86反汇编分析(1)
- 常见运算的x86反汇编分析(2)
- 反汇编反出来的
- 反汇编反出来的
- Gloomy对Windows内核的分析(内核反汇编技术)
- Gloomy对Windows内核的分析(内核反汇编技术)
- Gloomy对Windows内核的分析(内核反汇编技术)
- 反汇编系列(三) dowhile
- 反汇编的学习
- 反汇编的后记
- gdb 的反汇编
- VS的反汇编
- 利用反汇编对WNDPROC进行追踪
- MASM的反反汇编技术
- 三种循环反汇编代码比较
- Kubuntu 的常用配置
- tcp ip 协议
- Leftmost Digit
- 第一节程序设计课
- Spring事务管理
- 对三目运算符的反汇编。
- Notepad++ 支持 ExtJS 提示(JavaScript提示)
- 计算机作业
- Java中hashmap和hashtable的区别
- 学习VB编程感想
- 往MYSQL中插入,读写图片!
- Android Application Task Activities的关系
- UNIX网络编程学习(12)--对两个数求和的str_echo函数-以及sscanf的用法
- 第六周实验报告3