我们有STC
指令来设置进位标志,那么是否有类似的指令用于奇偶校验、溢出、符号等标志呢?我尝试过STP
、STS
等,但似乎这些指令并不存在!
我们有STC
指令来设置进位标志,那么是否有类似的指令用于奇偶校验、溢出、符号等标志呢?我尝试过STP
、STS
等,但似乎这些指令并不存在!
STP: XOR AL,AL ; resets parity bit
XOR AL,1 ; ... then set parity bit
STO: OR AL, 0FFh
SUB AL, 080h ; sets overflow
STS: OR AL, 0FFh ; sets sign bit
如果你坚持只设置特定的位:
PUSHFD
OR dword ptr[ESP], <bitmask_for_flag_bit> ; see Intel manual
POPFD
由于硅空间宝贵,CPU设计师倾向于不提供那些易于完成的指令。(STC是从8080时代遗留下来的,当时它对于进行各种多精度算术运算很有用,并且不破坏寄存器是非常好的事情。)
test al, 0
来清除奇偶校验和符号标志,而不会破坏寄存器。0 AND x
的结果始终为零,因此 al
的旧内容并不重要。此外,您可以使用 OR AL, 0FFh
设置 PF,而不考虑先前的内容。除了溢出标志之外,SAHF/modify AH/LAHF
比 pushfd/popfd 更有效率。 - Peter Cordes