2012-11-17 125 views
5

是否有彙編指令讓我們直接「設置」或「清除」英特爾8086 16位標誌寄存器中的「OF」和「TF」標誌?如果不是,我們應該使用哪些僞代碼?用於設置,清除OF和TF標誌的彙編指令

+0

在問這個問題之前,您是否閱讀過[Intel手冊](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)? – DCoder

+0

http://en.wikipedia.org/wiki/Trap_flag –

+0

@DCoder在發佈評論之前,您有沒有在英特爾手冊中找到這樣的東西的僞代碼? –

回答

6

http://en.wikipedia.org/wiki/Trap_flag

8086沒有指令直接設置或重置陷阱標誌。這些操作是通過按下堆棧上的標誌寄存器,將陷阱標誌位更改爲程序員所希望的,然後將標誌寄存器從堆棧中彈出。設置陷阱標誌的指令是:

PUSHF ; Push flags on stack 
MOV BP,SP ; Copy SP to BP for use as index 
OR WORD PTR[BP+0],0100H ; Set TF flag 
POPF ; Restore flag Register 

要重置陷阱標誌,只需更換OR指令前述序列與所述指令在:

AND WORD PTR[BP+0],0FEFFH 

要設置並清除溢出標誌,你可以這樣做,用0800H0FEFFh替換0100H0F7FFh

在設置之前一定要知道TF的功能。這是一個陷阱。

+1

當你只用'sp *寄存器來完成'或word [sp],0100h'時,執行'mov bp,sp'和使用* bp *寄存器的原因是什麼? – golem

+1

,因爲8086在16位實模式下運行,所以沒有這樣的方法可以將字[sp]作爲內存操作數中唯一可能的基址寄存器是BX,BP,SI和DI。 – hlide