如何理解x86手册中的“The XX flag is undefined/clear/set”?

问题描述 投票:0回答:1

根据shld的x86指令说明

如果计数为 1 或更大,CF 标志将被从目标操作数移出的最后一位填充,并且根据结果的值设置 SF、ZF 和 PF 标志。对于 1 位移位,如果发生符号更改,则设置 OF 标志;否则,它被清除。对于大于 1 位的移位,OF 标志未定义。如果发生移位,则 AF 标志未定义。如果计数操作数为 0,则标志不受影响。如果计数大于操作数大小,则标志未定义。

上面的描述说了如何处理CF/OF/...标志。手册使用“设置/清除/未定义/不受影响”来描述方式。

我对这句话的理解是:

  • set:CPU 会将标志设置为 1
  • 清除:CPU 会将标志设置为 0
  • 未定义/不受影响:CPU 不关心该标志

正确吗?

x86 intel
1个回答
0
投票

您对设置和清除的理解是正确的,但“未定义”意味着程序不能依赖于在使用这些特定操作数运行指令后处于任何特定状态的CPU。

标志可能已设置,也可能未设置,它们可能已从之前的状态更改,然后又可能未更改。在多次运行同一程序后,您甚至不能依赖相同的行为。使用这些操作数运行该指令后,这些标志的状态根本没有定义。

© www.soinside.com 2019 - 2024. All rights reserved.