汇编,条件码速记

2014-07-05 Mithrilwoodrat 更多博文 » 博客 » GitHub »

原文链接 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指令不改变任何条件码,因为它是用来进行地址计算的.