NOT
在保存二进制11111111
的寄存器上将产生00000000
,但ZF仍然具有其旧值,因此即使输出值全部为零,也可能不是1
。
XOR reg, -1
将做同样的事情,但将根据结果设置FLAGS。
为什么按位NOT不影响ZF位?希望有人能解释一下为什么,否则它最初是这样设计的。
实际上,我们可以让8086的设计者Steve Morse自己来回答这个问题。我希望他能原谅我引用他的书, 8086/8088 Primer,他已经在他的网站上提供了。以下内容摘自第98页:
在影响标志的布尔指令列表中缺少一条布尔指令NOT。NOT不影响旗子。这是定义处理器时疏忽的结果(我犯了错!)。