第7章輸入輸出接口與中斷技術(shù)_第1頁
第7章輸入輸出接口與中斷技術(shù)_第2頁
第7章輸入輸出接口與中斷技術(shù)_第3頁
第7章輸入輸出接口與中斷技術(shù)_第4頁
第7章輸入輸出接口與中斷技術(shù)_第5頁
已閱讀5頁,還剩189頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章輸入輸出接口與中斷技術(shù)7.1輸入輸出接口概述7.2CPU與外設之間數(shù)據(jù)傳送的方式7.3中斷技術(shù)7.48086/8088的中斷系統(tǒng)和中斷處理7.5可編程中斷控制器1.掌握理解接口基本結(jié)構(gòu)的特點。2.掌握CPU與外設之間的數(shù)據(jù)傳送方式。3.掌握無條件傳送與有條件傳送的編程。4.正確理解中斷、中斷系統(tǒng)及其功能。5.掌握單個中斷源的中斷的條件與過程。6.正確理解和靈活運用中斷向量表。7.掌握中斷控制器內(nèi)部8個部件的功能及其關(guān)系。

在計算機應用中,必然同各種各樣的外設打交道。當它被用于管理、生產(chǎn)過程的檢測與控制以及科學計算時,都要求把控制程序和原始數(shù)據(jù)通過相應的輸入設備送入計算機;CPU在程序的控制下,對這些信息進行加工處理,然后把結(jié)果以用戶所需要的方式通過輸出設備予以輸出。

外設與計算機的連接不能像存儲器那樣直接連接到總線上,而必須通過各自的接口電路與主機相連。7.1.1CPU與外設間的連接7.1輸入輸出概述MEMI/O設備不同點品種有限品種繁多功能單一功能多樣傳送一個字節(jié)傳送規(guī)律不同與CPU速度匹配與CPU速度不匹配易于控制難于控制結(jié)論可與CPU直接連接需經(jīng)過I/O接口電路與CPU連接

CPU與外設的輸入輸出操作類似于存儲器的讀寫操作,即I/O(讀/寫);但外設與存儲器有許多不同點,其比較如下表所示。

接口電路傳送的信息可分為數(shù)據(jù)信息、狀態(tài)信息和控制信息三類:

1.數(shù)據(jù)信息數(shù)據(jù)信息是最基本的一種信息,包括:

(1)數(shù)字量:通常為8位二進制數(shù)或ASCII碼。

7.1.2接口電路傳送的信息非電量信息傳感器電量信號處理A/DCPU

(2)模擬量:當計算機用于檢測、數(shù)據(jù)采集或控制時,大量的現(xiàn)場信息是連續(xù)變化的物理量(如:溫度、壓力、流量、位移、速度等),經(jīng)傳感器把非電量轉(zhuǎn)換成電量并經(jīng)過放大即得到模擬電流或電壓,這些模擬量,計算機不能直接接收和處理,必須經(jīng)過A/D轉(zhuǎn)換,才能輸入計算機;而計算機輸出的數(shù)字量也必須經(jīng)D/A轉(zhuǎn)換后才能去控制執(zhí)行機構(gòu)。

(3)開關(guān)量:具有“0”和“1”兩個狀態(tài)的量,用一位二進制數(shù)表示。例如電機的啟與停,開關(guān)的合與開等。

2.狀態(tài)信息

反映外設當前所處工作狀態(tài)的信息,以作為CPU與外設間可靠交換數(shù)據(jù)的條件。輸入時,它告知CPU有關(guān)輸入設備的數(shù)據(jù)是否準備好(Ready=1?);輸出時,它告知CPU輸出設備是否空閑(Busy=0?)。CPU是通過接口電路來掌握I/O設備的狀態(tài),以決定可否輸入或輸出數(shù)據(jù)。

3.控制信息

用于控制外設的啟停。CPUI/O

設備I/O

接口123ABDBCBDATASTATUSCONTROLCPU與外設之間的接口信息

接口電路基本結(jié)構(gòu)及其連接如圖所示。接口電路根據(jù)傳送不同信息的需要,其基本結(jié)構(gòu)安排有其特點。

(1)3種信息的性質(zhì)不同,應通過不同的端口分別傳送。如,數(shù)據(jù)輸入/輸出寄存器、狀態(tài)寄存器與命令控制寄存器各占1個端口,每個端口都有自己的端口地址,故能用不同的端口地址來區(qū)分不同性質(zhì)的信息。(2)在用輸入輸出指令尋址外設的CPU中,外設的狀態(tài)作為一種輸入數(shù)據(jù),而CPU的控制命令是作為一種輸出數(shù)據(jù)的,從而可通過數(shù)據(jù)總線來分別傳送。(3)端口地址由CPU地址總線的低8位或低16位地址信息來確定,CPU根據(jù)I/O指令提供的端口地址來尋址端口,然后同外設交換信息。

在微型計算機系統(tǒng)中,主要的輸入輸出方法有以下3種:

①程序傳送②中斷方式③直接存貯器存取(DMA)方式

這些方式不僅要實現(xiàn)主機與外設之間數(shù)據(jù)的傳輸,還要實現(xiàn)狀態(tài)信息、命令信息的傳輸。7.2CPU與I/O設備之間的數(shù)據(jù)傳送方式

一般,這些外設隨時做好了數(shù)據(jù)傳送的準備,而無須檢測其狀態(tài)。

這里先要弄清有關(guān)輸入緩沖與輸出鎖存的基本概念。

輸入數(shù)據(jù)時,因簡單外設輸入數(shù)據(jù)的保持時間相對于CPU的接收速度來說較長,故輸入數(shù)據(jù)通常不用加鎖存器來鎖存,而直接使用三態(tài)緩沖器與CPU數(shù)據(jù)總線相連即可。

輸出數(shù)據(jù)時,一般都需要鎖存器將要輸出的數(shù)據(jù)保持一段時間,其長短和外設的動作相適應。鎖存時,在鎖存允許端CE=1(為無效電平)時,數(shù)據(jù)總線上的新數(shù)據(jù)不能進入鎖存器。只有當確知外設已取走CPU上次送入鎖存器的數(shù)據(jù),方能在CE=0(為有效電平)時將新數(shù)據(jù)再送入鎖存器保留。輸入輸出(無條件程序傳送)原理圖如圖所示。

在輸入時,假定來自外設的數(shù)據(jù)已輸入至三態(tài)緩沖器, 于是當CPU執(zhí)行IN指令時,所指定的端口地址經(jīng)地址總線的 低16位或低8位送至地址譯碼器,CPU進入了輸入周期,選中 的地址信號和M/IO(以及RD)相“與”后,去選通輸入三態(tài)緩 沖器,把外設的數(shù)據(jù)與數(shù)據(jù)總線連通并讀入CPU。顯然,這 樣做必須是當CPU執(zhí)行IN指令時,外設的數(shù)據(jù)是已準備好的, 否則就會讀錯。

在輸出時,假定CPU的輸出信息經(jīng)數(shù)據(jù)總線已送到輸 出鎖存器的輸入端;當CPU執(zhí)行OUT指令時,端口的地址由 地址總線的低8位地址送至地址譯碼器,CPU進入了輸出 周期,所選中的地址信號和M/IO(以及WR信號)相“與” 后,去選通鎖存器,把輸出信息送至鎖存器保留,由它再 把信息通過外設輸出。顯然,在CPU執(zhí)行OUT指令時,必須 確信所選外設的鎖存器是空的。

例:一個采用同步傳送的數(shù)據(jù)采集系統(tǒng)如圖所示。

這是一個16位精度的數(shù)據(jù)采集系統(tǒng)。被采集的數(shù)據(jù)是8

個模擬量,由繼電器繞組P0、P1、…P7分別控制觸點K0、

K1…K7逐個接通。每次采樣用一個4位(每位為一個十進制 數(shù))數(shù)字電壓表測量,把被采樣的模擬量轉(zhuǎn)換成16位BCD代 碼(即對應4位十進制數(shù)的4個BCD碼),高8位和低8位通過兩 個不同的端口(其地址分別為10H和11H)輸入。CPU通過端 口20H輸出控制信號,以控制某個繼電器的吸合,實現(xiàn)采集 不同通道的模擬量。

采集過程要求:

(1)先斷開所有的繼電器線圈及觸頭,不采集數(shù)據(jù)。

(2)延遲一段時間后,使K0閉合,采集第1個通道的模擬 量,并保持一段時間,以使數(shù)字電壓表能將模擬電壓轉(zhuǎn)換為

16位BCD碼。

(3)分別將高8位與低8位BCD碼存入內(nèi)存,完成第1個模 擬量的輸入與存。

(4)利用移位與循環(huán)實現(xiàn)8個模擬量的依次采集、輸入 與轉(zhuǎn)存。數(shù)據(jù)采集程序如下:

START:

MOVDX,0100H;01H→DH,置吸合第1個繼電器代碼

;00H→DL,置斷開所有繼電器代碼

LEABX,DSTOR;置輸入數(shù)據(jù)緩沖器的地址指針

XORAL,AL;清AL及進位位CF AGAIN: MOVAL,DLOUT20H,AL;斷開所有繼電器線圈

CALLNEARDELAY1;模擬繼電器觸點的釋放時間

MOVAL,DHOUT20H,AL;先使P0吸合

CALLNEARDELAY2;模擬觸點閉合及數(shù)字電壓表的轉(zhuǎn)換時間

INAX,10H;輸入

MOV[BX],AX;存入內(nèi)存

INCBXINCBXRCLDH,1;DH左移(大循環(huán))1位,為下一個觸點吸合作準備

JNCAGAIN;8位都輸入完了嗎?沒有,則循環(huán)

DONE:;輸入已完,則執(zhí)行別的程序段。

程序傳送是指CPU與外設之間的數(shù)據(jù)交換在程序控制(即IN或OUT指令控制)下進行.這種輸入輸出方式可以歸納為以下特點:

①數(shù)據(jù)的傳輸靠執(zhí)行指令實現(xiàn)。對于一個輸入設備,要用兩條指令:

INAL(AX),PORTMOV[MEM],AL(AX)

對于一個輸出設備,至少包括這樣兩條指令:

MOVAL(AX),[MEM]OUTPORT,AL(AX)7.2.1程序傳送

②外部設備的狀態(tài)信息用IN指令輸入,然后測試;主機用OUT指令向外設提供狀態(tài)信息,從而達到聯(lián)絡的目的。

③這種輸入輸出方式的優(yōu)點簡單、實現(xiàn)容易。但存在明顯的缺點:第1,為了測試和等待外部設備作好傳輸數(shù)據(jù)的準備,常常要花費大量的時間,在這段時間內(nèi),程序不能完成其它任務,所以使系統(tǒng)的時間利用率大大降低。第2,CPU在一段時間里只能和一個外部設備之間傳輸數(shù)據(jù),其它設備只能等待。第3,不能發(fā)現(xiàn)和處理預先無法估計的錯誤和異?,F(xiàn)象。所以這種輸入輸出方式只適用于CPU數(shù)據(jù)處理任務不繁忙,而且外部設備數(shù)較少的情況。

程序傳送方式可分為無條件傳送和有條件傳送兩種:

1、無條件傳送(又稱同步傳送)

這種傳送方式只對固定的外設(如開關(guān)、繼電器、7段碼顯示器、機械式傳感器等簡單外設)在規(guī)定的時間用IN或OUT指令來進行信息的的輸入或輸出,其實質(zhì)是用程序來定時同步傳送數(shù)據(jù)。對少量數(shù)據(jù)傳送來說,它是最省時間的一種傳送方法,適用于各類巡回檢測和過程控制。一般的說,這些外設隨時做好了數(shù)據(jù)傳送的準備,而無需檢測其狀態(tài)。

2、條件傳送(又稱程序查詢傳送,異步傳送)

它是一種程序查詢,但與前述的無條件的同步傳送不同,是有條件的。此條件是:在執(zhí)行輸入或輸出指令前,要先查詢接口中狀態(tài)寄存器的狀態(tài)。輸入時,由其指示要輸入的數(shù)據(jù)是否“準備就緒”;而輸出時,又由它指示輸出設備是否“空閑”,由此條件來決定執(zhí)行輸入或輸出。

圖6.3查詢工作方式示意圖

(1)單一外設的查詢工作數(shù)據(jù)輸出口和狀態(tài)輸入口共用一個地址。

(2)多個外設查詢方式工作

CPU逐個外設進行查詢,若發(fā)現(xiàn)哪個外設準備就緒,就對該外設實施數(shù)據(jù)傳送。1)程序查詢輸入

當輸入裝置的數(shù)據(jù)已準備好后發(fā)出一個STB選通信號,一邊把數(shù)據(jù)送入鎖存器,一邊使D觸發(fā)器為“1”,給出“準備”READY的狀態(tài)信號.而數(shù)據(jù)與狀態(tài)必須有不同的端口分別輸入至CPU數(shù)據(jù)總線。當CPU要由外設輸入數(shù)據(jù)時,CPU先輸入狀信息,檢查數(shù)據(jù)是否已準備好;當數(shù)據(jù)已準備好后,才輸入數(shù)據(jù)。讀入數(shù)據(jù)的命令, 使狀態(tài)信息 清0(通過先 使D觸發(fā)器 復位),以便 為下次輸入 一個新數(shù)據(jù) 做準備。

其方框圖 如圖6.5所示

讀入的數(shù)據(jù)是8位,而讀入的狀態(tài)信息往往是1位,如圖6.6所示。所以,不同的外設其狀態(tài)信息可以使用同一個端口,但只要使用不同的位就行。

這種查詢輸入方式的程

序流程圖如圖6.7所示。

查詢輸入部分的程序:

POLL:

INAL,STATUSPORT;讀狀態(tài)端口的信息

TESTAL,80H;設“準備就緒”(READY)信息在D7位

JEPOLL;未“準備就緒”,則循環(huán)再查

INAL,DATA_PORT;已“準備就緒”(READY=1),則讀入數(shù)據(jù)

2)程序查詢輸出

同樣的,在輸出時CPU也必須了解外設的狀態(tài),看外設是否有“空閑”(即外設數(shù)鎖存器已空,或未正處于輸出狀態(tài)),若有 “空閑”,則

CPU執(zhí)行輸

出指令;否則

就等待再查。

因此,接口電

路中也必須要

有狀態(tài)信息的

端口,其方框

圖如圖6.8所 示。

輸出過程:當輸出裝置把CPU輸出的數(shù)據(jù)輸出以后,發(fā)出一個ACK(Acknowledge)信號,使D觸發(fā)器置“0”,也即使“BUSY”線為0(Empty=BUSY),當CPU輸入這個狀

態(tài)信息后(經(jīng)G3→D7),知道外設為“空”,于是就執(zhí)行

輸出指令。待輸出指令執(zhí)行后,由地址信號和M/IO及

WR相“與”,經(jīng)G1發(fā)出選通信號,把在數(shù)據(jù)總線上的輸出

數(shù)據(jù)送至鎖存器;同時,觸發(fā)D觸發(fā)器為“1”狀態(tài),它一

方面通知外設:輸出數(shù)據(jù)已準備好,可以執(zhí)行輸出操作,另一方面在數(shù)據(jù)由輸出裝置輸出以前,一直為“1”,告知

CPU(CPU通過讀狀態(tài)端口知道)外設“BUSY”,阻止

CPU輸出新的數(shù)據(jù)。

查詢式輸出的端口信與程序流程圖分別如圖6.9與6.10所示。

查詢輸出部分的程序:

POLL:INAL,STATUS_PORT;查狀態(tài)端口中的狀態(tài)信息D7TESTAL,80HJNEPOLL;;D7=1即忙線=1,則循環(huán)再查

MOVAL,STORE

;否則,外設空閑,由內(nèi)存讀取數(shù)據(jù)

OUTDATA_PORT,AL;輸出到DATA地址端口單元其中,STATUS和TATA分別為狀態(tài)端口和數(shù)據(jù)端口的符號址;STORE為待輸出數(shù)據(jù)的內(nèi)存單元的符號地址。

3)一個采用查詢方式的數(shù)據(jù)采集系統(tǒng)

一個有8個模擬量輸入的數(shù)據(jù)采集系統(tǒng),用查詢方式 與CPU傳送信息,電路如圖6.11所示。

8個輸入模擬量,經(jīng)過多路開關(guān)——它由端口4輸出的

3位二進制碼(D2、D1、D0)控制(000—相應于UA0輸入…

111—相應于UA7輸入),每次送出一個模擬量至A/D 轉(zhuǎn)換器;同時,A/D轉(zhuǎn)換器由端口4輸出的D4位控制啟 動與停止。A/D轉(zhuǎn)換器的READY信號由端口2的D0

輸至CPU數(shù)據(jù)總線;經(jīng)A/D轉(zhuǎn)換后的數(shù)據(jù)由端口3輸入 至數(shù)據(jù)總線。所以,這樣的一個數(shù)據(jù)采集系統(tǒng),需要用到

3個端口,它們有各自的地址。

采集過程要求:

(1)初始化。

(2)先停止A/D轉(zhuǎn)換。

(3)啟動A/D轉(zhuǎn)換,查輸入狀態(tài)信息READY。

(4)當輸入數(shù)據(jù)已轉(zhuǎn)換完(REA=1,即準備就緒),則經(jīng)由端口3輸入至CPU的累加器AL中,并轉(zhuǎn)送內(nèi)存。

(5)設置下一個內(nèi)存單元與下一個輸入通道,循環(huán)8次。數(shù)據(jù)采集過程的程序為:

STARE:MOVDL,0F8H;設置啟動A/D轉(zhuǎn)換的信號,且低3位選通多路開關(guān)通道

MOVAX,SEGDSTOR;設置輸入數(shù)據(jù)的內(nèi)存單元地址指針

MOVES,AXLEADI,DSTORAGAIN:MOVAL,DLANDAL,0EFH;使D4=0

OUT04,AL;停止A/D轉(zhuǎn)換

CALLDELAY;等待停止A/D轉(zhuǎn)換操作的完成

MOVAL,DLOUT04,AL;選輸入通道并啟動A/D轉(zhuǎn)換

POLL:INAL,02;輸入狀態(tài)信息

SHRAL,1;查AL的D0JNCPOLL;判READY=1?若D0=0,未準備好,則循環(huán)再查

INAL,03;若已準備就緒,則經(jīng)端口3將采樣數(shù)據(jù)輸入至ASTOSB;輸入數(shù)據(jù)轉(zhuǎn)送內(nèi)存單元

INCDL;輸入模擬量通道增1JNEAGAIN;8個模擬量未輸入完則循環(huán)

;輸入已完,執(zhí)行別的程序

總結(jié)上述程序查詢輸入/輸出傳送方式的執(zhí)行過程,

其步驟是:

(1)CPU從I/O接口的狀態(tài)端口中讀入所尋址的外設的狀態(tài)信息“”或“BUSY”。

(2)根據(jù)讀入的狀態(tài)信息進行判斷。程序查詢輸入時,若狀態(tài)信息READY=0,則外設數(shù)據(jù)未準備好,CPU繼續(xù)等待查詢,直至READY=1,外設已準備好數(shù)據(jù),執(zhí)行下一步操作;程序查詢輸出時,若狀態(tài)信息BUSY=1,則外設正在“忙”,CPU繼續(xù)等待查詢,直至外設“空閑”,BUSY=0時,執(zhí)行下一步操作。

(3)執(zhí)行輸入/輸出指令,進行I/O傳送。完成數(shù)據(jù)的輸入/輸出,同時將外設的狀態(tài)信息復位,一個8位的數(shù)據(jù)傳送結(jié)束。當計算機工作任務較輕或CPU不太忙時,可以應用程序查詢輸入/輸出傳送方式,它能較好地協(xié)調(diào)外設與CPU之間定時的差別;程序和接口電路比較簡單。其主要缺點是:CPU必須作程序等待循環(huán),不斷測試外設的狀態(tài),直至外設為交換數(shù)據(jù)準備就緒時為止。這種循環(huán)等待方式很花費時間,大大降低了CPU的運行效率。

程序查詢傳送方式不僅要降低CPU的運行效率,而且,在一般實時控制系統(tǒng)中,往往有數(shù)十乃至數(shù)百個外設,由于它們的工作速度不同,要求CPU為它們服務是隨機的,有些要求很急迫,若用查詢方式除浪費大量等待查詢時間外,還很難使每一個外設都能工作在最佳工作狀態(tài)。

為了提高CPU執(zhí)行有效程序的工作效率和提高系統(tǒng)中多臺外設的工作效率,可以讓外設處于能主動申請中斷的工作方式,這在有多個外設及速度不匹配時,尤為重要。7.2.2中斷傳送

所謂中斷是外設或其它中斷源中止CPU當前正在執(zhí)行的程序,而轉(zhuǎn)向為該外設服務(如完成它與CPU之間傳送一個數(shù)據(jù))的程序,一旦服務結(jié)束,又返回原程序繼續(xù)工作。這樣,外設處理數(shù)據(jù)期間,CPU就不必浪費大量的時間去查詢他們的狀態(tài),只待外設處理完畢主動向CPU提出請求(向CPU發(fā)出中斷請求信號),而CPU在每一條指令執(zhí)行的結(jié)尾階段,均查詢是否有中斷請求信號(這種查詢是由硬件完成的,不占用CPU的工作時間),若有,則暫停執(zhí)行現(xiàn)行的程序,轉(zhuǎn)去為申請中斷的某個外設服務,以完成數(shù)據(jù)傳送。

中斷傳送方式的好處是:大大提高了CPU的工作效率。

中斷傳送方式的特點:①雖然程序中斷功能參與了控制,但數(shù)據(jù)的傳輸仍然要靠在程序中排入I/O指令完成。這一點和程序直接控制輸入輸出方式是相同的。②外部設備要求與CPU傳輸數(shù)據(jù)的狀態(tài)信息,不是用指令輸入和測試的,而是從CPU的中斷請求輸入端直接加入的。正是由于CPU具有響應外部中斷請求的能力,避免了用指令查詢外部設備狀態(tài)造成的大量時間浪費,從而使系統(tǒng)的時間利用率大大提高了。

③中斷控制輸入輸出是靠硬件和軟件相配合實現(xiàn)的。與程序直接控制輸入輸出相比較,中斷控制輸入輸出大大提高了CPU的時間利用率,這是這種輸入輸出方式的主要優(yōu)點。但它實現(xiàn)起來相對地復雜了。一個微機系統(tǒng)中,微處理器本身必須設計得具有響應和處理地中斷請求的能力,而且在組成微機系統(tǒng)時,往往還需要配有專用的邏輯電路——中斷控制器,共同組成中斷控制機構(gòu),增強中斷控制和管理的能力。

利用程序中斷傳送方式,雖然可以提高CPU的工作效率,但它仍需由CPU通過程序來傳送數(shù)據(jù),并在處理中斷時,還要“保護現(xiàn)場”和“恢復現(xiàn)場”,而這兩部分操作的程序段又與數(shù)據(jù)傳送沒有直接關(guān)系,卻要占用一定時間,使每傳送一個字節(jié)大約需要幾十微秒到幾百微秒。這對高速外設以及成組交換的場合,就顯的太慢了。

7.2.3直接存儲器存取(DMA)傳送

直接存儲器存取DMA(DirectMemoryAccess)又稱為數(shù)據(jù)通道方式,是一種由專門的硬件電路執(zhí)行I/O交換的傳送方式,它讓外設接口可直接與內(nèi)存進行高速的數(shù)據(jù)傳送,數(shù)據(jù)傳輸不是靠執(zhí)行I/O指令,數(shù)據(jù)不經(jīng)過CPU內(nèi)的任何寄存器,也就不破壞任何寄存器原來存的內(nèi)容,而是在存儲器和外部設備之間的通路上直接傳輸數(shù)據(jù)。這樣就不必進行保護現(xiàn)場之類的額外操作,可實現(xiàn)對存儲器的直接存取。這種專門的硬件電路就是DMA控制器,簡稱為DMAC。

DMA的查詢過程:

DMA的工作過程大致如下:①當接口準備就緒,便向DMAC發(fā)DMA請求;②CPU通過HOLD引腳接收DMAC發(fā)出的總線請求;③通常CPU在完成當前總線操作以后,就會立即在HLDA引腳上向DMAC發(fā)出允許信號而響應總線請求;④待CPU將總線置高阻(放棄總線控制權(quán));⑤DMA請求得到DMAC的確認,DMAC開始對總線實施控制并向外設送出DMA的應答信號,同時送出地址信號和控制信號,以實現(xiàn)外設與內(nèi)存或內(nèi)存與內(nèi)存的數(shù)據(jù)傳送。⑥數(shù)據(jù)傳送;⑦DMAC將規(guī)定的數(shù)據(jù)傳送完之后,通過向CPU發(fā)HOLD信號(將HOLD信號變?yōu)榈碗娖剑?;⑧DMAC放棄對總線的控制,亦即撤消對總線的請求;⑨CPU檢測到HOLD信號變?yōu)榈碗娖胶?,也將HLDA信號變?yōu)榈碗娖?于是,CPU又恢復對系統(tǒng)總線的控制權(quán)。

歸納起來,DMA數(shù)據(jù)傳送與程序控制數(shù)據(jù)傳送相比較,首先是傳送途徑不同:程序控制數(shù)據(jù)傳送必須經(jīng)過CPU(其中某個寄存器),而DMA傳送不經(jīng)過CPU。其次,程序控制數(shù)據(jù)傳送涉及的源地址、目的地址是由CPU提供的,地址的修改和傳送數(shù)據(jù)塊長度的控制也由CPU完成,數(shù)據(jù)傳送所需要的控制信號也由CPU發(fā)出,但DMA傳送,這一切都由DMA控制器提供、發(fā)出和完成。這就是說,本來該由程序完成的數(shù)據(jù)傳送,在DMA傳送時由硬件取代了。因而不僅減輕了CPU的負擔,而且可以使數(shù)據(jù)傳輸速度大大提高。但是,DMA傳送必須由程序或中斷方式提供協(xié)助,DMA傳送的初始化或結(jié)束處理是由程序或中斷服務完成的。

中斷是一種十分重要而復雜的軟硬件相結(jié)合的技術(shù),它的出現(xiàn)給計算機結(jié)構(gòu)與應用帶來了新的突破。

(一)中斷在CPU執(zhí)行程序過程中,由于某種事件發(fā)生,強迫CPU暫時停止正在執(zhí)行的程序而轉(zhuǎn)向?qū)Πl(fā)生的事件進行處理,事件處理結(jié)束后又能回到原中止的程序,接著中止前的狀態(tài)繼續(xù)執(zhí)行原來的程序,這一過程稱為中斷。7.3.1中斷概述7.3中斷技術(shù)中斷源中斷請求

當前程序中斷服務程序程序斷點中斷返回中斷響應

(二)中斷源即引起中斷的事件或原因,或發(fā)出中斷申請的來源。通常中斷源有以下幾種:

(1)外部設備:一般中、慢速外設如鍵盤、行式打印機、A/D轉(zhuǎn)換器等,在完成自身的操作后,向CPU發(fā)出中斷請求,要求CPU為它服務。對于高速的外設如磁盤或磁帶,它可以向CPU提出總線請求,進行DMA傳送。

(2)實時時鐘:在自動控制中,常遇到定時檢測與控制,這時可采用外部時鐘電路,并可編程控制其定時間隔。當需要定時的時刻,CPU發(fā)出命令,啟動時鐘電路開始計時,待定時已到,時鐘電路就發(fā)中斷申請,由CPU轉(zhuǎn)向去執(zhí)行服務程序。

(3)故障源:計算機內(nèi)設有故障自動檢測裝置,如發(fā)生運算出錯(溢出)、存儲器讀出出錯、外部設備故障、電源掉電以及越限報警等意外事件時,這些裝置都能使CPU中斷,進行相應的中斷處理。以上3種屬于隨機中斷源。由隨機引起的中斷,稱為強迫中斷。

(4)為調(diào)試程序設置的中斷源:這是CPU執(zhí)行了特殊指令(自陷指令)或由硬件電路引起的中斷,主要是供用戶調(diào)試程序時而采取的檢查手段。如斷點設置、單步調(diào)試等.這些都要由中斷系統(tǒng)實現(xiàn)。一般稱這種中斷為自愿中斷。

(三)中斷的類型

8086/8088微機最多可以支持256種中斷,它們被分為四種類型:

?

異常中斷

?

軟件中斷

?

外部可屏蔽中斷

?

外部非屏蔽中斷

每個中斷都指定了一個類型碼,也稱為中斷號。對應每一種中斷應當有一個中斷服務程序(ISP--InterruptServiceProgram)

(1)異常中斷是指令執(zhí)行過程中引起的內(nèi)部異常操作處理。包括除法錯誤異常、調(diào)試異常、斷點中斷等。異常中斷的例子:

0型——除法錯誤異常

1型——調(diào)試異常

…...(2)軟件中斷執(zhí)行有定義的INTn指令而引發(fā)的中斷,稱為軟件中斷。軟件中斷進一步分為BIOS中斷和DOS中斷。軟件中斷使用05H、10H~0FFH中的若干個中斷號;異常中斷和軟件中斷是由處理器內(nèi)部產(chǎn)生的。

(3)外部可屏蔽中斷?

外部可屏蔽中斷是處理器響應各種外部硬件中斷的最常用的方法,

通過處理器的INTR引腳產(chǎn)生;?

外部可屏蔽中斷受處理器內(nèi)部的中斷允許標志位IF的控制;?

處理器只有一個INTR引腳可以接受外部可屏蔽中斷請求,為了管理?

眾多的外部中斷源,微機系統(tǒng)中采用可編程中斷控制器8259;?PC系列機通過兩片8259級連可以響應15個外部中斷源。(4)外部非屏蔽中斷?

為外部緊急請求提供服務的中斷,通過處理器的NMI引腳產(chǎn)生;?NMI與IF標志的狀態(tài)無關(guān);?NMI有一個專用的類型號02H;?

使用非屏蔽中斷的典型例子是電源故障中斷。

(二)中斷系統(tǒng)及其功能中斷系統(tǒng)是指為實現(xiàn)中斷而設置的各種硬件與軟件,包括中斷控制邏輯及相應管理中斷的指令。

中斷系統(tǒng)應具有下列功能:

1.能響應中斷、處理中斷與返回

當某個中斷源發(fā)出中斷請求時,CPU能根據(jù)條件決定是否響應該中斷請求。若允許響應,則CPU必須在執(zhí)行完現(xiàn)行指令后,保護斷點和現(xiàn)場(即把斷點處的PC值和各寄存器的內(nèi)容與標志位的狀態(tài)推入堆棧),然后再轉(zhuǎn)到需要處理的中斷服務程序的入口,同時,清除中斷請求觸發(fā)器。當處理完中斷服務程序后,再恢復現(xiàn)場和斷點PC值,使CPU返回斷點,繼續(xù)執(zhí)行主程序。中斷的簡單過程示意圖如上頁圖所示。

2.能實現(xiàn)優(yōu)先權(quán)排隊通常,在系統(tǒng)中有多個中斷源時,有可能出現(xiàn)兩個或兩個以上中斷源同時提出中斷請求的情況。這時要求CPU能根據(jù)中斷源被事先確定的優(yōu)先權(quán)由高到低依次處理。

異常中斷軟件中斷外部非屏蔽中斷外部可屏蔽中斷優(yōu)先級遞增

換句話說,中斷優(yōu)先級控制應當解決這樣兩種可能出現(xiàn)的情況:①當不同優(yōu)先級的多個中斷源同時提出中斷請求時,CPU首先響應最高優(yōu)先級的中斷源。②當CPU正在對某一中斷源服務時,比它優(yōu)先級更高的中斷源提出中斷請求時,CPU能夠中斷正在執(zhí)行的中斷服務程序而去對優(yōu)先級更高的中斷源進行服務。

3.高級中斷源能中斷低級的中斷(即中斷嵌套)

當CPU正在響應某一中斷源的請求,執(zhí)行為其服務的中斷服務程序時,如果有優(yōu)先級更高的中斷源發(fā)出請求,CPU將中止正在執(zhí)行的中斷服務程序而轉(zhuǎn)入為新的中斷源服務,等新的中斷服務程序執(zhí)行完后,再返回到被中止的中斷服務程序,這一過程稱為中斷嵌套。

1#中斷請求響應返回1#中斷服務程序2#中斷請求響應返回2#中斷服務程序3#中斷請求響應返回3#中斷服務程序原主程序中斷優(yōu)先級3#>2#>1#?中斷嵌套可以有多級,具體級數(shù)原則上不限,只取決于堆棧深度。

1

(三)中斷的應用

1、實現(xiàn)CPU與外設的并行工作,解決快速CPU與中、慢速外設速度不匹配的矛盾,提高了CPU的效率。NYREADY?輸入狀態(tài)信息輸入數(shù)據(jù)查詢方式的數(shù)據(jù)輸入中斷方式的數(shù)據(jù)輸入外設請求中斷INTR有效主程序中斷服務程序輸入數(shù)據(jù)外設準備數(shù)據(jù)2、實現(xiàn)分時操作3、實現(xiàn)實時處理。4、實現(xiàn)故障處理。5、多機連接6、人機聯(lián)系

簡單的中斷過程應包括:中斷請求、中斷響應、中斷處理和中斷返回等環(huán)節(jié)。(一)中斷源向CPU發(fā)中斷請求信號的條件中斷源是通過其接口電路向CPU發(fā)中斷請求信號的,該信號能否發(fā)給CPU,應滿足下列兩個條件:

7.3.2

單個中斷源的中斷

1.設置中斷請求觸發(fā)器每一個中斷源,要能向CPU發(fā)中斷請求信號,首先應能由它的接口電路提出中斷請求,且該請求能保持著,直至CPU接受并響應該中斷請求后,才能清除它。為此,要求在每個中斷源的接口電路中設置一個中斷請求觸發(fā)器A,由它產(chǎn)生中斷請求,即QA=1。如下頁圖所示。

2.設置中斷屏蔽觸發(fā)器中斷源的中斷請求能否允許以中斷請求信號(如INTR)發(fā)向CPU,應能受CPU的控制,以增加處理中斷的靈活性,為此,在接口電路中,還要增設一個中斷屏蔽觸發(fā)器B。當允許中斷時,由CPU控制使其QB端為0(不屏蔽),QB端為1,于是,與門開啟,中斷請求(QA)被允許并經(jīng)過與門以中斷請求信號INTR發(fā)向CPU;反之,當禁止中斷時,由CPU控制其QB端置1(屏蔽),QB端為0,與門關(guān)閉,即使有中斷請求產(chǎn)生,但并不能以INTR發(fā)向CPU。若有多個中斷源,例如8個外設,則可將8個外設的中斷屏蔽觸發(fā)器組成一個端口,用輸出指令(即利用WR有效信號)來控制它們的狀態(tài)。

(二)CPU響應中斷的條件

CPU在每條指令執(zhí)行的最后一個時鐘周期檢測中斷請求輸入端有無請求發(fā)生,而當中斷源向CPU發(fā)出INTR信號后,CPU若要響應它,還應滿足下列條件。

1.CPU開放中斷

CPU采樣到INTR信號后是否響應它,由CPU內(nèi)設置的中斷允許觸發(fā)器(如IFF)的狀態(tài)決定,如下頁圖所示.

當IFF=1(即開放中斷簡稱開中)時,CPU才能響應中斷;若IFF=0(即關(guān)閉中斷簡稱關(guān)中)時,即使有INTR信號,因與門1被IFF的Q端關(guān)閉,CPU也不響應它。

IFF的狀態(tài)可以由專門設置的開中與關(guān)中指令來改變,即執(zhí)行開中斷指令(STI)時,使IFF=1,于是與門1的輸出端置1(即允許中斷);而執(zhí)行關(guān)中斷指令(CLI)時,經(jīng)或門2使IFF=0,于是禁止中斷。此外,當CPU復位或響應中斷后,也能使CPU關(guān)中斷。STI——開中斷指令(將標志寄存器中的中斷標志位IF

置1,允許CPU響應來自INTR引腳

的中斷請求)CLI——關(guān)中斷指令(將標志寄存器中的中斷標志位IF

清0,使CPU不響應來自INTR引腳

的中斷請求)

2.CPU在現(xiàn)行指令結(jié)束后響應中斷在CPU開中時,若有中斷請求信號發(fā)至CPU,它也并不立即響應。而只有當現(xiàn)行指令運行到最后一個機器周期的最后一個T狀態(tài)時,CPU才采樣INTR信號;若有此信號,則把與門1的允許中斷輸出端置1,于是,CPU進入中斷響應周期。

3.沒有發(fā)生復位(RESET)、保持(HOLD)和非屏蔽中斷請求(NMI)。

4.開中斷指令(STI)、中斷返回指令(IRET)執(zhí)行完,還需再執(zhí)行一條指令才能響應INTR請求。

(三)CPU響應中斷及處理過程當滿足上述條件后,CPU就響應中斷,轉(zhuǎn)入中斷周期,完成下列幾步操作(如圖所示):

1.關(guān)中斷

CPU響應中斷后,在發(fā)出中斷響應信號(在8086/8088中為INTA)的同時,內(nèi)部自動地(由硬件)實現(xiàn)關(guān)中斷,以免在響應中斷后處理當前中斷時又被新的中斷源中斷,以至破壞當前中斷服務的現(xiàn)場。

2.保留斷點

CPU響應中斷后,立即封鎖PC+1(此即斷點地址),且把此PC值壓棧保護,以備中斷處理完畢后,CPU能返回斷點處繼續(xù)運行主程序。

3.保護現(xiàn)場 在CPU處理中斷服務程序時,有可能用到各寄存器,從而改變它們原在運主程序時所暫存的中間結(jié)果,這就破壞了原主程序中的現(xiàn)場信息。為使中斷服務程序不影響主程序的正常運行,故要把主程序運行到斷點處時的有關(guān)寄存器的內(nèi)容和標志位的狀態(tài)壓棧保護起來。

4.給出中斷入口(地址),轉(zhuǎn)入相應的中斷服務程序

8086/8088是由中斷源提供中斷類型號,并根據(jù)中斷類型號在中斷向量表中取得中斷服務程序的起始地址。其具體過程如下:

①取類型號;

②計算向量地址;

③根據(jù)向量地址查表,將偏移地址送IP,段基址送CS;

④轉(zhuǎn)入中斷服務程序,進行中斷處理。

5.恢復現(xiàn)場 把被保留在堆棧中的各有關(guān)寄存器的內(nèi)容和標志位的狀態(tài)從堆棧中彈出,送回CPU中它們原來的位置這個操作是在中斷服務程序中用POP指令來完成的。

6.開中斷與返回在中斷服務程序的最后,要開中斷(以便CPU能響應新的中斷請求)和安排一條返回指令,將堆棧內(nèi)保存的斷點PC值彈出,送回至PC,CPU就恢復到斷點處繼續(xù)運行。

執(zhí)行一條指令最后一個總線周期的最后一個T狀態(tài)?有INTR?中斷開放?

(FR中的IF=1?)關(guān)中斷

(置FR中IF=0)斷點地址(CS.IP)入棧FR入棧識別中斷源,轉(zhuǎn)入相應中斷服務程序保護現(xiàn)場中斷服務處理恢復現(xiàn)場開中斷STI(置FR中IF=1)中斷返回IRET取下一條指令NoNoNoYesYesYes以INTR為例,8086CPU響應中斷的過程。

所謂向量中斷(VectoredInterrupt),是指通過中斷向量來找中斷入口地址進而轉(zhuǎn)向中斷服務程序的一種方法;而中斷向量則是用來提供中斷入口地址的一個地址指針。7.3.3

向量中斷

在具有多個中斷源的系統(tǒng)中,CPU的可屏蔽中斷請求線往往只有一條。如何解決多個中斷源同時請求中斷而只有一根中斷請求線的矛盾呢?

這就要求CPU按多個中斷源的優(yōu)先權(quán)由高至低依次來響應中斷申請。同時,當CPU正在處理中斷時,還要能響應更高級的中斷申請,而屏蔽掉同級或低級的中斷申請。

CPU可以通過軟件查詢技術(shù)或硬件排隊電路兩種方法來實現(xiàn)按中斷優(yōu)先權(quán)對多個中斷源的管理,也有專門用于協(xié)助CPU按中斷優(yōu)先權(quán)處理多個中斷源的中斷控制芯片,如后面將要介紹的8259A芯片。7.3.4

中斷優(yōu)先權(quán)判斷和確定中斷源的中斷優(yōu)先權(quán),采用的軟件和硬件兩種方法。①用軟件確定中斷優(yōu)先權(quán)優(yōu)先權(quán)管理電路三態(tài)緩沖器譯碼鎖存器INTRD7~D0A15~A0中

A中

B中

C………M/IO軟件查詢流程圖在中斷服務中讀入請求狀態(tài)A申請?B申請?中斷返回為中斷源A服務的程序段YC申

?為中斷源B服務的程序段為中斷源C服務的程序段……YY

采用軟件查詢方式的特點:詢問的次序,即為優(yōu)先權(quán)的次序。硬件簡單。由查詢轉(zhuǎn)至相應的服務程序的時間長,尤其在中斷源較多的情況。②硬件方式12

8-3優(yōu)先權(quán)編碼器優(yōu)先權(quán)寄存器A<B

比較器A2A1A0B2

B1

B0比較失效

中斷請求0

中斷請求1

中斷請求2…………7D7~D0…INTR…

編碼器和比較器的優(yōu)先權(quán)排隊電路

(1)若CPU未處理任何中斷,則“優(yōu)先權(quán)失效”信號為高,當任一中斷源請求中斷時,通過門2發(fā)出INTR信號。(2)若CPU正在進行中斷處理,當某一中斷源請求中斷時,能否向CPU發(fā)出INTR信號,受比較器的控制。

8086/8088采用中斷向量結(jié)構(gòu),使每個不同的中斷都可以通過給定一個特定的中斷類型號(或中斷類型碼)供CPU識別,來處理多達256種類型的中斷。這些中斷可以來自外部,即由硬件產(chǎn)生,也可以來自內(nèi)部,即由軟件(中斷指令)產(chǎn)生,或者滿足某些特定條件(陷阱)后引發(fā)CPU中斷。7.4.18086/8088的中斷系統(tǒng)7.48086/8088中斷系統(tǒng)和中斷處理

8086/8088的中斷系統(tǒng)結(jié)構(gòu)如圖所示,圖中給出了各主要的中斷源。

(一)外部中斷

8086/8088CPU有兩條引腳供外部中斷源請求中斷:

一條是高電平有效的可屏蔽中斷INTR;

另一條是正跳變有效的非屏蔽中斷NMI。

1.可屏蔽中斷可屏蔽中斷是由用戶定義的外部硬件中斷。當CPU的INTR引腳上出現(xiàn)一高電平有效請求信號時,它必須保持到當前指令的結(jié)束。這是因為CPU只在每條指令的最后一個時鐘周期才對INTR引腳的狀態(tài)進行采樣.

如果CPU采樣到有可屏蔽中斷請求信號INTR產(chǎn)生,它是否響應此中斷請求信號還要取決于標志寄存器的中斷允許標志位IF的狀態(tài)。

若IF=0,此時CPU是處于關(guān)中斷狀態(tài),則不響應INTR;若IF=1,則CPU是處于開中斷狀態(tài),將響應INTR,并通過INTA引腳向產(chǎn)生INTR的設備接口(中斷源)發(fā)回響應信號,啟動中斷過程。CPU在發(fā)回第2個中斷響應信號INTA時,將使發(fā)出中斷請求信號的接口把1字節(jié)的中斷類型號通過數(shù)據(jù)總線傳送給CPU。由該中斷類型號指定了中斷服務程序入口地址在中斷向量表中的位置。

中斷允許標志IF位的狀態(tài)可用指令STI使其置位,即開中斷;也可用CLI指令使其復位,即關(guān)中斷。由于8086/8088CPU在系統(tǒng)復位以后或任一種中斷被響應以后,IF=0,所以根據(jù)實際需要,在執(zhí)行程序的過程中要用STI指令開中斷,以便CPU有可能響應新的可屏蔽中斷請求。

2.非屏蔽中斷 當8086/8088CPU的NMI引腳上出現(xiàn)一上升沿的邊沿觸發(fā)有效請求信號時,它將由CPU內(nèi)部的鎖存器將其鎖存起來。8086/8088要求NMI上的請求脈沖的有效寬度(高電平的持續(xù)時間)大于兩個時鐘周期。一旦此中斷請求信號產(chǎn)生,不管標志位IF的狀態(tài)如何,即使在關(guān)中斷(IF=0)的情況下,CPU也能響應它。

非屏蔽中斷源有3種:系統(tǒng)板上RAM的奇偶校驗錯擴展槽中的I/O通道錯浮點運算協(xié)處理器8087的中斷請求

3個中斷源均可獨立申請中斷,能否形成NMI信號,還必須將口地址為0AH的寄存器的D7位置1后,方能允許產(chǎn)生NMI信號。

由于NMI比INTR引腳上產(chǎn)生的任何中斷請求的級別都高,因此,若在指令執(zhí)行過程中,INTR和NMI引腳上同時都有中斷請求信號,則CPU將首先響應NMI引腳上的中斷請求。

Intel公司在設計8086/8088芯片時,已將NMI的中斷類型號預先定義為類型2,所以,CPU響應非屏蔽中斷時,不要求外部向CPU提供中斷類型號,CPU在總線上也不發(fā)INTA信號。

(二)內(nèi)部中斷

1.除法出錯中斷——類型0

當執(zhí)行DIVs(除法)或IDIVs(整數(shù)除法)指令時,若發(fā)現(xiàn)除數(shù)為0或商數(shù)超過了寄存器所能表達的范圍,則立即產(chǎn)生一個類型為0的內(nèi)部中斷,CPU轉(zhuǎn)向除法出錯的中斷服務程序。它是優(yōu)先級最高的一種內(nèi)部中斷。

2.溢出中斷——類型4

若上一條指令執(zhí)行的結(jié)果使溢出標志位置1(OF=1),則在執(zhí)行溢出中斷(INT0)指令時,將引起類型4的內(nèi)部中斷,CPU就可以轉(zhuǎn)入對溢出錯誤進行處理的中斷服務程序。若OF=0時,則本指令執(zhí)行空操作,即此指令不起作用,程序執(zhí)行下一條指令。

INTO指令常常緊跟在算術(shù)運算指令之后,以便在該指令執(zhí)行產(chǎn)生溢出時由INTO指令進行特殊的處理。與除法出錯中斷不同,出現(xiàn)溢出狀態(tài)時不會由上一條指令自動產(chǎn)生中斷,必須由INTO指令明確地規(guī)定溢出中斷。

應當說明的是,在溢出中斷服務程序中,無需保存狀態(tài)標志寄存器的內(nèi)容(PSW),因為CPU在中斷響應時序中能自動完成這一操作。

3.單步中斷——類型1

8086/8088CPU的狀態(tài)標志寄存器中有一個跟蹤(陷阱)標志位TF。當TF被置位(TF1)時,8086/8088處于單步工作方式,即CPU每執(zhí)行完一條指令后就自動地產(chǎn)生一個類型1的內(nèi)部中斷,程序控制將轉(zhuǎn)入單步中斷服務程序。

CPU響應單步中斷后將自動把狀態(tài)標志壓入堆棧,然后清除TF和IF標志位,使CPU在單步中斷服務程序引入以后退出單步工作方式,在正常運行方式下執(zhí)行單步中斷服務程序。 單步中斷服務程序結(jié)束時,再通過執(zhí)行一條IRET中斷返回指令,將CS與IP的內(nèi)容退棧并恢復狀態(tài)標志寄存器的內(nèi)容,使程序返回到斷點處。由于在中斷時TF位被保護起來了,中斷返回時TF位又被重新恢復(TF=1),所以CPU在中斷返回以后仍然處于單步工作方式。

在8086/8088指令集中,沒有直接用來設置或清除TF狀態(tài)位的指令。但可以借助于壓棧指令PUSHF和出棧指令POPF通過改變堆棧中的值來設置或清除TF位。例如,先用PUSHF指令將標志寄存器的內(nèi)容(PSW)壓入堆棧,再將堆棧棧頂?shù)闹担碢SW)和0100H相“或”(OR),或和FEFFH相“與”(AND),然后用POPF指令將上述操作的結(jié)果從堆棧中彈出,達到設置或清除TF位的目的。

單步中斷方式是一種很有用的調(diào)試手段,通過它可以逐條觀察指令執(zhí)行的結(jié)果,做到精確跟蹤指令流程,并確定程序出錯的位置。

4.斷點中斷——類型3

8086/8088指令系統(tǒng)中有一條設置程序斷點的單字節(jié)中斷指令(INT3),執(zhí)行該指令以后就會產(chǎn)生一個中斷類型為3的內(nèi)部中斷,CPU將轉(zhuǎn)向執(zhí)行一個斷點中斷服務程序,以便進行一些特殊的處理。

斷點中斷指令主要用于軟件調(diào)試中,程序員可用它在程序中設置一個程序斷點。一般,斷點可以設置在程序的任何位置,但在實際調(diào)試程序時,只需在一些關(guān)鍵性的地方設置斷點。例如,可以用這種方法顯示寄存器或存儲器的內(nèi)容,檢查程序運行的結(jié)果是否正確。由于斷點指令INT是一個單字節(jié)指令,所以借助該指令可以很容易地在程序的任何地方設置斷點。

5.用戶定義的軟件中斷——類型n

在8086/8088的內(nèi)部中斷中,有一個可由用戶定義的雙字節(jié)的中斷指令INTn,其第1個字節(jié)為INT的操作碼,第2個字節(jié)n是它的中斷類型號。中斷類型號n由程序員編程時給定,用它指出中斷服務程序的入口地址。

INTn——軟件中斷指令

(n為中斷號,調(diào)用n號中斷服務程序。)①將標志寄存器壓棧;②將TF置0,禁止單步操作,將IF置0,使CPU處于關(guān)中斷狀態(tài);③斷點的CS、IP壓棧;④從中斷向量表取n號中斷向量IP、CS;⑤轉(zhuǎn)向n號中斷服務程序。256級中斷的中斷入口地址表如圖所示。

圖中給出了與中斷類型對應的256個中斷入口,每個入口應包含4個字節(jié):

2個低地址字節(jié)是IP偏移量

2個高地址字節(jié)是CS基址因此,用來存放256個入口的中斷入口地址表需要占用1K字節(jié)的存儲空間,且設置在存儲器的最低端,即00000H~003FFH。這樣,每個中斷都可轉(zhuǎn)到1MB空間的任何地方。

當CPU響應中斷訪問入口地址表時,外設應通過接口將一個8位的中斷類型號放在數(shù)據(jù)總線上,CPU對編號n乘以4得到4n指向該入口地址的首字節(jié);4n和4n+1單元中存放的是入口的偏移地址值,其低字節(jié)在4n地址中,高字節(jié)在4n+1地址;4n+2和4n+3單元中存放的是入口的段地址值,也是低字節(jié)在前,高字節(jié)在后。實現(xiàn)中斷轉(zhuǎn)移時,CPU將把有關(guān)的標志位和斷點地址的CS和IP值入棧,然后通過中斷向量間接轉(zhuǎn)入中斷服務程序。中斷處理結(jié)束,用返回指令彈出斷點地址的IP與CS值以及標志位,然后返回被中斷的程序。

(三)內(nèi)部中斷的特點

(1)內(nèi)部中斷由一條INTn指令直接產(chǎn)生,其中斷類型號n或者包括在指令中,或者已由系統(tǒng)預先定義。

(2)除單步中斷以外,所有內(nèi)部中斷都不能被屏蔽。

(3)所有內(nèi)部中斷都沒有中斷響應INTA機器總線周期,這是因為內(nèi)部中斷不必通過查詢外部來獲得中斷類型號。

(4)硬、軟中斷的優(yōu)先級排隊如表所示。

8086/8088中斷系統(tǒng)規(guī)定,除了單步中斷以外,所有內(nèi)部中斷的優(yōu)先權(quán)都比外部中斷的優(yōu)先權(quán)高。如果在執(zhí)行一個能引起內(nèi)部中斷指令的同時,在NMI或INTR引腳端也產(chǎn)生了外部中斷請求,則CPU將首先處理內(nèi)部中斷。

(5)作為軟件調(diào)試手段,單步中斷是逐條地跟蹤調(diào)試,而斷點中斷(INT3)是逐段地調(diào)試,它們均可用中斷服務程序在屏幕上顯示有關(guān)的各種信息。 如果所有斷點處要求打印的信息都相同,就可以一律使用單字節(jié)的斷點中斷INT3指令;但若要打印的信息不同,則指令中就需使用其他中斷類型號。

(6)為了避開由外設硬件產(chǎn)生INTR中斷請求信號和提供中斷類型號的麻煩,可以用軟件中斷指令INTnn來模擬外設提供的硬件中斷,方法是使nn類型號與該外設的類型號相同,從而可控制程序轉(zhuǎn)入該外設的中斷服務程序。也就是說,用戶定義的軟件中斷也可用來啟動由硬件啟動的外設中斷服務程序。

(一)8086/8088CPU中斷處理的基本過程

8086/8088CPU中斷處理的基本過程如下頁圖所示。對該圖作如下幾點說明:(1)中斷的基本過程可分為:中斷請求,中斷響應,中斷處理和中斷返回。

(2)按預先設計安排的中斷優(yōu)先權(quán)來響應中斷。

7.4.28086/8088的中斷處理過程內(nèi)部中斷?NMI?INTR?TF=0?執(zhí)行下條指令完成當前指令IF=1?第一個中斷響應周期AD7~AD0浮空第二個響應周期,取中斷類型碼AYYYYYNNNNNY8086CPU中斷處理流程標志進棧保存TF,將IF、TF清0斷點地址進棧查中斷向量表,轉(zhuǎn)中斷服務程序保護現(xiàn)場中斷服務恢復現(xiàn)場開中斷,返回A

(3)在一般情況下,都要待當前指令執(zhí)行完后方可響應中斷申請。但有少數(shù)情況是在下一條指令完成之后才響應中斷請求。例如,REP(重復前綴),LOCK(封鎖前綴)和段超越前綴等指令都應當將前綴看作指令的一部分,在執(zhí)行前綴和指令間不允許中斷。段寄存器的傳送指令MOV 和段寄存器的彈出指令POP也是一樣,在執(zhí)行下條指令之前都不能響應中斷。

(4)在WAIT指令和重復數(shù)據(jù)串操作指令執(zhí)行的過程中間可以響應中斷請求,但必須要等一個基本操作或一個等待檢測周期完成后才能響應中斷。

(5)因為NMI引腳上的中斷請求是需要立即處理的,所以在進入執(zhí)行任何中斷(包括內(nèi)部中斷)服務程序之前,都要安排測試NMI引腳上是否有中斷請求,以保證它實際上有最高的優(yōu)先權(quán)。這時要為轉(zhuǎn)入執(zhí)行NMI中斷服務程序而再次保護現(xiàn)場、斷點,并執(zhí)行完NMI中斷服務程序后返回到所中斷的服務程序,例如內(nèi)部中斷或INTR中斷的中斷服務程序。

(6)若此時無NMI中斷發(fā)生,則接著去查看暫存寄存器TEMP的狀態(tài)。若TEMP=1,則在中斷前CPU已處于單步工作方式,就和NMI一樣重新保護現(xiàn)場和斷點,轉(zhuǎn)入單步中斷服務程序。若TEMP=0,也就是在中斷前CPU處于非單步工作方式,則這時CPU將轉(zhuǎn)去執(zhí)行最先引起中斷的中斷服務程序。

(7)中斷處理程序結(jié)束時,由中斷返回指令將堆棧中存放的IP、CS以及PSW值還原給指令指針I(yè)P、代碼段寄存器CS以及程序狀態(tài)字PSW。

(二)同時發(fā)生多個中斷的處理過程

當多個中斷請求同時產(chǎn)生時,8086CPU將根據(jù)各中斷源優(yōu)先權(quán)的高低來處理,首先響優(yōu)先權(quán)較高的中斷請求,等具有較高優(yōu)先權(quán)的中斷請求處理完以后,再去依次響應和處理其他中斷申請。 假定8086CPU處于開中斷(IF=1)及單步工作(TF=1)方式,其處理多個中斷請求的過程如圖6.23所示。

圖中,假定8086在執(zhí)行除法指令的過程中采樣到有一個INTR中斷請求產(chǎn)生,由于除法出錯中斷是在執(zhí)行除法指令時才可能產(chǎn)生的,并且除法出錯中斷被看作是除法指令的一部分,故INTR引腳上的中斷請求要待除法指令后的一條指令執(zhí)行完時才能得到響應。因此,如果有除法出錯,則CPU首先響應除法出錯中斷,于是進行現(xiàn)場保護,并且關(guān)中斷進入除法出錯處理程序。若在除法出錯處理程序中沒有用指令STI使CPU開中斷,那么在整個除法出錯中斷處理過程中CPU都不會響應INTR引腳上的中斷請求。

如前所述,CPU在響應中斷、執(zhí)行保護現(xiàn)場與查中斷向量表,得到中斷服務程序入口地址后和執(zhí)行中斷服務程序之前,還要測試NMI引腳上有無中斷請求。此時若無NMI中斷請求,就測試其是否處于單步工作方式。如果TF=1,即在執(zhí)行除法出錯中斷服務程序的第1條指令之前CPU接受了單步中斷,則CPU就根據(jù)單步中斷服務程序的具體安排,既可使除法出錯中斷服務程序在單步方式下工作,也可以使之在正常情況下工作。待除法出錯處理程序執(zhí)行后,恢復現(xiàn)場,開中斷,返回原來被中斷的程序。若INTR引腳上的中斷請求依然存在,則CPU在將IF置1并且又執(zhí)行完一條指令以后,才響應INTR引腳上的中斷請求。同樣,首先進行現(xiàn)場保護,重復執(zhí)行上述過程。中斷處理完了后,恢復現(xiàn)場,返回到原來被中斷的程序。這樣就描述了在單步方式下對同時產(chǎn)生除法出錯中斷和INTR中斷進行處理的全過程。

中斷向量表也稱中斷入口地址表。該表說明了中斷類型號和中斷服務程序的入口地址之間的聯(lián)系。中斷向量表放在存儲單元地址的最低部位00000H到003FFH之間,占有1K字節(jié)的存儲空間。中斷向量表分成256組,每組由兩個字(即4個字節(jié))組成一個雙字長的指針。每個雙字指針指示一種中斷類型,所以8086最多能識別256種不同類型的中斷.7.4.3中斷向量表

通過這張中斷向量表產(chǎn)生出各個中斷服務程序的入口地址。在雙字長指針的高地址中存放的字是中斷服務程序入口地址所在的代碼段的16位段地址(CS),低地址字是中斷服務程序入口地址相對于段起始地址的偏移值(IP)。

CPU通過CS和IP的值得到一個20位的地址,它就是中斷服務程序的實際入口地址,其計算方法同求一個存儲器單元實際地址的方法一樣,就是將16位的CS段地址左移4位,然后加上IP值。

每個中斷向量具有一個相應的中斷類型號,由中斷類型號確定在中斷向量表中的中斷向量。

例如,若中斷類型號為8,它指出中斷向量表的第9個入口,則這個向量的第1字節(jié)的地址為:類型號8×4=32=00100000B=20H

若類型8中,安排的CS=1000H,IP=0200H,則它們形成的服務程序的入口地址為10200H。CPU一旦響應中斷類型8,則將轉(zhuǎn)去執(zhí)行從地址10200H開始的類型號為8的中斷服務程序。如下頁圖所示。

(一)INTR中斷的全過程 首先,中斷請求信號INTR由外部設備產(chǎn)生并送至8086的INTR引腳上。

CPU是否響應取決于CPU內(nèi)部的IF標志,如果IF標志為0,則在IF變成1以前CPU不會識別中斷;當IF=1并出現(xiàn)INTR請求信號時,CPU在完成正在執(zhí)行的指令后,便開始響應中斷。7.4.4可屏蔽中斷的過程

步驟如下:

(1)CPU讀取中斷類型號n。CPU將通過其INTA引腳向中斷接口電路發(fā)響應信號,并啟動中斷過程。這個響應信號將使發(fā)出中斷請求的接口把其1個字節(jié)的中斷類型號通過數(shù)據(jù)總線送給CPU;

(2)按先后順序把PSW、CS和IP的當前內(nèi)容壓入堆棧;(3)清除IF和TF標志;

(4)把4×n+2的字存儲單元中的內(nèi)容讀入CS中,把4×n的字存儲單元中內(nèi)容讀入IP中。

于是,CPU從新的CS:IP值開始執(zhí)行中斷服務程序。若允許中斷嵌套,則一般在中斷服務程序保存各寄存器內(nèi)容之后安排一條STI開放中斷指令,這是因為CPU響應中斷后便自動清除了IF與TF位,當執(zhí)行了STI指令后,IF=1,以便優(yōu)先權(quán)較高的中斷源獲準中斷響應。中斷服務程序中安排一條IRET中斷返回指令,就能控制CPU返回到發(fā)生中斷處去。

(二)中斷類型號的獲得

(1)除法錯誤,單步中斷,非屏蔽中斷,斷點中斷和溢出中斷分別由CPU芯片內(nèi)的硬件自提供類型號0~4。

(2)軟件中斷則是從指令流中,即在第2個字節(jié)中讀得中斷類型號。

(3)外部中斷INTR可以用不同的方法獲得中斷類型號。

下面以8086CPU的最小方式以及用戶定義的硬件中斷為例來討論中斷響應的時序,如下圖所示。7.4.5中斷響應時序

如果在前一個總線周期中CPU的中斷系統(tǒng)檢測到INTR引腳是高電平,而且程序狀態(tài)字的IF位為1,則CPU在完成當前的一條指令后,便執(zhí)行一個中斷響應時序。8086的中斷響應時序由兩個INTA中斷響應總線周期組成,中間由兩個空閑時鐘周期T1隔開。在兩個總線周期中,INTA輸出為低電平,以響應這個中斷。

第1個INTA總線周期表示一個中斷響應正在進行,這樣可以使申請中斷的設備有時間去準備在第2個INTA總線周期內(nèi)發(fā)出中斷類型號。第2個INTA總線周期中,中斷類型號必須在16位數(shù)據(jù)總線的低半部分(AD0~AD7)上傳送給8086。因此,提供中斷類型號的中斷接口電路(例如8259A)的8位數(shù)據(jù)線是接在16位數(shù)據(jù)總線的低半部上。在 中斷響應總線周期期間,經(jīng)DT/R和DEN的配合作用,使得8086可以從申請中斷的接口電路中取得一個單字節(jié)的中 斷類型號。

綜上所述,CPU響應可屏蔽中斷的全過程可歸納為如下幾點:

(1)執(zhí)行兩個中斷響應總線周期時,中斷接口電路在第2個中斷響應總線周期內(nèi)送出一個單字節(jié)數(shù)據(jù)作為中斷類型號。這個數(shù)據(jù)字節(jié)左移兩位(即乘以4)后,得到中斷向量在中斷向量表中的起始地址。

(2)執(zhí)行一個寫總線周期時,CPU在這個周期內(nèi)把程序狀態(tài)字PSW的內(nèi)容壓入堆棧。

(3)把程序狀態(tài)字中的中斷允許(IF)和單步陷阱(TF)標志位復位成0,這樣就能禁止可屏蔽的和單步的中斷。

(4)執(zhí)行一個寫總線周期時,斷點的段寄存器CS的內(nèi)容被壓入堆棧。

(5)執(zhí)行一個寫總線周期時,斷點的指令指示器IP的內(nèi)容被壓入堆棧。

(6)執(zhí)行一個讀總線周期時,CPU將從4×n+2的字存儲單元中將中斷服務程序的代碼段值讀入CS內(nèi)。

(7)執(zhí)行一個讀總線周期時,CPU將從4×n的字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論