Intel 官方文档中说:“如果目标操作数和寄存器 AL、AX 或 EAX 中的值相等,则设置 ZF 标志;否则清除该标志。CF、PF、AF、SF 和 OF 标志根据比较操作的结果设置。”然而,在 Randall Hyde 的汇编语言艺术中,它说只有 ZF 标志受到影响。
确实,在 DosBOX 中只有 ZF 标志受到影响。英特尔是否针对较新的处理器做了一些更改?
Intel 官方文档中说:“如果目标操作数和寄存器 AL、AX 或 EAX 中的值相等,则设置 ZF 标志;否则清除该标志。CF、PF、AF、SF 和 OF 标志根据比较操作的结果设置。”然而,在 Randall Hyde 的汇编语言艺术中,它说只有 ZF 标志受到影响。
确实,在 DosBOX 中只有 ZF 标志受到影响。英特尔是否针对较新的处理器做了一些更改?
自从 80486 首次引入该指令以来,记录的行为
CMPXCHG
一直是根据比较结果设置标志。请参阅80486 程序员参考手册(大型 PDF)。所以看起来这是 Hyde 书中的一个错误,也是 DOSBox 中的一个缺陷。
正如 fuz 所指出的,
CMPXCHG8B
和CMPXCHG16B
是不同的,它们只设置 ZF,而其他标志不受影响。因此,Hyde 和/或 DOSBox 实施者可能错误地认为CMPXCHG
它们是相同的。