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

下載本文檔

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

文檔簡介

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

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

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

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

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

若中斷類型碼為3,則由中斷類型碼取得中斷服務(wù)程序入口地址的過程如圖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開始的4個字節(jié)單元中。若這4個字節(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個字節(jié)單元的地址及內(nèi)容。解:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

圖9.10中斷服務(wù)程序的一般結(jié)構(gòu)由于進入中斷處理程序時IF已被清除,所以在執(zhí)行中斷處理程序的過程中,將不再響應(yīng)其他外部可屏蔽中斷請求。如果希望在當前這個中斷處理過程中能夠響應(yīng)更高級的中斷請求,實現(xiàn)中斷嵌套,則需用STI指令把IF置1,重新開放中斷。接下來是中斷服務(wù)程序的主體部分,即中斷服務(wù)程序應(yīng)完成的主要操作,這與實際的應(yīng)用有關(guān)。如果它的任務(wù)是某種出錯處理,一般要顯示輸出一系列信息。如果它是對一個I/O設(shè)備進行服務(wù),就按I/O設(shè)備的端口地址輸入或輸出一個單位(字節(jié)或字)的數(shù)據(jù)。在中斷服務(wù)程序的末尾需恢復(fù)原來的程序環(huán)境,需用幾條POP指令(或一條POPA指令)從堆棧中彈出被保護寄存器的內(nèi)容。這稱為“恢復(fù)現(xiàn)場”。中斷服務(wù)程序的最后一條指令必須是IRET指令。執(zhí)行IRET指令將從堆棧中彈出舊的IP、CS以及標志寄存器FR的內(nèi)容。這樣就恢復(fù)了原來的程序環(huán)境,程序?qū)谋恢袛嗟牡攸c繼續(xù)執(zhí)行。9.4.2在中斷向量表中置入中斷向量1.用MOV指令直接進行傳送用MOV指令直接進行傳送即是利用MOV指令直接將中斷服務(wù)程序的入口地址送入中斷向量表的相應(yīng)地址單元中。具體地說,就是將中斷服務(wù)程序入口地址的偏移量存放到物理地址為4N(N為中斷類型號)的字單元之中,將中斷服務(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)專門提供了在中斷向量表中存、取中斷向量的手段,功能號分別是25H和35H。(1)設(shè)置中斷向量(25H功能調(diào)用)25H功能調(diào)用把由AL指定的中斷類型的中斷向量(預(yù)置于DS:DX中)放入中斷向量表中。其基本使用方法為:

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

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í)行上述程序段,即可把對應(yīng)于中斷類型碼N的中斷向量置于中斷向量表之中。(2)取中斷向量(35H功能調(diào)用)35H功能調(diào)用把由AL指定中斷類型的中斷向量從中斷向量表中取到ES:BX中。其基本使用方法為:

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

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

例如:

MOVAL,N;送中斷類型碼NMOVAH,35HINT21H;取中斷向量,存放于ES:BX中如果用自己編寫的中斷處理程序代替系統(tǒng)中的中斷處理功能時,要注意保存原中斷向量。在設(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è)計1.主程序應(yīng)做的準備工作主程序通常要為中斷服務(wù)程序做必要的準備工作,除了上面介紹的中斷向量的設(shè)置外,還應(yīng)包括清除設(shè)備中斷屏蔽

溫馨提示

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

評論

0/150

提交評論