1.返回一个布尔型的汇编
源码: int var4, var8; return var4>=var8; 反汇编码: .text:00401084 mov edx, [ebp+var_8] .text:00401087 cmp [ebp+var_4], edx .text:0040108A sbb eax, eax .text:0040108C inc eax
cmp是比较指令, cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
cmp ax,bx的逻辑含义是比较ax,bx中的值。如果执行后: ZF=1则AX=BX ZF=0则AX!=BX CF=1则AX<BX CF=0则AX>=BX CF=0并ZF=0则AX>BX CF=1或ZF=1则AX<=BX
由此可知,
if(var4>=var8) cf=0; if(var4<var8) cf=1;
SBB:带借位减法, 格式:SBB DST,SRC, 执行的操作:(DST)←(DST)-(SRC)-CF,其中CF为进位的值
所以分情况得到以下代码:
if(var4>=var8) cf=0; if(var4<var8) cf=1; return eax-eax-cf+1; 所以翻译以下就是: if(var4>=var8) return 1; if(var4<var8) return 0; 相当于 return var4>=var8;