X86彙編7.內部中斷

最近學習了X86彙編,其實無論是古老的8086還是現在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位數,尋址空間,寄存器個數,指令集的擴充等方面有所不同,對於學習,8086永不過時。

依據中斷來源,中斷可以分爲內部中斷,和外部中斷。

1.內部中斷的產生
當CPU發生下列事情後,會產生中斷:
(1)除法錯誤,中斷號:0
(2)單步執行,中斷號:1
(3)執行info指令,中斷號:4
(4)執行int指令,中斷號:int 指令後面跟隨的立即數

CPU收到中斷信息後,需要立即對中斷進行處理,處理中斷的程序叫中斷處理程序。CPU用8位的中斷碼通過中斷向量表找到相應的中斷處理程序,中斷向量就是中斷處理程序入口地址。
中斷向量表:
0號中斷對應的中斷處理程序的入口地址
1號中斷對應的中斷處理程序的入口地址
......
n號中斷對應的中斷處理程序的入口地址
這樣,CPU通過中斷號就能找到中斷處理程序的入口地址。中斷向量表在內存中存放,對於8086處理器,中斷向量表指定放在內存地址0處,從0000:0000到0000:03FF的1024個地址單元中,不同CPU可能有不同的約定。
CPU響應中斷的方式是:設置CS:IP的值,使他指向中斷處理程序入口地址。
中斷過程:
(1)(從中斷信息中心)取得中斷號
(2)標誌寄存器的值入棧(因爲在中斷過程中要改變標誌寄存器的值,所以先保存當前值在棧中)
(3)設置標誌寄存器的第8位TF和第9位IF的值爲0
(4)CS的內容入棧(保存中斷現場,以備恢復)
(5)IP的內容入棧(保存中斷現場,以備恢復)
(6)從內存地址爲中段號4和中斷號4+2的兩字單元中讀取中斷處理程序的入口地址設置IP和CS。
(7)CPU開始執行程序員編寫的中斷處理程序
中斷處理程序
(1)保存用到的寄存器
(2)處理中斷
(3)恢復用到的寄存器
(4)用iret指令返回,CPU將回到中斷前的程序繼續執行

2.BIOS和DOS所提供的中斷例程
在系統板的ROM中存放着一套程序,成爲BIOS程序,由以下部分組成:
(1)硬件系統的檢測和初始化程序
(2)外部中斷和內部中斷的中斷例程
(3)用於對硬件設備進行IO操作的中斷例程
(4)其他和硬件系統相關的中斷例程
DOS操作系統也提供了中斷例程,從操作系統角度看,DOS的中斷例程就是操作系統向程序員提供的編程資源。
可以用int指令直接調用BIOS和DOS提供的中斷例程。
載入BIOS中斷例程和DOS中斷例程的過程:
(1)開機後,CPU加電,初始化CS、IP,自動從CS:IP處執行程序,jmp到bios中的硬件檢查和初始化程序。
(2)初始化程序建立BIOS所支持的中斷向量,將BIOS所支持的中斷例程註冊到中斷向量表中。
(3)硬件初始化完成後,執行:int 19h,進行操作系統引導,從此將計算機轉交給操作系統。
(4)DOS啓動後,將他所提供的中斷例程裝入內存,註冊到中斷向量表中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章