时:
PUSHQ %reg
POPFQ
在x86_64上设置标志的最直接方法是什么?
答案 0 :(得分:2)
这一切都取决于国旗。
某些标志允许您直接设置该位。例如,STC
设置进位标志,CLC
清除进位标志。如果你想操纵陷阱标志,你必须做这样的事情(假设NASM和16位汇编):
pushf
pop ax
or ax, 0x100
push ax
popf
当然,您也可以间接设置或清除标志。例如:
xor ax, ax
此代码最直接通过异或将ax设置为零。间接地,它具有设置ZF(零标志)和PF(奇偶校验标志)的副作用。对于大多数标志位,通常可以使用类似类型的间接操作标志方式。
另外,我会补充一点,你在问题中使用的机制可能会产生意想不到的后果。更好的做法是推送标志,修改您感兴趣的特定标志,然后弹出标志。任意向标志中弹出特定值可能会造成严重破坏,除非您完全确定不会有更改它们的后果(即,没有更低的代码依赖于上面的标志)。