2016-04-27 49 views

回答

1

要设置(在MASM语法)

pushf     ; mov EFLAGS to stack 
bts dword ptr [esp], 11 ; set OF flag 
popf      ; write it back to status register 

Overflow flag(OF) - Bit 11 of EFLAGS使用和分别使用以下方法来标志复位:作为副作用

pushf     ; mov EFLAGS to stack 
btr dword ptr [esp], 11 ; reset OF flag 
popf      ; write it back to status register 
+3

带有内存目的地的'or'或'and'比'bts更少uops [mem],imm'在Intel CPU上。即使立即进行位计数,具有内存目标的'bts'和朋友效率也不高,所以一般情况下要避免使用内存操作数,而不是需要原子('lock')测试和设置。 –

1

许多指令明确OF,例如test。因此,您可以编写类似test eax, eax的东西,并且将清除OF,但它会影响其他标志。你没有说明是否允许。

要设置OF,您可以执行一些操作来设置它。例如,加1的最大正数:mov al, 0x7f; add al, 1

或者,可以使标志的副本使用pushf在栈上,对其进行修改,以自己的喜好,然后使用popf找回来。

+0

您应该考虑在此删除您的答案并将其移至副本。或者标记这个问题并要求版主将其所有答案合并到副本中。 –

相关问题