微型計(jì)算機(jī)基本原理與應(yīng)用(第二版)第9章 中斷及中斷控制器_第1頁(yè)
微型計(jì)算機(jī)基本原理與應(yīng)用(第二版)第9章 中斷及中斷控制器_第2頁(yè)
微型計(jì)算機(jī)基本原理與應(yīng)用(第二版)第9章 中斷及中斷控制器_第3頁(yè)
微型計(jì)算機(jī)基本原理與應(yīng)用(第二版)第9章 中斷及中斷控制器_第4頁(yè)
微型計(jì)算機(jī)基本原理與應(yīng)用(第二版)第9章 中斷及中斷控制器_第5頁(yè)
已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第9章中斷及中斷控制器本章主要內(nèi)容(1)中斷的基本概念(2)中斷的響應(yīng)和處理過(guò)程(3)中斷服務(wù)程序設(shè)計(jì)9.1基本概念9.1.1中斷在程序運(yùn)行時(shí),系統(tǒng)外部、內(nèi)部或現(xiàn)行程序本身若出現(xiàn)緊急事件,處理器必須立即強(qiáng)行中止現(xiàn)行程序的運(yùn)行,改變機(jī)器的工作狀態(tài)并啟動(dòng)相應(yīng)的程序來(lái)處理這些事件,然后再恢復(fù)原來(lái)的程序運(yùn)行,這一過(guò)程稱為中斷(interrupt)

。在通用計(jì)算機(jī)中,為了提高系統(tǒng)的效率,采用CPU與外設(shè)并行工作的方式,中斷就作為外設(shè)和CPU之間聯(lián)系的手段。隨著計(jì)算機(jī)系列化產(chǎn)品和操作系統(tǒng)的出現(xiàn),中斷系統(tǒng)的地位更加重要。1.中斷源能夠向CPU發(fā)出中斷請(qǐng)求的中斷來(lái)源稱為中斷源。常見(jiàn)的中斷源為:(1)一般的輸入/輸出設(shè)備,如CRT終端、打印機(jī)等;(2)數(shù)據(jù)通道,如磁盤(pán)、磁帶等;(3)實(shí)時(shí)時(shí)鐘,如定時(shí)器輸出的作為定時(shí)中斷請(qǐng)求信號(hào)等;(4)故障信號(hào),如電源掉電等;(5)軟件中斷,如為調(diào)試程序而設(shè)置的中斷源。2.現(xiàn)代計(jì)算機(jī)采用的中斷系統(tǒng)的主要目的(1)維持系統(tǒng)的正常工作,提高系統(tǒng)效率;(2)實(shí)時(shí)處理;(3)為故障處理作準(zhǔn)備。9.1.2中斷響應(yīng)和處理的一般過(guò)程每個(gè)中斷源向CPU發(fā)出的中斷請(qǐng)求信號(hào)通常是隨機(jī)的,而大多數(shù)CPU都是在現(xiàn)行指令周期結(jié)束時(shí),才檢測(cè)有無(wú)中斷請(qǐng)求信號(hào)到來(lái)。故在現(xiàn)行指令執(zhí)行期間,各中斷源必須把中斷請(qǐng)求信號(hào)鎖存起來(lái),并保持到CPU響應(yīng)這個(gè)中斷請(qǐng)求后,才清除中斷請(qǐng)求。CPU在執(zhí)行每條指令的最后一個(gè)機(jī)器周期的最后一個(gè)時(shí)鐘周期,檢測(cè)中斷請(qǐng)求信號(hào)輸入線。若發(fā)現(xiàn)中斷請(qǐng)求信號(hào)有效,對(duì)于可屏蔽中斷還必須CPU開(kāi)放中斷,則在下一總線周期進(jìn)入中斷響應(yīng)周期。進(jìn)入中斷響應(yīng)周期后,中斷響應(yīng)和處理的一般過(guò)程如下。進(jìn)入中斷響應(yīng)周期后,中斷響應(yīng)和處理的過(guò)程如下:1)關(guān)中斷CPU在響應(yīng)中斷時(shí),發(fā)出中斷響應(yīng)信號(hào)INTA,同時(shí)內(nèi)部自動(dòng)地關(guān)中斷,以禁止接受其他的中斷請(qǐng)求。2)保存斷點(diǎn)把斷點(diǎn)處的指令指針I(yè)P值和CS值壓入堆棧,以使中斷處理完后能正確地返回主程序斷點(diǎn)。3)識(shí)別中斷源CPU要對(duì)中斷請(qǐng)求進(jìn)行處理,必須找到相應(yīng)的中斷服務(wù)程序的入口地址,這就是中斷的識(shí)別。4)保護(hù)現(xiàn)場(chǎng)為了不使中斷服務(wù)程序的運(yùn)行影響主程序的狀態(tài),必須把斷點(diǎn)處有關(guān)寄存器(指在中斷服務(wù)程序中要使用的寄存器)的內(nèi)容以及標(biāo)志寄存器的狀態(tài)壓入堆棧保護(hù)。5)執(zhí)行中斷服務(wù)程序在執(zhí)行中斷服務(wù)程序中,可在適當(dāng)時(shí)刻重新開(kāi)放中斷,以便允許響應(yīng)較高優(yōu)先級(jí)的中斷。6)恢復(fù)現(xiàn)場(chǎng)并返回把中斷服務(wù)程序執(zhí)行前壓入堆棧的現(xiàn)場(chǎng)信息彈回原寄存器,然后執(zhí)行中斷返回指令,從而返回主程序繼續(xù)運(yùn)行。在上述中斷響應(yīng)及處理的6項(xiàng)操作中,前3項(xiàng)是中斷響應(yīng)過(guò)程,一般由中斷系統(tǒng)硬件負(fù)責(zé)完成;后3項(xiàng)是中斷處理過(guò)程,通常是由用戶或系統(tǒng)程序設(shè)計(jì)者編制的中斷處理程序(軟件)負(fù)責(zé)完成。針對(duì)一個(gè)具體的系統(tǒng)或機(jī)型,中斷服務(wù)程序設(shè)計(jì)者應(yīng)該清楚該系統(tǒng)在中斷響應(yīng)時(shí),中斷響應(yīng)硬件完成了哪些操作(如程序狀態(tài)字PSW是否已被壓入堆棧),還需中斷處理軟件(中斷服務(wù)程序)完成哪些操作。9.1.3中斷優(yōu)先級(jí)和中斷嵌套1.中斷優(yōu)先級(jí)在實(shí)際系統(tǒng)中,多個(gè)中斷請(qǐng)求可能同時(shí)出現(xiàn),但中斷系統(tǒng)只能按一定的次序來(lái)響應(yīng)和處理,這時(shí)CPU必須確定服務(wù)的次序,即根據(jù)中斷源的重要性和實(shí)時(shí)性,照顧到操作系統(tǒng)處理的方便,對(duì)中斷源的響應(yīng)次序進(jìn)行確定。這個(gè)響應(yīng)次序稱為中斷優(yōu)先級(jí)(priority)。通常,可用軟件查詢法確定中斷優(yōu)先級(jí),也可用硬件組成中斷優(yōu)先級(jí)編碼電路來(lái)實(shí)現(xiàn)。現(xiàn)代PC機(jī)中多采用可編程中斷控制器(如8259A)來(lái)處理中斷優(yōu)先級(jí)問(wèn)題。(1)軟件查詢法確定中斷優(yōu)先級(jí)采用軟件查詢法解決中斷優(yōu)先級(jí)只需要少量硬件電路。如圖9.1所示,系統(tǒng)中有多種外部設(shè)備,將這些設(shè)備的中斷請(qǐng)求信號(hào)相“或”,從而產(chǎn)生一個(gè)總的中斷請(qǐng)求信號(hào)INTR發(fā)給CPU。圖9.1軟件查詢接口電路磁盤(pán)磁帶CRT顯示鍵盤(pán)輸入打印輸出電源故障紙帶輸入保留INTR當(dāng)CPU響應(yīng)中斷請(qǐng)求進(jìn)入中斷處理程序后,必須在中斷處理程序的開(kāi)始部分安排一段帶優(yōu)先級(jí)的查詢程序,查詢的先后順序就體現(xiàn)了不同設(shè)備的中斷優(yōu)先級(jí),即先查的設(shè)備具有較高的優(yōu)先級(jí),后查的設(shè)備具有較低的優(yōu)先級(jí)。一般來(lái)說(shuō)總是先查速度較快或是實(shí)時(shí)性較高的設(shè)備。軟件查詢的流程如圖9.2所示。圖9.2軟件查詢流程圖保護(hù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)A申請(qǐng)服務(wù)?B申請(qǐng)服務(wù)?C申請(qǐng)服務(wù)?外設(shè)A中斷服務(wù)程序NNN外設(shè)B中斷服務(wù)程序外設(shè)C中斷服務(wù)程序YYY(2)菊花鏈優(yōu)先級(jí)排隊(duì)電路菊花鏈(DaisyChain)優(yōu)先級(jí)排隊(duì)電路是一種優(yōu)先級(jí)管理的簡(jiǎn)單硬件方案。它是在每個(gè)設(shè)備接口設(shè)置一個(gè)簡(jiǎn)單的邏輯電路,以便根據(jù)優(yōu)先級(jí)順序來(lái)傳遞或截留CPU發(fā)出的中斷響應(yīng)信號(hào)INTA*,以實(shí)現(xiàn)響應(yīng)中斷的優(yōu)先順序。(3)可編程中斷控制器中斷優(yōu)先級(jí)管理的第三種方法是利用專門(mén)的可編程中斷控制器,如可編程中斷控制器8259A。2.中斷嵌套當(dāng)CPU正在執(zhí)行優(yōu)先級(jí)較低的中斷服務(wù)程序時(shí),允許響應(yīng)比它優(yōu)先級(jí)高的中斷請(qǐng)求,而將正在處理的中斷暫時(shí)掛起,這就是中斷嵌套。此時(shí),CPU首先為級(jí)別高的中斷服務(wù),待優(yōu)先級(jí)高的中斷服務(wù)結(jié)束后,再返回到剛才被中斷的較低的那一級(jí),繼續(xù)為它進(jìn)行中斷服務(wù)。如圖9.3所示。圖9.3中斷嵌套示意圖STIIRETSTIIRET............中斷嵌套的深度(中斷服務(wù)程序又被中斷的層次)受到堆棧容量的限制。所以在編寫(xiě)中斷服務(wù)程序時(shí),必須要考慮有足夠的堆棧單元來(lái)保留多次中斷的斷點(diǎn)信息及有關(guān)寄存器的內(nèi)容。9.280x86實(shí)模式的中斷系統(tǒng)9.2.1中斷的分類中斷分類的方式很多。根據(jù)其重要性和緊急程度可分為可屏蔽中斷和不可屏蔽中斷,根據(jù)中斷源的位置可分為內(nèi)部中斷和外部中斷,根據(jù)進(jìn)入中斷的方式可分為自愿中斷和強(qiáng)迫中斷等。實(shí)模式下的80x86有一個(gè)簡(jiǎn)單而靈活的中斷系統(tǒng),每個(gè)中斷都有一個(gè)中斷類型碼(也叫中斷類型號(hào)),以供CPU進(jìn)行識(shí)別。實(shí)模式下的80x86最多能處理256種不同的中斷,對(duì)應(yīng)的中斷類型碼為0~255。中斷可以由CPU外的硬設(shè)備啟動(dòng),也可由軟件中斷指令啟動(dòng),在某些情況下,也可由CPU自身啟動(dòng)。根據(jù)中斷源的位置,將實(shí)模式下的80x86系統(tǒng)的中斷分為內(nèi)部中斷和外部中斷兩大類,如圖9.4所示。內(nèi)部中斷來(lái)自CPU內(nèi)部,包括指令中斷INTn、溢出中斷(INTO)、除法錯(cuò)(除數(shù)為0)中斷、單步中斷、斷點(diǎn)中斷(INT3)等幾種。圖9.480x86實(shí)模式系統(tǒng)的中斷分類INTn指令中斷邏輯斷點(diǎn)中斷(INT3)溢出中斷(INTO,OF=1)單步中斷(TF=1)除法錯(cuò)中斷軟件中斷(內(nèi)部中斷)非屏蔽中斷請(qǐng)求中斷控制器(8259A)NMIINTRIRQ0....IRQ7可屏蔽中斷

硬件中斷(外部中斷)80x86實(shí)模式系統(tǒng)中可引入的外部中斷分為可屏蔽中斷和不可屏蔽中斷兩大類。不可屏蔽中斷也叫非屏蔽中斷,通過(guò)CPU的NMI引腳進(jìn)入,它不受中斷允許標(biāo)志IF的屏蔽,一般將比較緊急、需要系統(tǒng)立即響應(yīng)的中斷定義為非屏蔽中斷??善帘沃袛嗍峭ㄟ^(guò)CPU的INTR引腳進(jìn)入的,并且只有當(dāng)中斷允許標(biāo)志IF=1時(shí),可屏蔽中斷才能進(jìn)入。在一個(gè)系統(tǒng)中,通過(guò)中斷控制器(如8259A)的配合工作,可屏蔽中斷可以有幾個(gè)甚至幾十個(gè)。外部中斷也叫硬件中斷,內(nèi)部中斷也叫軟件中斷。需要說(shuō)明的是,對(duì)于工作于保護(hù)模式下的80386以上微處理器,把外部中斷稱為“中斷”,把內(nèi)部中斷稱為“異常”(exception)。關(guān)于保護(hù)模式下的中斷和異常的相關(guān)概念和操作過(guò)程,將在第15章做專門(mén)介紹。9.2.2中斷向量表所謂中斷向量,實(shí)際上就是中斷服務(wù)程序的入口地址,每個(gè)中斷類型對(duì)應(yīng)一個(gè)中斷向量。每個(gè)中斷向量占4字節(jié)的存儲(chǔ)單元。其中:前兩個(gè)字節(jié)單元存放中斷服務(wù)程序入口地址的偏移量(IP),低字節(jié)在前,高字節(jié)在后;后兩個(gè)字節(jié)單元存放中斷服務(wù)程序入口地址的段基值(CS),也是低字節(jié)在前,高字節(jié)在后。80x86實(shí)模式系統(tǒng)允許引入的中斷可達(dá)256個(gè),因此需占用1K字節(jié)的存儲(chǔ)空間來(lái)存放這256個(gè)中斷服務(wù)程序入口地址。80x86實(shí)模式系統(tǒng)把中斷服務(wù)程序入口地址信息設(shè)置在存儲(chǔ)器的最低端,即從00000H~003FFH的1K字節(jié)存儲(chǔ)空間中。這一存儲(chǔ)空間就叫中斷向量表,如圖9.5所示。圖9.5實(shí)模式系統(tǒng)的中斷向量表CSIPCSIPCSIPCSIPCSIPCSIPCSIP︽︾︽︾︽︾︽︾類型255(十進(jìn)制)類型32類型31(十進(jìn)制)供用戶定義的中斷(共224個(gè))類型5類型4類型3類型2類型1類型0保留的中斷(共27個(gè))專用的中斷(共5個(gè))0000:03FFH0000:007FH0000:007EH0000:0014H0000:0013H0000:0010H0000:000FH0000:000CH0000:000BH0000:0008H0000:0007H0000:0004H0000:0003H0000:0000H溢出中斷斷點(diǎn)中斷非屏蔽中斷單步中斷除數(shù)為0中斷在中斷向量表中,各中斷向量按中斷類型碼從0到255順序存放。這樣,知道了中斷類型碼,很快就可算出相應(yīng)中斷向量的存放位置,從而取出中斷向量。例如,中斷類型碼為27H的中斷所對(duì)應(yīng)的中斷向量應(yīng)存放在從0000H:009CH開(kāi)始的4個(gè)連續(xù)字節(jié)單元中。如果相應(yīng)存儲(chǔ)單元的內(nèi)容如圖9.6所示,那么27H號(hào)中斷的中斷服務(wù)程序的入口地址即為8765H:4321H。圖9.6中斷向量的存放格式87H65H43H21H0000:009FH0000:009CH由于中斷向量在中斷向量表中是按中斷類型碼(也稱中斷向量號(hào))順序存放的,所以每個(gè)中斷向量的地址可由中斷類型碼乘以4計(jì)算出來(lái)。CPU響應(yīng)中斷時(shí),只要把中斷類型碼N左移2位(乘以4),即可得到中斷向量在中斷向量表中的對(duì)應(yīng)地址4N(該中斷向量所占4個(gè)字節(jié)單元的第一個(gè)字節(jié)單元的地址)。然后把由此地址開(kāi)始的兩個(gè)低字節(jié)單元的內(nèi)容裝入IP寄存器:IP←(4N,4N+1)

再把兩個(gè)高字節(jié)單元的內(nèi)容裝入CS寄存器:

CS←(4N+2,4N+3)這就是使程序轉(zhuǎn)入中斷類型碼為N的中斷服務(wù)程序的控制過(guò)程,如下面例9.1所示。至于中斷類型碼N的來(lái)源,對(duì)于不同的中斷類型(內(nèi)部中斷、外部中斷),情況有所不同,詳見(jiàn)后述。例9.1

若中斷類型碼為3,則由中斷類型碼取得中斷服務(wù)程序入口地址的過(guò)程如圖9.7所示。圖9.7根據(jù)中斷類型碼取得中斷服務(wù)程序入口地址OOH(IPL)0AH(IPH)00H(CSL)1EH(CSH)中斷服務(wù)程序00000H00001H0000CH(0000:000CH)

1EA00H(1E00:0A00H)FFFFFH高地址低地址3×4=000CH(中斷向量地址)例9.2

中斷類型碼為20H,則中斷服務(wù)程序的入口地址存放在中斷向量表從0000:0080H開(kāi)始的4個(gè)字節(jié)單元中。若這4個(gè)字節(jié)單元的內(nèi)容分別為:(0000:0080H)=10H(0000:0081H)=20H(0000:0082H)=30H(0000:0083H)=40H試指出相應(yīng)的中斷服務(wù)程序的入口地址。解:

中斷服務(wù)程序的入口地址為

。例9.3

中斷類型碼為17H,若中斷服務(wù)程序的入口地址為2340H:7890H,試指出中斷向量表中存放該中斷向量的4個(gè)字節(jié)單元的地址及內(nèi)容。解:

由于中斷類型碼為17H,所以中斷向量表中存放相應(yīng)中斷向量的4個(gè)字節(jié)單元的地址分別為0000:005CH、0000:005DH、0000:005EH、0000:005FH,4個(gè)字節(jié)單元的內(nèi)容分別為

。9.2.3外部中斷由外部的中斷請(qǐng)求信號(hào)啟動(dòng)的中斷,稱為外部中斷,也稱硬件中斷。80x86CPU為外部中斷提供兩條引線,即NMI和INTR,用來(lái)輸入中斷請(qǐng)求信號(hào)。1.非屏蔽中斷從NMI引腳進(jìn)入的中斷為非屏蔽中斷,它不受中斷允許標(biāo)志IF的影響。非屏蔽中斷的類型碼為2,因此,非屏蔽中斷處理子程序的入口地址存放在08H、09H、0AH和0BH這4個(gè)字節(jié)單元中。2.可屏蔽中斷一般外部設(shè)備請(qǐng)求的中斷都是從CPU的INTR端引入的可屏蔽中斷。當(dāng)CPU接收到一個(gè)可屏蔽中斷請(qǐng)求時(shí),如果中斷允許標(biāo)志IF為1,那么CPU就會(huì)在執(zhí)行完當(dāng)前指令后響應(yīng)這一中斷請(qǐng)求。至于IF的設(shè)置和清除,則可以通過(guò)指令或調(diào)試工具來(lái)實(shí)現(xiàn)。CPU響應(yīng)外部可屏蔽中斷時(shí),往INTA引腳上先后發(fā)兩個(gè)負(fù)脈沖。外設(shè)接口收到第二個(gè)負(fù)脈沖以后,立即往數(shù)據(jù)總線上送出中斷類型碼,以供CPU讀取。9.2.4內(nèi)部中斷內(nèi)部中斷也稱軟件中斷。它是由于CPU執(zhí)行了INTn(含INT3)、INTO指令,或者由于除法出錯(cuò)以及進(jìn)行單步操作所引起的中斷,主要包括INTn指令中斷、斷點(diǎn)中斷、溢出中斷、除法錯(cuò)中斷以及單步中斷。(1)INTn指令中斷80x86系統(tǒng)提供了直接調(diào)用中斷處理子程序的手段,這就是中斷指令I(lǐng)NTn。指令中的中斷類型碼n告訴CPU調(diào)用哪個(gè)中斷處理子程序。(2)除法錯(cuò)中斷(類型0)在執(zhí)行除法指令DIV或IDIV后,若所得的商超出了目標(biāo)寄存器所能表示的范圍,比如用數(shù)值0作除數(shù),則CPU立即產(chǎn)生一個(gè)0型中斷。(3)溢出中斷(類型4)若上一條指令執(zhí)行的結(jié)果使溢出標(biāo)志位OF置1,則緊接著執(zhí)行INTO指令時(shí),將引起類型為4的內(nèi)部中斷,CPU將轉(zhuǎn)入溢出錯(cuò)誤處理。若OF=0時(shí),則INTO指令執(zhí)行空操作,即INTO指令不起作用。

INTO指令通常安排在算術(shù)運(yùn)算指令之后,以便在發(fā)生溢出時(shí)能及時(shí)處理。(4)單步中斷(類型1)當(dāng)把CPU標(biāo)志寄存器的TF位置為1以后,CPU便處于單步工作方式。在單步工作方式下,CPU每執(zhí)行完一條指令,就會(huì)自動(dòng)產(chǎn)生一個(gè)1型中斷,進(jìn)入1型中斷處理程序。此處理程序顯示CPU內(nèi)部各寄存器的內(nèi)容并告知某些附帶的信息。(5)斷點(diǎn)中斷(類型3)與單步中斷類似,斷點(diǎn)中斷也是一種調(diào)試程序的手段,并且常常和單步中斷結(jié)合使用。對(duì)一個(gè)大的程序,不可能對(duì)整個(gè)程序全部用單步方式來(lái)調(diào)試,而只能先將程序中的某一錯(cuò)誤確定在程序中的一小段中,再對(duì)這一小段程序用單步方式跟蹤調(diào)試。斷點(diǎn)中斷就是用來(lái)達(dá)到這個(gè)目的的。內(nèi)部中斷的特點(diǎn)是:(1)中斷類型碼由CPU內(nèi)部自動(dòng)提供(含從INTn指令中自動(dòng)提?。?,不需要執(zhí)行中斷響應(yīng)總線周期(INTA總線周期)去讀取中斷類型碼。(2)除單步中斷外,所有內(nèi)部中斷都不可以用軟件的方法來(lái)禁止(屏蔽)。單步中斷可以通過(guò)軟件將TF標(biāo)志置1或清0來(lái)予以允許或禁止。(3)除單步中斷外,所有內(nèi)部中斷的優(yōu)先級(jí)都比外部中斷高。9.2.5中斷響應(yīng)和中斷處理過(guò)程1.可屏蔽中斷的響應(yīng)和處理過(guò)程圖9.8

給出了可屏蔽中斷從中斷請(qǐng)求信號(hào)產(chǎn)生到中斷服務(wù)程序結(jié)束并返回被中斷程序的全過(guò)程。圖9.8可屏蔽中斷全過(guò)程

INTR____INTAIPCSPSW(FR)中斷類型碼寄存器②CPU完成現(xiàn)行指令,發(fā)出中斷響應(yīng)信號(hào)

Q中斷請(qǐng)求中斷屏蔽①接口發(fā)中斷請(qǐng)求信號(hào)INTR③CPU讀取中斷類型碼N新的(IP)新的(CS)舊的(IP)舊的(CS)舊的(PSW)被中斷的程序.....STI...IRET中斷服務(wù)程序...存儲(chǔ)器中斷向量表︽︽︽︽16位4N4N+2⑤清除IF和TF⑦轉(zhuǎn)入中斷服務(wù)程序⑩返回被中斷的程序⑧開(kāi)放中斷(可選)④現(xiàn)行PSW、CS、IP壓棧⑨IRET指令使舊的IP、CS、PSW彈出堆棧CPU外設(shè)接口⑥取CS、IP新值由圖9.8可見(jiàn),首先由外設(shè)接口產(chǎn)生中斷請(qǐng)求信號(hào)送往CPU的INTR引腳上。CPU是否響應(yīng)取決于其內(nèi)部的中斷允許標(biāo)志位IF,如果IF為0,則在IF變成1以前CPU不會(huì)響應(yīng)該中斷請(qǐng)求;如果IF為1,則CPU在完成正在執(zhí)行的指令后,便開(kāi)始響應(yīng)中斷,從INTA引腳發(fā)出中斷響應(yīng)信號(hào)INTA給外設(shè)接口,該響應(yīng)信號(hào)將使外設(shè)接口(或?qū)iT(mén)的中斷控制電路如8259A)把8位的中斷類型碼通過(guò)數(shù)據(jù)總線送給CPU。之后相繼完成下列步驟:(1)CPU讀取中斷類型碼N;(2)依次把PSW、CS和IP的當(dāng)前內(nèi)容壓入堆棧;

(3)清除IF和TF標(biāo)志;(4)把字存儲(chǔ)單元4N的內(nèi)容送入IP,4N+2的內(nèi)容送入CS。此時(shí),將從新的CS:IP值所指處開(kāi)始執(zhí)行中斷服務(wù)程序。若允許中斷嵌套,則可在中斷服務(wù)程序中保存相關(guān)寄存器的內(nèi)容之后安排一條開(kāi)放中斷指令STI。這是因?yàn)镃PU響應(yīng)中斷后便自動(dòng)清除了IF和TF標(biāo)志位,當(dāng)中斷服務(wù)程序執(zhí)行了STI指令后,IF標(biāo)志位又被重新置1,以便讓優(yōu)先級(jí)較高的中斷請(qǐng)求能夠得到響應(yīng);在中斷服務(wù)程序的最后安排一條中斷返回指令I(lǐng)RET,控制CPU返回到被中斷的程序。CPU響應(yīng)外部非屏蔽中斷NMI或各種內(nèi)部中斷時(shí)的操作順序基本上與上述過(guò)程相同,不同之處是響應(yīng)這些中斷時(shí)不需要從外部讀取中斷類型碼,它們的中斷類型碼是由CPU內(nèi)部自動(dòng)產(chǎn)生或直接從指令流中獲取的。一旦CPU識(shí)別NMI中斷請(qǐng)求或內(nèi)部中斷請(qǐng)求時(shí),便會(huì)自動(dòng)轉(zhuǎn)入它們各自的中斷服務(wù)程序。判斷與思考:

若在主程序中已使IF=1(開(kāi)中),則在響應(yīng)中斷請(qǐng)求并執(zhí)行完中斷服務(wù)程序返回主程序后,IF標(biāo)志位是否為1決定于在中斷服務(wù)程序中是否執(zhí)行了STI指令。2.80x86實(shí)模式中斷響應(yīng)和中斷處理過(guò)程

80x86實(shí)模式中斷響應(yīng)和處理流程如圖9.9所示。圖9.980x86實(shí)模式中斷響應(yīng)和中斷處理過(guò)程中斷優(yōu)先級(jí)除法錯(cuò),INTn,INTO最高NMIINTR單步最低80x86實(shí)模式中斷優(yōu)先級(jí)結(jié)束當(dāng)前指令除法錯(cuò),INTO,INTn?NMIINTR?TF=1?執(zhí)行下一條指令NNNNIF=1?NYYYYY內(nèi)部自動(dòng)形成中斷類型碼N讀中斷類型碼N標(biāo)志壓入堆棧令TEMP=TF清除IF和TFCS和IP壓入堆棧(4N,4N+1)

IP(4N+2,4N+3)

CS執(zhí)行中斷處理程序IP、CS出棧標(biāo)志寄存器出棧返回被中斷的主程序有NMI?TEMP=1?YYNN執(zhí)行IRET指令①‘①②③④⑤⑥需要說(shuō)明的是,在圖9.9所示的中斷響應(yīng)和處理過(guò)程中,其中的①~⑥步(含①′)是由處理器內(nèi)部的中斷系統(tǒng)硬件自動(dòng)完成的,即無(wú)需程序員的直接控制和干預(yù);其后的中斷處理過(guò)程則是通過(guò)執(zhí)行中斷服務(wù)程序(軟件)來(lái)完成的。9.3可編程中斷控制器8259A

8259A是一種典型的可編程中斷控制器。利用單片8259A能控制8級(jí)中斷,通過(guò)級(jí)聯(lián)方式最多可構(gòu)成64級(jí)的中斷系統(tǒng)。

8259A能判斷一個(gè)中斷請(qǐng)求輸入信號(hào)是否有效,是否符合信號(hào)的電氣規(guī)定,是否被屏蔽,并能進(jìn)行優(yōu)先級(jí)的判決。CPU響應(yīng)中斷后,8259A還能在中斷響應(yīng)周期將被響應(yīng)中斷的中斷類型碼送給CPU。

8259A是一個(gè)設(shè)計(jì)十分成功的可編程中斷控制器。早在8位微處理器(如8080,8085)的年代就已經(jīng)推出了,并被廣泛應(yīng)用于80x86系統(tǒng)中。雖然在現(xiàn)代PC機(jī)主板上已經(jīng)看不到單獨(dú)的8259A芯片,但實(shí)際上它已被集成到專門(mén)的芯片組之中。今天,8259A的結(jié)構(gòu)及功能邏輯,仍然是人們學(xué)習(xí)可編程中斷控制器、熟悉和理解中斷響應(yīng)和處理過(guò)程的典型結(jié)構(gòu)和基本電路。9.4中斷服務(wù)程序設(shè)計(jì)9.4.1中斷服務(wù)程序的一般結(jié)構(gòu)中斷服務(wù)程序的一般結(jié)構(gòu)如圖9.10所示。由該圖可見(jiàn),在中斷服務(wù)程序的開(kāi)始部分,通常要安排幾條PUSH指令,把將要在中斷服務(wù)程序中用到的寄存器的內(nèi)容壓入堆棧保存,以便在中斷服務(wù)結(jié)束時(shí)再?gòu)亩褩V袕棾觯謴?fù)原先的內(nèi)容,這通常稱為“保存現(xiàn)場(chǎng)”。

圖9.10中斷服務(wù)程序的一般結(jié)構(gòu)由于進(jìn)入中斷處理程序時(shí)IF已被清除,所以在執(zhí)行中斷處理程序的過(guò)程中,將不再響應(yīng)其他外部可屏蔽中斷請(qǐng)求。如果希望在當(dāng)前這個(gè)中斷處理過(guò)程中能夠響應(yīng)更高級(jí)的中斷請(qǐng)求,實(shí)現(xiàn)中斷嵌套,則需用STI指令把IF置1,重新開(kāi)放中斷。接下來(lái)是中斷服務(wù)程序的主體部分,即中斷服務(wù)程序應(yīng)完成的主要操作,這與實(shí)際的應(yīng)用有關(guān)。如果它的任務(wù)是某種出錯(cuò)處理,一般要顯示輸出一系列信息。如果它是對(duì)一個(gè)I/O設(shè)備進(jìn)行服務(wù),就按I/O設(shè)備的端口地址輸入或輸出一個(gè)單位(字節(jié)或字)的數(shù)據(jù)。在中斷服務(wù)程序的末尾需恢復(fù)原來(lái)的程序環(huán)境,需用幾條POP指令(或一條POPA指令)從堆棧中彈出被保護(hù)寄存器的內(nèi)容。這稱為“恢復(fù)現(xiàn)場(chǎng)”。中斷服務(wù)程序的最后一條指令必須是IRET指令。執(zhí)行IRET指令將從堆棧中彈出舊的IP、CS以及標(biāo)志寄存器FR的內(nèi)容。這樣就恢復(fù)了原來(lái)的程序環(huán)境,程序?qū)谋恢袛嗟牡攸c(diǎn)繼續(xù)執(zhí)行。9.4.2在中斷向量表中置入中斷向量1.用MOV指令直接進(jìn)行傳送用MOV指令直接進(jìn)行傳送即是利用MOV指令直接將中斷服務(wù)程序的入口地址送入中斷向量表的相應(yīng)地址單元中。具體地說(shuō),就是將中斷服務(wù)程序入口地址的偏移量存放到物理地址為4N(N為中斷類型號(hào))的字單元之中,將中斷服務(wù)程序入口地址的段基值存放到物理地址為4N+2的字單元中。如下列程序段所示:MOVAX,0MOVES,AXMOVBX,N*4MOVAX,OFFSETINTHANDMOVES:WORDPTR[BX],AX;置入中斷服務(wù)程序入口地址的偏移量MOVAX,SEGINTHANDMOVES:WORDPTR[BX+2],AX;置入中斷服務(wù)程序入口地址的段基值┇

INTHAND:

中斷服務(wù)程序

IRET2.利用DOS功能調(diào)用法DOS功能調(diào)用(INT21H)專門(mén)提供了在中斷向量表中存、取中斷向量的手段,功能號(hào)分別是25H和35H。(1)設(shè)置中斷向量(25H功能調(diào)用)25H功能調(diào)用把由AL指定的中斷類型的中斷向量(預(yù)置于DS:DX中)放入中斷向量表中。其基本使用方法為:

預(yù)置:AH=25HAL=中斷類型號(hào)

DS:DX=中斷向量執(zhí)行:INT21H例9.4PUSHDS;保存DSMOVAX,SEGINTHANDMOVDS,AX;將中斷服務(wù)程序入口地址的段基值預(yù)置于DS中MOVDX,OFFSETINTHAND;將中斷服務(wù)程序入口地址的偏移量預(yù)置于DX中MOVAL,N;送中斷類型碼NMOVAH,25HINT21H;在中斷向量表中設(shè)置中斷向量POPDS;恢復(fù)DS執(zhí)行上述程序段,即可把對(duì)應(yīng)于中斷類型碼N的中斷向量置于中斷向量表之中。(2)取中斷向量(35H功能調(diào)用)35H功能調(diào)用把由AL指定中斷類型的中斷向量從中斷向量表中取到ES:BX中。其基本使用方法為:

預(yù)置:AH=35HAL=中斷類型號(hào)執(zhí)行:INT21H

返回參數(shù):ES:BX=中斷向量

例如:

MOVAL,N;送中斷類型碼NMOVAH,35HINT21H;取中斷向量,存放于ES:BX中如果用自己編寫(xiě)的中斷處理程序代替系統(tǒng)中的中斷處理功能時(shí),要注意保存原中斷向量。在設(shè)置新的中斷向量時(shí),應(yīng)先保存原中斷向量再設(shè)置新的中斷向量,并于程序結(jié)束前恢復(fù)原中斷向量。如例9.5所示。例9.5使用DOS功能調(diào)用存、取中斷向量MOVAL,N;typeNInterruptMOVAH,35H;getInterruptvectorINT21HPUSHES;savetheoldbaseandPUSHBX;offsetofinterruptNPUSHDSMOVAX,SEGINTHANDMOVDS,AX;baseofINTHANDinDSMOVDX,OffsetINTHAND;offsetinDXMOVAL,NMOVAH,25H;SetInterruptVectorINT21HPOPDS…POPDX;restoretheoldoffsetPOPDS;andbaseofinterruptMOVAL,NMOVAH,25H;setinterruptvectorINT21HRET;returnINTHAND:….;InterruptProcessingRoutineIRET9.4.3中斷服務(wù)程序設(shè)計(jì)1.主程序應(yīng)做的準(zhǔn)備工作主程序通常要為中斷服務(wù)程序做必要的準(zhǔn)備工作,除了上面介紹的中斷向量的設(shè)置外,還應(yīng)包括清除設(shè)備中斷屏蔽

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論