汇编,条件码速记
原文链接 http://woodrat.xyz/2014/07/05/%e6%b1%87%e7%bc%96%e6%9d%a1%e4%bb%b6%e7%a0%81%e9%80%9f%e8%ae%b0/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
有时候老是忘记,记下常用的条件码和设置条件.(下面从CSAPP第三章中摘抄)
CF : 进位标志,最近的操作使最高位产生了进位, 可以用来检查无符号操作数的溢出.
ZF : 零标志, 最近的操作得出的结果为0.
SF : 符号标志, 最近的操作得到的结果为负数.
OF : 溢出标志, 最近的操作导致一个补码溢出-----正溢出或负溢出.
比如, 假设我们用一条ADD指令完成等价于C表达式 t=a+b的功能, 这里变量a,b和t都是整型的,然后, 根据下面的C表达式来设置条件码:
CF : (unsigned) t < (unsigned) a 无符号溢出
ZF : (t == 0) 零
SF : (t < 0) 负数
OF : (a < 0 == b < 0) && (t < 0 != a<0) 有符号溢出
ps:leal指令不改变任何条件码,因为它是用来进行地址计算的.