EFLAGS
寄存器有进位标志和溢出标志,我想知道这些标志有什么用途。
我可以想到以下用途:
如果我添加两个无符号整数,我想知道是否 添加成功(即,结果符合指定的寄存器/内存),然后我将检查进位标志是否已设置 (如果未设置,则添加成功)。
如果我要添加两个已签名(两个补码)的号码,我想这样做 知道添加是否成功(即,结果是否符合指定的寄存器/存储器而没有溢出符号位),那么我会检查是否 设置溢出标志(如果未设置,则添加为 成功的)。
这些用途是否正确?还有其他用途吗?
答案 0 :(得分:2)
标志是控制条件指令的唯一方法,条件跳转(jCC
)和条件移动(cmovCC
和fcmovCC
)。因此,无论何时你想根据某些条件做出选择,比如
您需要标记寄存器。为此,存在cmp
指令。它减去其操作数,丢弃结果并设置标志。这样,您可以根据结果比较数字并执行某些操作。有关两个数字的顺序如何影响标志,请参见this table。
最后,您还可以使用标志(尤其是进位标志)进行大量添加。使用adc
和sbb
指令可以实现这一点,这些指令可以将进位或从较小数字借位到较高位数。