EFLAGS寄存器中进位标志和溢出标志有什么用途?

时间:2017-07-29 22:59:01

标签: assembly x86

EFLAGS寄存器有进位标志和溢出标志,我想知道这些标志有什么用途。

我可以想到以下用途:

  • 如果我添加两个无符号整数,我想知道是否 添加成功(即,结果符合指定的寄存器/内存),然后我将检查进位标志是否已设置 (如果未设置,则添加成功)。

  • 如果我要添加两个已签名(两个补码)的号码,我想这样做 知道添加是否成功(即,结果是否符合指定的寄存器/存储器而没有溢出符号位),那么我会检查是否 设置溢出标志(如果未设置,则添加为 成功的)。

这些用途是否正确?还有其他用途吗?

1 个答案:

答案 0 :(得分:2)

标志是控制条件指令的唯一方法,条件跳转(jCC)和条件移动(cmovCCfcmovCC)。因此,无论何时你想根据某些条件做出选择,比如

  • 是两个数字相等吗?
  • 是一个比另一个大的数字?
  • 是数字零?
  • 是一个数字中的某个位?
  • 是数字的奇偶校验是偶数还是奇数?

您需要标记寄存器。为此,存在cmp指令。它减去其操作数,丢弃结果并设置标志。这样,您可以根据结果比较数字并执行某些操作。有关两个数字的顺序如何影响标志,请参见this table

最后,您还可以使用标志(尤其是进位标志)进行大量添加。使用adcsbb指令可以实现这一点,这些指令可以将进位或从较小数字借位到较高位数。