一、中斷的概念
1.中斷:一種使CPU中止正在執行的程序而轉去處理特殊事件的操作。
2.中斷源:引起中斷的事件。
(1)內部中斷源,由程序中安排的中斷指令I(lǐng)NT產(chǎn)生的中斷,或由CPU的某些錯誤操作結果產(chǎn)生的中斷。
① 溢出中斷指令 INTO
② 中斷指令I(lǐng)NT N產(chǎn)生的中斷
③ CPU錯誤引起的中斷
④ 為debug設置的中斷:?jiǎn)尾街袛?,斷點(diǎn)中斷
(2)外部中斷源
由外部設備隨機引起的一般由中斷控制器控制的中斷或某些處理器(8087/80287)引起的中斷。
二、80x86 CPU的中斷源.
如下圖所示。
1.軟件中斷(內中斷)
1)中斷指令I(lǐng)NT引起的中斷:CPU執行完一條INT n (n不能為0、1、2、4的類(lèi)型號)指令后,會(huì )立即產(chǎn)生中斷,并且調用系統中相應的中斷處理程序來(lái)完成中斷功能。
2)處理CPU某些錯誤的中斷(為處理運算結果的錯誤而設置)
3)除法錯中斷:中斷類(lèi)型為0。又稱(chēng)為除數為0中斷。
4)溢出中斷:中斷類(lèi)型為4。用INTO指令來(lái)中斷發(fā)生溢出的算術(shù)操作,并把控制交給操作系統(此時(shí)要求OF=1并執行INTO指令)。如果未發(fā)生溢出,此時(shí)OF=0,則INTO不會(huì )引起中斷,繼續執行下面的一條指令。
5)為調試程序(DEBUG)設置的中斷
單步中斷:當標志位TF置為1時(shí),每條指令執行后,CPU自動(dòng)產(chǎn)生類(lèi)型1的中斷——單步中斷。
斷點(diǎn)中斷:中斷類(lèi)型為3。通常調試程序時(shí),把程序按功能分成幾段,然后每段設一個(gè)斷點(diǎn)。當CPU執行到斷點(diǎn)時(shí)便產(chǎn)生中斷,這時(shí)程序員可以檢查各寄存器及有關(guān)存儲單元的內容。
軟終端過(guò)程
2.硬件中斷(外中斷):外中斷來(lái)自處理機的隨機發(fā)生的外部條件。
外中斷源:有非屏蔽中斷(NMI腳)和可屏蔽中斷(INTR腳)兩大類(lèi)。
外中斷與CPU的連接
非屏蔽中斷接至8086/8088 CPU的NMI腳(17腳)。
可屏蔽中斷通過(guò)8259A可編程中斷控制器接至8086/8088 CPU的INTR腳(18腳)。
3.CPU響應可屏蔽外中斷(INTR)的條件
IF=1才響應INTR請求的中斷。
INTR未被8259A的中斷屏蔽寄存器(IMR)屏蔽。
IMR的I/O端口地址為21H。其8位對應8個(gè)外設的中斷請求。
某位為0允許該外設中斷,某位為1則禁止該外設中斷。
4.CPU響應非屏蔽外中斷(NMI)是無(wú)條件的。該中斷類(lèi)型號為2。
8259A的中斷結束命令EOI及中斷命令寄存器(OCW2)
8259A的中斷命令寄存器的端口地址為20H。其內容為:
中斷結束命令EOI是使8259A的中斷命令寄存器的第5位(EOI位)置1,清除當前中斷服務(wù)寄存器ISR中對應的ISn位,以告訴8259A該中斷已結束。
四、中斷向量表
1.中斷類(lèi)型號:每個(gè)中斷都被安排一個(gè)以示區別的8位的類(lèi)型編號稱(chēng)為中斷類(lèi)型號。80x86中斷系統能處理256種類(lèi)型的中斷,類(lèi)型號為0~0FFH。
2.中斷向量表:各個(gè)中斷類(lèi)型的處理子程序的入口地址表。存放于00000~003FFH的1KB單元中。低兩位字節存放中斷處理程序的偏移地址,高兩位存放段地址。每個(gè)類(lèi)型的中斷向量地址占用4個(gè)字節的存儲單元。
3.內部中斷的操作步驟
(1)取中斷類(lèi)型號;
(2)計算中斷向量地址;
(3)取中斷向量:偏移地址→(IP),段地址→(CS);
(4)轉入執行中斷處理程序;
(5)中斷返回到INT指令的下一條指令。
4.設置中斷向量:在檢查或設置任何中斷向量時(shí),總是避免直接使用中斷向量的絕對地址,而是使用DOS系統功能調用(21H)存取中斷向量。
1)設置中斷向量:把由AL指定的中斷類(lèi)型的中斷向量DS:DX放置到中斷向量表中。
預置:AH=25H
AL=中斷類(lèi)型號
DS:DX=中斷向量
執行:INT 21H
2)取中斷向量:把由AL指定的中斷類(lèi)型的中斷向量從中斷向量表中取到ES:BX中。
預置:AH=35H
AL=中斷類(lèi)型號
執行:INT 21H ??;中斷向量作為出口信息已在ES:BX中
5.中斷過(guò)程:當中斷發(fā)生時(shí),由中斷機構自動(dòng)完成下列動(dòng)作:
(1)取中斷類(lèi)型號N
(2)標志寄存器(FLAGS)內容入棧
(3)當前代碼段寄存器(CS)內容入棧
(4)當前指令計數器(IP)內容入棧
(5)禁止外部中斷和單步中斷( IF=0,TF=0 )
(6)從中斷向量表中取(4×N)中的字節內容送IP,取(4×N+2)中的字節內容送CS
(7)轉中斷處理程序。中斷處理程序需注意:
1)如在執行中斷處理程序中還允許中斷,可用STI置IF=1來(lái)開(kāi)中斷;
2)注意保護現場(chǎng)和恢復現場(chǎng);
3)中斷處理程序返回時(shí)使用IRET指令。
6.中斷優(yōu)先級和中斷嵌套
2)IBM PC的可屏蔽中斷(INTR)的優(yōu)先級由高到低為:IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7。但是可以由8259A的中斷命令寄存器(OCW2)的最高兩位D7、D6位
3)置為循環(huán)的優(yōu)先級。
4)中斷嵌套:正在運行的中斷處理程序又被中斷稱(chēng)為中斷嵌套。
一般是高級中斷嵌套低級中斷,此時(shí)要求低級中斷的處理程序中要有開(kāi)中斷指令STI。被同級或低級中斷源嵌套,除了使IF=1外,還要求向8259A發(fā)中斷結束命令EOI。
7.中斷處理程序
1)中斷準備:在主程序中設置。
設置中斷向量
設置設備的中斷屏蔽位
設置CPU的中斷允許位IF (開(kāi)中斷)
2)中斷響應:由硬件自動(dòng)完成。
外設接口送中斷請求給CPU
當前指令執行完后,CPU送中斷響應信號給外設接口
CPU接收中斷類(lèi)型號
當前的FLAGS,CS和IP保存入棧
清除TF和IF
中斷向量送IP和CS
3)中斷處理程序的編寫(xiě)方法與標準子程序類(lèi)似,編寫(xiě)步驟如下:
保護現場(chǎng),即保存寄存器內容
如允許中斷嵌套,則開(kāi)中斷(STI) 使IF=1
處理中斷內容
關(guān)中斷
送中斷結束命令(EOI)給8259A的中斷命令寄存器(OCW2)以清除8259A的ISR中對應的ISn位
恢復現場(chǎng),即恢復寄存器的內容
返回被中斷的程序(IRET,中斷返回)
電子愛(ài)動(dòng)手,關(guān)注電子DIY
聯(lián)系客服