我知道如何在8086中執行中斷程序。我不清楚的是中斷類型(即硬件,軟件和異常)如何使用控制標誌(中斷標誌和陷阱標誌)在執行中。
而其他東西是什麼非屏蔽中斷及其用法?
所以請幫助我,謝謝。中斷程序和NMI中的控制標誌[8086]
回答
中斷處理程序不會對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被設置,會發生什麼情況。
異步硬件中斷需要處理,而不會「困擾」當前正在運行的程序,也就是說,它們需要在程序不知道它們的情況下執行。這包括「不打擾」單步調試器。
- 1. 中斷服務程序8086
- 2. 8086程序集讀寫二進制文件的中斷?
- 3. 定時器是否中斷NMI ..?
- 4. 組裝狀態標誌8086
- 5. 郵件程序從控制器中斷
- 6. C#控制檯應用程序中斷?
- 7. 8086程序集中的秒錶程序
- 8. 將中斷標誌
- 9. ATmega2560使用UART中斷來控制全局標誌
- 10. 彙編語言8086鍵盤和鼠標中斷
- 11. 爲什麼CMP(compare)有時會在8086程序集中設置進位標誌?
- 12. 線程中斷標誌語義
- 13. 在屏幕上打印不中斷程序集8086
- 14. 程序集8086光標的放置
- 15. 從8086的RAM中加載程序
- 16. UIRobot控制器和C中的程序#
- 17. 在程序集編程8086中添加十進制數字
- 18. 更改標誌手動組裝8086
- 19. 彙編8086程序
- 20. 控制檯應用程序和ssh中的鼠標移動
- 21. 8086程序中使用循環
- 22. 在程序集中生成聲音8086
- 23. 小程序控制臺日志
- 24. 程序執行和中斷
- 25. 中斷和調度程序
- 26. 控制檯中的斷點應用程序視覺工作室
- 27. 8086裝配時間打印中斷
- 28. 螞蟻控制流程中斷
- 29. 如何在程序8086彙編器中使用本地標籤?
- 30. PIC(可編程中斷控制器)和VIM(矢量中斷控制器)有什麼區別?
他們沒有。閱讀[PIC的](https://en.wikipedia.org/wiki/Programmable_Interrupt_Controller)。 –
但是我讀了一本書,當遇到軟件中斷時IF和陷阱標誌被清除 – Fiju
當然,它們在任何中斷,硬件或軟件或nmi上都被清除。所以他們不會告訴你任何有關特定中斷的事情。 –