2015-05-16 88 views
0

我知道如何在8086中執行中斷程序。我不清楚的是中斷類型(即硬件,軟件和異常)如何使用控制標誌(中斷標誌和陷阱標誌)在執行中。
而其他東西是什麼非屏蔽中斷及其用法?
所以請幫助我,謝謝。中斷程序和NMI中的控制標誌[8086]

+0

他們沒有。閱讀[PIC的](https://en.wikipedia.org/wiki/Programmable_Interrupt_Controller)。 –

+0

但是我讀了一本書,當遇到軟件中斷時IF和陷阱標誌被清除 – Fiju

+0

當然,它們在任何中斷,硬件或軟件或nmi上都被清除。所以他們不會告訴你任何有關特定中斷的事情。 –

回答

0

中斷處理程序不會對IF和TF標誌執行任何操作。它們被清除,所以中斷處理程序可以正確安全地完成它的工作。您需要了解這些標誌的作用,然後很明顯它們在中斷期間被清除的原因。

中斷標誌IF被設置,則處理器將允許外部硬件信號(通常是從一個可編程中斷控制器或PIC)來觸發的中斷。當它被清除時,硬件中斷信號被忽略。

(該NMI不可屏蔽中斷是一個例外,特殊情況下用於「應急型」或「實時」事件,如果IF清零時甚至引發。)

The 陷阱標記TF被調試器使用。當該標誌被設置時,處理器將正好執行一條指令,然後觸發一個INT 1.調試器可以使用它來單步執行機器代碼,而不必臨時修改它(例如臨時插入INT 3指令),這並不總是可能的(例如,存儲在ROM中的單步代碼)。

現在爲什麼在中斷期間兩個標誌都被清除了?

IF被清除是因爲Intel不想強加中斷處理程序可重入的限制。重入代碼是可隨時安全掛起的代碼,並從頂部再次調用。如果在中斷處理程序運行時允許中斷,則很可能在處理第一個中斷時觸發第二個中斷,這會導致句柄重新進入。請注意,軟件中斷處理程序(如DOS中斷處理程序21h)通常不會出現此問題,因爲它們不會被異步硬件信號調用;因此,他們所做的第一件事是執行STI來重新啓用中斷。

TF的情況非常相似,但有點難理解。我沒有編寫x86調試器的經驗,所以我不知道這些細節。簡短的版本是TF在中斷期間被清除以避免混亂。接下來是我的投機鍛鍊。首先,至少單步中斷(類型1或INT 1,如果你願意)必須清除標誌,否則調試器的單步處理程序本身會觸發單步中斷,一步中斷或者根本不運行。其次,我們假設每個中斷都沒有清除TF:如果在調試器嘗試使用TF時觸發硬件中斷,則中斷處理程序本身可能是觸發單步中斷的中斷處理程序,而不是被調試的代碼。更糟的是,現在中斷被暫停(見上面的IF),不僅你看錯了代碼(或者徹底混淆了調試器),而且你的鍵盤不再工作了。(正如我所說的,我在猜測:我不知道如果IF被清除,但TF被設置,會發生什麼情況。

異步硬件中斷需要處理,而不會「困擾」當前正在運行的程序,也就是說,它們需要在程序不知道它們的情況下執行。這包括「不打擾」單步調試器。