4

这是我在 Intel x86-64 forneg和许多其他指令的文档中看到的内容(包括sub,因此将 FLAGS 理解neg x0 - x取决于此)。

根据结果​​设置OFSFZFAFPF标志。

我假设sf = dest < 0, zf = dest == 0,但无法弄清楚其他标志是如何设置的。

我到处都看到这个“根据结果设置”短语,并希望您能帮助理解“相应地”设置标志的确切含义。

4

1 回答 1

5

所以所有的标志都是根据执行的操作设置的,这就是短语“根据结果设置”的意思。

#3.4.3.1 状态标志 EFLAGS 寄存器的状态标志(位 0、2、4、6、7 和 11)指示算术指令的结果,例如 ADD、SUB、MUL 和 DIV 指令。状态标志功能是:

  • CF(位 0)进位标志— 如果算术运算从结果的最高有效位产生进位或借位,则置位;否则清除。此标志指示无符号整数运算的溢出条件。它也用于多精度算术。
  • PF (bit 2) Parity flag — 如果结果的最低有效字节包含偶数个 1,则设置;否则清除。
  • AF(第 4 位)辅助进位标志— 如果算术运算从结果的第 3 位产生进位或借位,则置位;否则清除。此标志用于二进制编码的十进制 (BCD) 算术。
  • ZF(位 6)零标志— 如果结果为零则置位;否则清除。
  • SF(第 7 位)符号标志— 设置为等于结果的最高有效位,即有符号整数的符号位。(0 表示正值,1 表示负值。)
  • OF(第 11 位)溢出标志— 如果整数结果是正数太大或负数太小(不包括符号位)而无法放入目标操作数,则设置;否则清除。该标志指示有符号整数(二进制补码)算术的溢出条件。

在这些状态标志中,只有 CF 标志可以使用 STC、CLC 和 CMC 指令直接修改。此外,位指令(BT、BTS、BTR 和 BTC)将指定位复制到 CF 标志中。

只有CF标志可以直接修改。其他的根据操作设置。

来源 - 英特尔

于 2016-11-08T03:48:24.777 回答