2016-04-22 58 views

回答

1

有很多可能的解决方案。

例如,test al, al将清除OF标志而不影响寄存器内容。


或者,如果你不想影响其他的标志,你可以直接修改*FLAGS寄存器。例如,在32位,这看起来像:

pushfd     ; Push EFLAGS onto the stack 
and dword [esp], ~0x800 ; Clear bit 11 (OF) 
popfd     ; Pop the modified result back into EFLAGS 

编辑:改变or al, altest al, alPeter Cordes“的建议。 (效果相同,但后者因性能原因更好)

+2

'测试al,al'是根据寄存器内容设置标志的更好的习惯用法。它只写标志,所以它不会增加涉及'al'的依赖链的长度。不过,对于'pushf' /'popf'方法使用+1。 (因为'sahf' /'lahf'不包含'OF')。 –

+0

关于'或'和'测试'的好处;我相应地更新了我的答案。谢谢! – user1354557