2016-04-27 63 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

您應該考慮在此刪除您的答案並將其移至副本。或者標記這個問題並要求版主將其所有答案合併到副本中。 –