第6章 輸入與輸出中斷_第1頁(yè)
第6章 輸入與輸出中斷_第2頁(yè)
第6章 輸入與輸出中斷_第3頁(yè)
第6章 輸入與輸出中斷_第4頁(yè)
第6章 輸入與輸出中斷_第5頁(yè)
已閱讀5頁(yè),還剩107頁(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)介

1、計(jì)算機(jī)系統(tǒng)及應(yīng)用,同濟(jì)大學(xué)電子信息工程學(xué)院 陸杰 Email :hase_lu Phone :65983309,第6章 輸入輸出與中斷,學(xué)習(xí)目標(biāo),1:理解 CPU與外設(shè)的連接及其接口電路的基本結(jié)構(gòu)和I/O端口的二種編址方法; 2:掌握PC/XT總線口地址的分配和I/O口地址譯碼技術(shù); 3: 掌握CPU與外設(shè)數(shù)據(jù)傳送的三種方式及其編程; 4:掌握中斷的基本概念及其中斷技術(shù);區(qū)分硬中斷與軟中斷的相同點(diǎn)和不同點(diǎn).,第6章 輸入輸出與中斷,前面幾章討論了有關(guān)微型計(jì)算機(jī)的原理與程序設(shè)計(jì)以及存儲(chǔ)器系統(tǒng),從這一章開(kāi)始討論微機(jī)系統(tǒng)的另一個(gè)重要組成部分輸入和輸出(I/O)。由于輸入輸出設(shè)備的多樣性以及I/O接口

2、電路的復(fù)雜性,因此,在后續(xù)的章節(jié)中將以較多的篇幅介紹CPU與外設(shè)間交換信息的有關(guān)問(wèn)題。本章首先介紹輸入輸出接口基本概念、CPU與外設(shè)數(shù)據(jù)傳送的方式。然后,重點(diǎn)研究中斷傳送方式及相關(guān)的技術(shù)。,目錄,6.1 輸入輸出接口概述 6.2 CPU與外設(shè)數(shù)據(jù)傳送的方式 6.3 中斷技術(shù) 6.4 8086/8088的中斷系統(tǒng)和中斷處理,6.1 輸入輸出接口概述,一、 CPU與外設(shè)間的連接 計(jì)算機(jī)在應(yīng)用中,必然同各種各樣的外設(shè)打交道.當(dāng)它被用于管理生產(chǎn)過(guò)程的檢測(cè)與控制以及科學(xué)計(jì)算時(shí),都要求把控制程序和原始數(shù)據(jù)(或從現(xiàn)場(chǎng)采集到的信息)通過(guò)相應(yīng)的輸入設(shè)備送入計(jì)算機(jī).CPU在程序的控制下,對(duì)這些信息進(jìn)行加工處理,然

3、后把結(jié)果以用戶所需要的方式通過(guò)輸 出設(shè)備予以輸出如顯示、打印或發(fā)出 控制信號(hào)去驅(qū)動(dòng)有關(guān)的執(zhí)行機(jī)構(gòu)等外 設(shè)越豐富,即硬件資源越多,其功能也越 強(qiáng)外設(shè)與計(jì)算機(jī)的連接不能像存儲(chǔ)器 那樣直接掛到總線(DB、AB、CB)上,而 必須通過(guò)各自的專用接口電路(接口芯 片)與主機(jī)連接. 其連接示意圖如圖6.1所示.,CPU對(duì)外設(shè)的輸入輸出操作類似于存儲(chǔ)器的讀寫操作,即 IO讀寫;但外設(shè)與存儲(chǔ)器有許多不同點(diǎn)。其比較如表 6.1所示.,接口電路(即可編程接口芯片)種類很多,它的顯著特點(diǎn) 是可編程性,即可以通過(guò)編程來(lái) 規(guī)定其功能及操作參數(shù)。,二、接口電路的基本結(jié)構(gòu) 接口電路的基本結(jié)構(gòu)同它傳送的信息種類有關(guān)。信息可分

4、 為3類: 數(shù)據(jù)信息;狀態(tài)信息;控制信息。 (一)數(shù)據(jù)信息 數(shù)據(jù)信息是最基本的一種信息。它包括: (1)數(shù)字量:通常為8位二進(jìn)制數(shù)或ASCII代碼。 (2)模擬量:當(dāng)計(jì)算機(jī)用于檢測(cè)、數(shù)據(jù)采集或控制時(shí),大量 的現(xiàn)場(chǎng)信息是連續(xù)變化的物理量(如溫度、壓力、流量、位移、速度等),經(jīng)傳感器把非電量轉(zhuǎn)換成電量并經(jīng)放大即得到模擬電 流或電壓,這些模擬量,計(jì)算機(jī)不能直接接收和處理,必須經(jīng) 過(guò)AD(模數(shù))轉(zhuǎn)換,才能輸入計(jì)算機(jī);而計(jì)算機(jī)輸出的數(shù) 字量也必須經(jīng)DA(數(shù)模)轉(zhuǎn)換后才能去控制執(zhí)行機(jī)構(gòu)。,(3) 開(kāi)關(guān)量:是一些“0”或“1”兩個(gè)狀態(tài)的量,用一位“0” 或“1”二進(jìn)制數(shù)表示。一臺(tái)字長(zhǎng)為8位的微機(jī)一次輸入或輸

5、出 可控制8個(gè)這類物理量。數(shù)據(jù)信息是通過(guò)數(shù)據(jù)通道傳送的。 (二) 狀態(tài)信息 狀態(tài)信息是反映外設(shè)當(dāng)前所處工作狀態(tài)的信息,以作為 CPU與外設(shè)間可靠交換數(shù)據(jù)的條件。當(dāng)輸入時(shí),它告知CPU:有 關(guān)輸入設(shè)備的數(shù)據(jù)是否準(zhǔn)備(Ready=1?);輸出時(shí),它告知 CPU:輸出設(shè)備是否空閑(Busy=0?)。CPU是通過(guò)接口電路來(lái) 掌握輸入輸出設(shè)備的狀態(tài),以決定可否輸入或輸出數(shù)據(jù)。,(三) 控制信息 它用于控制外設(shè)的啟動(dòng)或停止。接口電路基本結(jié)構(gòu)及其連接如圖6.2所示。接口電路根據(jù)傳送不同信息的需要,其基本結(jié)構(gòu)安排有一些特點(diǎn)。,(1) 3種信息(數(shù)據(jù)、狀態(tài)、控制)的性質(zhì)不同,應(yīng)通過(guò)不 同的端口分別傳送。如數(shù)據(jù)輸

6、入/輸出寄存器(緩沖器)、狀態(tài) 寄存器與命令控制寄存器各占一個(gè)端口,每個(gè)端口都有自己的 端口地址,故能用不同的端口地址來(lái)區(qū)分不同性質(zhì)的信息。 (2) 在用輸入輸出指令來(lái)尋址外設(shè)(實(shí)際尋址端口)的CPU(例如8086/8088)中,外設(shè)的狀態(tài)作為一種輸入數(shù)據(jù),而CPU 的控制命令,是作為一種輸出數(shù)據(jù),從而可通過(guò)數(shù)據(jù)總線來(lái)分別 傳送。 (3) 端口地址由CPU地址總線的低8位或低16位如在(8086 用DX間接尋址外設(shè)端口時(shí))地址信息來(lái)確定,CPU根據(jù)IO指令 提供的端口地址來(lái)尋址端口,然后同外設(shè)交換信息。,目錄,補(bǔ)充,(四):I/O端口的二種編址方法: 1:I/O端口和存儲(chǔ)器統(tǒng)一編址(M68系列

7、) 可用對(duì)存儲(chǔ)器操作的指令對(duì)其操作。 2:I/O端口單獨(dú)編址(X86系列) 用IN,OUT指令對(duì)端口進(jìn)行操作。,三:PC/XT總線(EISA)介紹(補(bǔ)充),四:I/O口地址譯碼技術(shù)(補(bǔ)充),本質(zhì):1:AB譯碼;2:限制條件;3:控制信號(hào). 1:PC/XT總線(EISA)應(yīng)用: 用A0-A9來(lái)單獨(dú)I/O編址;前512供系統(tǒng)板用,后512供擴(kuò)充插槽用,所以設(shè)計(jì)槽口接口板時(shí)A9=1. 0 AEN(gao電平):DMA控制總線;CPU控制總線?AEN(die電平)-限制條件.,2:I/O口地址譯碼方式:,目標(biāo):尋到I/O端口的地址(類似存儲(chǔ)器的CS), 然后才能對(duì)端口進(jìn)行操作。 用門電路 用譯碼器 用

8、比較器 一般三種方式的組合,6.2 CPU與外設(shè)之間數(shù)據(jù)傳送的方式,本節(jié)將以8086/8088為例,來(lái)說(shuō)明CPU與外設(shè)之間數(shù)據(jù)傳送 的方式。為了實(shí)現(xiàn)CPU與外設(shè)之間的數(shù)據(jù)傳送,通常采用以下3 種I/O傳送方式。 一、程序傳送 程序傳送是指CPU與外設(shè)間的數(shù)據(jù)交換在程序控制(即IN 或OUT指令控制)下進(jìn)行。 (一) 無(wú)條件傳送(又稱同步傳送) 這種傳送方式只對(duì)固定的外設(shè)(如開(kāi)關(guān)、繼電器、7段顯 示器、機(jī)械式傳感器等簡(jiǎn)單外設(shè))在規(guī)定的時(shí)間用IN或OUT指 令來(lái)進(jìn)行信息的輸入或輸出,其實(shí)質(zhì)是用程序來(lái)定時(shí)同步傳送 數(shù)據(jù)。對(duì)少量數(shù)據(jù)傳送來(lái)說(shuō),它是最省時(shí)間的一種傳送方法, 適用于各類巡回檢測(cè)和過(guò)程控制。

9、,一般,這些外設(shè)隨時(shí)做好了數(shù)據(jù)傳送的準(zhǔn)備,而無(wú)須檢測(cè)其狀態(tài)。 這里先要弄清有關(guān)輸入緩沖與輸出鎖存的基本概念。 輸入數(shù)據(jù)時(shí),因簡(jiǎn)單外設(shè)輸入數(shù)據(jù)的保持時(shí)間相對(duì)于CPU的接收速度來(lái)說(shuō)較長(zhǎng),故輸入數(shù)據(jù)通常不用加鎖存器來(lái)鎖存,而直接使用三態(tài)緩沖器與CPU數(shù)據(jù)總線相連即可。 輸出數(shù)據(jù)時(shí),一般都需要鎖存器將要輸出的數(shù)據(jù)保持一段時(shí)間,其長(zhǎng)短和外設(shè)的動(dòng)作相適應(yīng)。鎖存時(shí),在鎖存允許端CE=1(為無(wú)效電平)時(shí),數(shù)據(jù)總線上的新數(shù)據(jù)不能進(jìn)入鎖存器。只有當(dāng)確知外設(shè)已取走CPU上次送入鎖存器的數(shù)據(jù),方能在CE=0(為有效電平)時(shí)將新數(shù)據(jù)再送入鎖存器保留。,輸入輸出(無(wú)條件程序傳送)原理圖如圖6.3所示。,在輸入時(shí),假定來(lái)自

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

11、器保留,由它再 把信息通過(guò)外設(shè)輸出。顯然,在CPU執(zhí)行OUT指令時(shí),必須 確信所選外設(shè)的鎖存器是空的。,例:一個(gè)采用同步傳送的數(shù)據(jù)采集系統(tǒng)如圖6.4所示。,這是一個(gè)16位精度的數(shù)據(jù)采集系統(tǒng)。被采集的數(shù)據(jù)是8 個(gè)模擬量,由繼電器繞組P0、P1、P7分別控制觸點(diǎn)K0、 K1K7逐個(gè)接通。每次采樣用一個(gè)4位(每位為一個(gè)十進(jìn)制 數(shù))數(shù)字電壓表測(cè)量,把被采樣的模擬量轉(zhuǎn)換成16位BCD代 碼(即對(duì)應(yīng)4位十進(jìn)制數(shù)的4個(gè)BCD碼),高8位和低8位通過(guò)兩 個(gè)不同的端口(其地址分別為10H和11H)輸入。CPU通過(guò)端 口20H 輸出控制信號(hào),以控制某個(gè)繼電器的吸合,實(shí)現(xiàn)采集 不同通道的模擬量。,采集過(guò)程要求: (

12、1)先斷開(kāi)所有的繼電器線圈及觸頭,不采集數(shù)據(jù)。 (2)延遲一段時(shí)間后,使K0閉合,采集第1個(gè)通道的模擬 量,并保持一段時(shí)間,以使數(shù)字電壓表能將模擬電壓轉(zhuǎn)換為 16位BCD碼。 (3)分別將高8位與低8位BCD碼存入內(nèi)存,完成第1個(gè)模 擬量的輸入與存。 (4)利用移位與循環(huán)實(shí)現(xiàn)8個(gè)模擬量的依次采集、輸入 與轉(zhuǎn)存。,數(shù)據(jù)采集程序如下: START: MOV DX,0100H ;01HDH,置吸合第1個(gè)繼電器代碼 ;00HDL,置斷開(kāi)所有繼電器代碼 LEA BX,DSTOR ;置輸入數(shù)據(jù)緩沖器的地址指針 XOR AL,AL ;清AL及進(jìn)位位CF AGAIN: MOV AL,DL OUT 20H,AL

13、 ;斷開(kāi)所有繼電器線圈 CALL NEAR DELAY1 ;模擬繼電器觸點(diǎn)的釋放時(shí)間 MOV AL,DH OUT 20H,AL ;先使P0吸合 CALL NEAR DELAY2 ;模擬觸點(diǎn)閉合及數(shù)字電壓表的轉(zhuǎn)換時(shí)間 IN AX,10H ;輸入 MOV BX,AX ;存入內(nèi)存 INC BX INC BX RCL DH,1 ;DH左移(大循環(huán))1位,為下一個(gè)觸點(diǎn)吸合 作準(zhǔn)備 JNC AGAIN ;8位都輸入完了嗎?沒(méi)有,則循環(huán) DONE: ;輸入已完,則執(zhí)行別的程序段。,(二)程序查詢傳送(條件傳送異步傳送) 它也是一種程序傳送,但與前述無(wú)條件的同步傳送不同, 是有條件的異步傳送。此條件是:在執(zhí)行

14、輸入(IN指令)或輸 出(OUT指令)前,要先查詢接口中狀態(tài)寄存器的狀態(tài)。輸入 時(shí),由該狀態(tài)信息指示要輸入的數(shù)據(jù)是否已“準(zhǔn)備就緒”;而 輸出時(shí),又由它指示輸出設(shè)備是否“空閑”,由此條件來(lái)決定 執(zhí)行輸入或輸出。,程序查詢輸入 當(dāng)輸入裝置的數(shù)據(jù)已準(zhǔn)備好后發(fā)出一個(gè)STB選通信號(hào),一邊 把數(shù)據(jù)送入鎖存器,一邊使觸發(fā)器為“”,給出“準(zhǔn)備”READY的 狀態(tài)信號(hào).而數(shù)據(jù)與狀態(tài)必須有不同的端口分別輸入至CPU數(shù)據(jù)總 線。當(dāng)CPU要由外設(shè)輸入數(shù)據(jù)時(shí),CPU先輸入狀信息,檢查數(shù)據(jù)是 否已準(zhǔn)備好;當(dāng)數(shù)據(jù)已準(zhǔn)備好后,才輸入數(shù)據(jù)。讀入數(shù)據(jù)的命令, 使?fàn)顟B(tài)信息 清0(通過(guò)先 使觸發(fā)器 復(fù)位),以便 為下次輸入 一個(gè)新數(shù)

15、據(jù) 做準(zhǔn)備。 其方框圖 如圖6.5所示,讀入的數(shù)據(jù)是位,而讀入的狀態(tài)信息往往是位,如圖6.6所示。所以,不同的外設(shè)其狀態(tài)信息可以使用同一個(gè)端口,但只要使用不同的位就行。 這種查詢輸入方式的程 序流程圖如圖6.7所示。,查詢輸入部分的程序: POLL: IN AL,STATUSPORT ;讀狀態(tài)端口的信息 TEST AL,80 ;設(shè)“準(zhǔn)備就緒”(READY)信息 在D7位 JE POLL ;未“準(zhǔn)備就緒”,則循環(huán)再查 IN AL,DATA_PORT ;已“準(zhǔn)備就緒”(READY=1),則 讀入數(shù)據(jù),. 程序查詢輸出 同樣的,在輸出時(shí)也必須了解外設(shè)的狀態(tài),看外設(shè)是否有“空閑”(即外設(shè)數(shù)鎖存器已空,

16、或未正處于輸出狀態(tài)),若有 “ 空閑 ”,則 執(zhí)行輸 出指令;否則 就等待再查。 因此,接口電 路中也必須要 有狀態(tài)信息的 端口,其方框 圖如圖6.8所 示。,輸出過(guò)程:當(dāng)輸出裝置把輸出的數(shù)據(jù)輸出以后,發(fā)出一個(gè)(Acknowledge)信號(hào),使觸發(fā)器置“”,也即使“BUSY”線為0(EmptyBUSY),當(dāng)輸入這個(gè)狀 態(tài)信息后(經(jīng)37),知道外設(shè)為“空”,于是就執(zhí)行 輸出指令。待輸出指令執(zhí)行后,由地址信號(hào)和/及 相“與”,經(jīng)1發(fā)出選通信號(hào),把在數(shù)據(jù)總線上的輸出 數(shù)據(jù)送至鎖存器;同時(shí),觸發(fā)觸發(fā)器為“”狀態(tài),它一 方面通知外設(shè):輸出數(shù)據(jù)已準(zhǔn)備好,可以執(zhí)行輸出操作,另一方面在數(shù)據(jù)由輸出裝置輸出以前,

17、一直為“”,告知 (CPU通過(guò)讀狀態(tài)端口知道)外設(shè)“”,阻止 輸出新的數(shù)據(jù)。,查詢式輸出的端口信與程序流程圖分別如圖6.9與6.10所示。 查詢輸出部分的程序: POLL: IN AL,STATUS_PORT ;查狀態(tài)端口中的狀態(tài)信息D7 TEST AL,80H JNE POLL; ;D71即忙線1,則循環(huán)再查 MOV AL,STORE ;否則,外設(shè)空閑,由內(nèi)存讀取數(shù)據(jù) OUT DATA_PORT,AL ;輸出到DATA地址端口單元 其中,STATUS和TATA分別為狀態(tài)端口和數(shù)據(jù)端口的符號(hào)址;STORE為待輸出數(shù)據(jù)的內(nèi)存單元的符號(hào)地址。,.一個(gè)采用查詢方式的數(shù)據(jù)采集系統(tǒng) 一個(gè)有個(gè)模擬量輸入的

18、數(shù)據(jù)采集系統(tǒng),用查詢方式 與傳送信息,電路如圖6.11所示。,8個(gè)輸入模擬量,經(jīng)過(guò)多路開(kāi)關(guān)它由端口4輸出的 3位二進(jìn)制碼(D2、D1、D0)控制(000相應(yīng)于UA0輸入 相應(yīng)于UA7輸入),每次送出一個(gè)模擬量至 轉(zhuǎn)換器;同時(shí),轉(zhuǎn)換器由端口4輸出的4位控制啟 動(dòng)與停止。轉(zhuǎn)換器的信號(hào)由端口2的0 輸至數(shù)據(jù)總線;經(jīng)轉(zhuǎn)換后的數(shù)據(jù)由端口3輸入 至數(shù)據(jù)總線。所以,這樣的一個(gè)數(shù)據(jù)采集系統(tǒng),需要用到 3個(gè)端口,它們有各自的地址。,采集過(guò)程要求: (1) 初始化。 (2) 先停止轉(zhuǎn)換。 (3) 啟動(dòng)轉(zhuǎn)換,查輸入狀態(tài)信息。 (4) 當(dāng)輸入數(shù)據(jù)已轉(zhuǎn)換完(REA1,即準(zhǔn)備就緒),則經(jīng) 由端口輸入至CPU的累加器AL中

19、,并轉(zhuǎn)送內(nèi)存。 (5) 設(shè)置下一個(gè)內(nèi)存單元與下一個(gè)輸入通道,循環(huán)次。,數(shù)據(jù)采集過(guò)程的程序?yàn)椋?STARE: MOV DL,0F8H ;設(shè)置啟動(dòng)A/D轉(zhuǎn)換的信號(hào),且低位選通多路 開(kāi)關(guān)通道 MOV AX,SEG DSTOR ;設(shè)置輸入數(shù)據(jù)的內(nèi)存單元地址指針 MOV ES,AX LEA DI,DSTOR AGAIN:MOV AL,DL AND AL,0EFH ;使D4 OUT 04,AL ;停止A/D轉(zhuǎn)換 CALL DELAY ;等待停止A/D轉(zhuǎn)換操作的完成 MOV AL,DL OUT 04,AL ;選輸入通道并啟動(dòng)A/D轉(zhuǎn)換 POLL: IN AL,02 ;輸入狀態(tài)信息 SHR AL,1 ;查AL

20、的D0 JNC POLL ;判READY=1?若D0=0,未準(zhǔn)備好,則循環(huán)再查 IN AL,03 ;若已準(zhǔn)備就緒,則經(jīng)端口將采樣數(shù)據(jù)輸入至A STOSB ;輸入數(shù)據(jù)轉(zhuǎn)送內(nèi)存單元 IN CDL ;輸入模擬量通道增1 JNE AGAIN ;8個(gè)模擬量未輸入完則循環(huán) ;輸入已完,執(zhí)行別的程序,總結(jié)上述程序查詢輸入/輸出傳送方式的執(zhí)行過(guò)程, 其步驟是: ()CPU從I/O接口的狀態(tài)端口中讀入所尋址的外設(shè) 的狀態(tài) 信息“”或“BUSY”。 ()根據(jù)讀入的狀態(tài)信息進(jìn)行判斷。程序查詢輸入 時(shí),若狀態(tài)信息READY0,則外設(shè)數(shù)據(jù)未準(zhǔn)備好,CPU繼 續(xù)等待查詢,直至READY,外設(shè)已準(zhǔn)備好數(shù)據(jù),執(zhí)行下 一步操作

21、;程序查詢輸出時(shí),若狀態(tài)信息BUSY,則外 設(shè)正在“忙”,CPU繼續(xù)等待查詢,直至外設(shè)“空閑”,BUSY0 時(shí),執(zhí)行下一步操作。,()執(zhí)行輸入/輸出指令,進(jìn)行I/O傳送。完成數(shù)據(jù)的 輸入輸出,同時(shí)將外設(shè)的狀態(tài)信息復(fù)位,一個(gè)位的數(shù)據(jù) 傳送結(jié)束。 當(dāng)計(jì)算機(jī)工作任務(wù)較輕或CPU不太忙時(shí),可以應(yīng)用程序 查詢輸入輸出傳送方式,它能較好地協(xié)調(diào)外設(shè)與CPU之間定 時(shí)的差別;程序和接口電路比較簡(jiǎn)單。其主要缺點(diǎn)是:CPU必 須作程序等待循環(huán),不斷測(cè)試外設(shè)的狀態(tài),直至外設(shè)為交換數(shù) 據(jù)準(zhǔn)備就緒時(shí)為止。這種循環(huán)等待方式很花費(fèi)時(shí)間,大大降 低了CPU的運(yùn)行效率。,二、 中斷傳送,上述程序查詢傳送方式不僅要降低CPU的運(yùn)

22、行效率,而且,在一般實(shí)時(shí)控制系統(tǒng)中,往往有數(shù)十乃至數(shù)百個(gè)外設(shè),由于它們的工作速度不同,要求CPU為它們服務(wù)是隨機(jī)的,有些要求很急迫,若用查詢方式除浪費(fèi)大量等待查詢時(shí)間外,還很難使每一個(gè)外設(shè)都能工作在最佳工作狀態(tài)。 為了提高CPU執(zhí)行有效程序的工作效率和提高系統(tǒng)中多臺(tái)外設(shè)的工作效率,可以讓外設(shè)處于能主動(dòng)申請(qǐng)中斷的工作方式,這在有多個(gè)外設(shè)及速度不匹配時(shí),尤為重要。,所謂中斷是外設(shè)或其他中斷源中止CPU當(dāng)前正在執(zhí)行 的程序,而轉(zhuǎn)向?yàn)樵撏庠O(shè)服務(wù)(如完成它與CPU之間傳送一個(gè) 數(shù)據(jù))的程序,一旦服務(wù)結(jié)束,又返回原程序繼續(xù)工作。這 樣,外設(shè)處理數(shù)據(jù)期間,CPU就不必浪費(fèi)大量時(shí)間去查詢它 們的狀態(tài),只待外設(shè)

23、處理完畢主動(dòng)向CPU提出請(qǐng)求(向CPU發(fā) 中斷請(qǐng)求信號(hào)),而CPU在每一條指令執(zhí)行的結(jié)尾階段,均 查詢是否有中斷請(qǐng)求信號(hào)(這種查詢是由硬件完成的,不占 用CPU的工作時(shí)間),若有,則暫停執(zhí)行現(xiàn)行的程序,轉(zhuǎn)去 為申請(qǐng)中斷的某個(gè)外設(shè)服務(wù),以完成數(shù)據(jù)傳送。 中斷傳送方式的好處是:大大提高了CPU的工作效率。 關(guān)于中斷的詳細(xì)工作情況將在本章后兩節(jié)專門進(jìn)行討 論。,三、 直接存儲(chǔ)器存?。ǎ﹤魉?利用程序中斷傳送方式,雖然可以提高的工作率,但它仍需由通過(guò)程序來(lái)傳送數(shù)據(jù),并在處理中 斷時(shí),還要“保護(hù)現(xiàn)場(chǎng)”和“恢復(fù)現(xiàn)場(chǎng)”,而這兩部分操作的 程序段又與數(shù)據(jù)傳送沒(méi)有直接關(guān)系,卻要占用一定時(shí)間, 使每傳送一個(gè)字節(jié)大

24、約需要幾十微秒到幾百微秒.這對(duì)于 高速外設(shè)以及成組交換數(shù)據(jù)的場(chǎng)合,就顯得太慢了。,(Direct Memory Access)方式或稱為數(shù)據(jù)通 道方式是一種由專門的硬件電路執(zhí)行交換的傳送方 式,它讓外設(shè)接口可直接與內(nèi)存進(jìn)行高速的數(shù)據(jù)傳送,而 不必經(jīng)過(guò),這樣就不必進(jìn)行保護(hù)現(xiàn)場(chǎng)之類的額外操 作,可實(shí)現(xiàn)對(duì)存儲(chǔ)器的直接存取。這種專門的硬件電路就 是DMA控制器,簡(jiǎn)稱為。該集成電路產(chǎn)品有Zilog 公司的Z80,Intel公司的, 和Motorola的等。圖6.12給出了8086用DMA 方式傳送單個(gè)數(shù)據(jù)(輸出數(shù)據(jù))的示意圖。,如圖所示,當(dāng)接口準(zhǔn)備就緒,便向 DMA控制器發(fā)DMA請(qǐng)求;接著,CPU通 過(guò)

25、HOLD引腳接收DMA控制器發(fā)出的總 線請(qǐng)求 。通常,CPU在完成當(dāng)前總 線操作以后,就會(huì)在HLDA 引腳上向 DMA控制器發(fā)出允許信號(hào)而響應(yīng)總 線請(qǐng)求,DMA控制器接收到此信號(hào)后 就接管了對(duì)總線的控制權(quán)。此后,當(dāng) DMA傳送結(jié)束,DMA控制器就將HOLD信 號(hào)變?yōu)榈碗娖?并放棄對(duì)總線的控制。 8086檢測(cè)到HOLD信號(hào)變?yōu)榈碗娖胶螅?也將HLDA信號(hào)變?yōu)榈碗娖?于是,CPU 又恢復(fù)對(duì)系統(tǒng)總線的控制權(quán)。至于 DMA控制器什么時(shí)候交還對(duì)總線的控 制權(quán),取決于是進(jìn)行單個(gè)數(shù)據(jù)傳輸, 還是進(jìn)行數(shù)據(jù)塊傳輸,它總是在傳輸 完單個(gè)數(shù)據(jù)或數(shù)據(jù) 塊后才交出總線 控制權(quán)。,目錄,6.3 中斷技術(shù),中斷是一種十分重

26、要而復(fù)雜的軟硬件相結(jié)合的技術(shù),它的出現(xiàn)給計(jì)算機(jī)結(jié)構(gòu)與應(yīng)用帶來(lái)了新的突破。本節(jié)將介紹中斷的基本概念、中斷的響應(yīng)與處理過(guò)程、優(yōu)先權(quán)的安排等有關(guān)問(wèn)題。 一、中斷概述 (一) 中斷與中斷源 如前所述,使CPU暫停運(yùn)行原來(lái)的程序而應(yīng)更為急迫事件的需要轉(zhuǎn)向去執(zhí)行為中斷源服務(wù)的程序(稱為中斷服務(wù)程序),待該程序處理完后,再返回運(yùn)行原程序,此即中斷(或中斷技術(shù))。所謂中斷源,即引起中斷的事件或原因,或發(fā)出中斷申請(qǐng)的來(lái)源。通常中斷源有以下幾種 : (1)外部設(shè)備:一般中、慢速外設(shè)如鍵盤、行式打印機(jī)、A/D轉(zhuǎn)換器等,在完成自身的操作后,向CPU發(fā)出中斷請(qǐng)求,要求CPU為它服務(wù)。對(duì)于高速的外設(shè)如磁盤或磁帶,它可以向

27、CPU提出總線請(qǐng)求,進(jìn)行DMA傳送。,(2) 實(shí)時(shí)時(shí)鐘:在自動(dòng)控制中,常遇到定時(shí)檢測(cè)與控制,這時(shí)可采用外部時(shí)鐘電路,并可編程控制其定時(shí)間隔。當(dāng)需要定時(shí)的時(shí)刻,CPU發(fā)出命令,啟動(dòng)時(shí)鐘電路開(kāi)始計(jì)時(shí),待定時(shí)已到,時(shí)鐘電路就發(fā)中斷申請(qǐng),由CPU轉(zhuǎn)向去執(zhí)行服務(wù)程序。 (3) 故障源:計(jì)算機(jī)內(nèi)設(shè)有故障自動(dòng)檢測(cè)裝置,如發(fā)生運(yùn)算出錯(cuò)(溢出)、存儲(chǔ)器讀出出錯(cuò)、外部設(shè)備故障、電源掉電以及越限報(bào)警等意外事件時(shí),這些裝置都能使CPU中斷,進(jìn)行相應(yīng)的中斷處理。 以上3種屬于隨機(jī)中斷源。由隨機(jī)引起的中斷,稱為強(qiáng)迫中斷。 (4) 為調(diào)試程序設(shè)置的中斷源:這是CPU執(zhí)行了特殊指令(自陷指令)或由硬件電路引起的中斷,主要是供

28、用戶調(diào)試程序時(shí)而采取的檢查手段。如斷點(diǎn)設(shè)置、單步調(diào)試等.這些都要由中斷系統(tǒng)實(shí)現(xiàn)。一般稱這種中斷為自愿中斷。,(二) 中斷系統(tǒng)及其功能,中斷系統(tǒng)是指為實(shí)現(xiàn)中斷而設(shè)置的各種硬件與軟件,包括中斷控制邏輯及相應(yīng)管理中斷的指令。 中斷系統(tǒng)應(yīng)具有下列功能: 1. 能響應(yīng)中斷、處理中斷與返回 當(dāng)某個(gè)中斷源發(fā)出中斷請(qǐng)求時(shí),CPU能 根據(jù)條件決定是否響應(yīng)該中斷請(qǐng)求.若允 許響應(yīng),則CPU必須在執(zhí)行完現(xiàn)行指令后, 保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)(即把斷點(diǎn)處的PC值和各 寄存器的內(nèi)容與標(biāo)志位的狀態(tài)推入堆棧), 然后再轉(zhuǎn)到需要處理的中斷服務(wù)程序的入 口,同時(shí),清除中斷請(qǐng)求觸發(fā)器。當(dāng)處理 完中斷服務(wù)程序后,再恢復(fù)現(xiàn)場(chǎng)和斷點(diǎn)PC 值,使

29、CPU返回?cái)帱c(diǎn),繼續(xù)執(zhí)行主程序。中 斷的簡(jiǎn)單過(guò)程示意圖如圖6.13所示。,2. 能實(shí)現(xiàn)優(yōu)先權(quán)排隊(duì) 通常,在系統(tǒng)中有多個(gè)中斷源時(shí),有可能出現(xiàn)兩個(gè)或兩個(gè)以上中斷源同時(shí)提出中斷請(qǐng)求的情況。這時(shí),要求CPU能根據(jù)中斷源被事先確定的優(yōu)先權(quán)由高到低依次處理。 3. 高級(jí)中斷源能中斷低級(jí)的中斷 處理。中斷嵌套示意圖如圖6.14所示。 假定有兩個(gè)中斷源A和B,CPU正在對(duì) 中斷源B進(jìn)行中斷處理.若A的優(yōu)先高 于B,當(dāng)A發(fā)出中斷請(qǐng)求時(shí),則CPU應(yīng)能 中斷對(duì)B的中斷服務(wù),即允許A能中斷 (或嵌套)B的中斷處理;在高級(jí)中斷 處理完以后,再繼續(xù)處理被中斷的服 務(wù)程序,它處理完畢,最后返回主程 序。反之,若A的優(yōu)先權(quán)同

30、于或低于 B時(shí),則A不能嵌套于B。這是兩重中 斷(或兩級(jí)嵌套),還可以進(jìn)行多重中 斷(或多級(jí)嵌套)。,(三) 中斷的應(yīng)用 中斷除了能解決快速CPU與中、慢速外設(shè)速度不匹配 的矛盾以提高主機(jī)的工作效率之外,在實(shí)現(xiàn)分時(shí)操作、實(shí) 時(shí)處理、故障處理、多機(jī)連接以及人機(jī)聯(lián)系等方面均有廣 泛的應(yīng)用。,二、 單個(gè)中斷源的中斷,先研究只有一個(gè)中斷源的簡(jiǎn)單中斷情況。簡(jiǎn)單的中斷過(guò)程應(yīng)包括:中斷請(qǐng)求、中斷響應(yīng)、中斷處理和中斷返回等環(huán)節(jié)。 (一) 中斷源向CPU發(fā)中斷請(qǐng)求信號(hào)的條件 中斷源是通過(guò)其接口電路向CPU發(fā)中斷請(qǐng)求信號(hào)的,該信號(hào)能否發(fā)給CPU,應(yīng)滿足下列兩個(gè)條件: 1. 設(shè)置中斷請(qǐng)求觸發(fā)器 每一個(gè)中斷源,要能向

31、CPU發(fā)中斷請(qǐng)求信號(hào),首先應(yīng)能由它的接口電路提出中斷請(qǐng)求,且該請(qǐng)求能保持著,直至CPU接受并響應(yīng)該中斷請(qǐng)求后,才能清除它。為此,要求在每個(gè)中斷源的接口電路中設(shè)置一個(gè)中斷請(qǐng)求觸發(fā)器A,由它產(chǎn)生中斷請(qǐng)求,即QA=1。如圖6.15所示。,2設(shè)置中斷屏蔽觸發(fā)器 中斷源的中斷請(qǐng)求能否允許以中斷請(qǐng)求信號(hào)(如INTR)發(fā)向CPU,應(yīng)能受CPU的控制,以增加處理中斷的靈活性,為此,在接口電路中,還要增設(shè)一個(gè)中斷屏蔽觸發(fā)器B。當(dāng)允許中斷時(shí),由CPU控制使其QB端為0(不屏蔽),QB端為1,于是,與門開(kāi)啟,中斷請(qǐng)求(QA)被允許并經(jīng)過(guò)與門以中斷請(qǐng)求信號(hào)INTR發(fā)向CPU;反之,當(dāng)禁止中斷時(shí),由CPU控制其QB端置

32、1(屏蔽),QB端為0,與門關(guān)閉,即使有中斷請(qǐng)求產(chǎn)生,但并不能以INTR發(fā)向CPU。 若有多個(gè)中斷源,例如8個(gè)外設(shè),則可將8個(gè)外設(shè)的中斷屏蔽觸發(fā)器組成一個(gè)端口,用輸出指令(即利用WR有效信號(hào))來(lái)控制它們的狀態(tài)。,(二) CPU響應(yīng)中斷的條件,當(dāng)中斷源向CPU發(fā)出INTR信號(hào)后,CPU若要響應(yīng)它,還應(yīng)滿足下列條件。 1CPU開(kāi)放中斷 CPU采樣到INTR信號(hào)后是否響應(yīng)它,由CPU內(nèi)設(shè)置的中斷允許觸發(fā)器(如IFF)的狀態(tài)決定,如圖6.16所示.當(dāng)IFF= 1(即開(kāi)放中斷簡(jiǎn)稱開(kāi)中)時(shí),CPU才能響應(yīng)中斷;若IFF=0(即關(guān)閉中斷簡(jiǎn)稱關(guān)中)時(shí),即使有INTR信號(hào),因與門1被IFF的Q端關(guān)閉,CPU也不

33、響應(yīng)它。而IFF的狀態(tài)可以由專門設(shè)置的開(kāi)中與關(guān)中指令來(lái)改變,即執(zhí)行開(kāi)中指令時(shí),使IFF=1,即CPU開(kāi)中,于是,與門1的輸出端置1(即允許中斷);而執(zhí)行關(guān)中指令時(shí),經(jīng)或門2使IFF=0,即CPU關(guān)中,于是,禁止中斷。此外,當(dāng)CPU復(fù)位或響應(yīng)中斷后,也能使CPU關(guān)中。,返回,2 CPU在現(xiàn)行指令結(jié)束后響應(yīng)中斷,在CPU開(kāi)中時(shí),若有中斷 請(qǐng)求信號(hào)發(fā)至CPU,它也并不 立即響應(yīng)。 而只有當(dāng)現(xiàn)行指令運(yùn)行 到最后一個(gè)機(jī)器周期的最后 一個(gè)T狀態(tài)時(shí),才采樣 INTR信號(hào);若有此信號(hào),則 把與門的允許中斷輸出端 置1,于是,CPU進(jìn)入中斷響 應(yīng)周期。,(三) CPU響應(yīng)中斷及處理過(guò)程,當(dāng)滿足上述條件后,CPU

34、就響應(yīng)中斷,轉(zhuǎn)入中斷周期,完成下列幾步操作: 1關(guān)中斷 CPU響應(yīng)中斷后,在發(fā)出中斷響應(yīng)信號(hào)(在8086/8088中為INTA) 的同時(shí),內(nèi)部自動(dòng)地(由硬件)實(shí)現(xiàn)關(guān)中斷,以免在響應(yīng)中斷后處理 當(dāng)前中斷時(shí)又被新的中斷源中斷,以至破壞當(dāng)前中斷服務(wù)的現(xiàn)場(chǎng). 2保留斷點(diǎn) CPU響應(yīng)中斷后,立即封鎖PC+1(此即斷點(diǎn)地址),且把此PC值 壓棧保護(hù),以備中斷處理完畢后,CPU能返回?cái)帱c(diǎn)處繼續(xù)運(yùn)行主 程序。,3保護(hù)現(xiàn)場(chǎng) 在CPU處理中斷服務(wù)程序時(shí),有可能用到各寄存器,從 而改變它們?cè)谶\(yùn)主程序時(shí)所暫存的中間結(jié)果,這就破壞 了原主程序中的現(xiàn)場(chǎng)信息。為使中斷服務(wù)程序不影響主程 序的正常運(yùn)行,故要把主程序運(yùn)行到斷

35、點(diǎn)處時(shí)的有關(guān)寄存 器的內(nèi)容和標(biāo)志位的狀態(tài)壓棧保護(hù)起來(lái)。 4給出中斷入口(地址),轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序 8086/8088是由中斷源提供中斷類型號(hào),并根據(jù)中斷類 型號(hào)在中斷向量表中取得中斷服務(wù)程序的起始地址。,在中斷服務(wù)程序完成后,還要執(zhí)行下述的5、6兩步操作。 5恢復(fù)現(xiàn)場(chǎng) 把被保留在堆棧中的各有關(guān)寄 存器的內(nèi)容和標(biāo)志位的狀態(tài)從堆棧 中彈出,送回CPU中它們?cè)瓉?lái)的位置 這個(gè)操作是在中斷服務(wù)程序中 用POP指令來(lái)完成的。 6開(kāi)中斷與返回 在中斷服務(wù)程序的最后,要開(kāi)中 斷(以便CPU能響應(yīng)新的中斷請(qǐng)求) 和安排一條返回指令,將堆棧內(nèi)保 存的斷點(diǎn)PC值彈出,送回至PC,CPU 就恢復(fù)到斷點(diǎn)處繼續(xù)運(yùn)行

36、。 上述過(guò)程如圖6.18所示,三、 向量中斷 所謂向量中斷(Vectored Interrupt),是指通過(guò)中斷向量 來(lái)找中斷入口地址進(jìn)而轉(zhuǎn)向中斷服務(wù)程序的一種方法;而中斷 向量則是用來(lái)提供中斷入口地址的一個(gè)地址指針。 例如8086/8088CPU的中斷系統(tǒng)就是采用這種向量中斷。其 詳細(xì)過(guò)程,將在下一節(jié)討論,請(qǐng)參見(jiàn)圖6.24及其說(shuō)明。,四、中斷優(yōu)先權(quán) 以上討論了只有一個(gè)中斷源的最簡(jiǎn)單的情況。實(shí)際的 系統(tǒng)中,具有多個(gè)中斷源,而CPU的可屏蔽中斷請(qǐng)求線往往 只有一條。如何解決多個(gè)中斷源同時(shí)請(qǐng)求中斷而只有一根 中斷請(qǐng)求線的矛盾呢?這就要求CPU按多個(gè)中斷源的優(yōu)先權(quán) 由高至低依次來(lái)響應(yīng)中斷申請(qǐng)。同時(shí),

37、當(dāng)CPU正在處理中斷 時(shí),還要能響應(yīng)更高級(jí)的中斷申請(qǐng),而屏蔽掉同級(jí)或低級(jí) 的中斷申請(qǐng)。CPU 可以通過(guò)軟件查詢技術(shù)或硬件排隊(duì)電路 兩種方法來(lái)實(shí)現(xiàn)按中斷優(yōu)先權(quán)對(duì)多個(gè)中斷源的管理,也有 專門用于協(xié)助CPU 按中斷優(yōu)先權(quán)處理多個(gè)中斷源的中斷控 制芯片,如后面第7章中將要介紹的8259A芯片。,目錄,6.4 8086/8088的中斷系統(tǒng)和中斷處理,本節(jié)將主要闡述8086/8088的中斷系統(tǒng)及其中斷處理的全過(guò)程。 一、8086/8088的中斷系統(tǒng) 8086/8088有一個(gè)簡(jiǎn)要、靈活而多用的中斷系統(tǒng),它采 用中斷向量結(jié)構(gòu),使每個(gè)不同的中斷都可以通過(guò)給定一個(gè) 特定的中斷類型號(hào)(或中斷類型碼)供CPU識(shí)別,來(lái)

38、處理多達(dá) 256種類型的中斷。這些中斷可以來(lái)自外部,即由硬件產(chǎn) 生,也可以來(lái)自內(nèi)部,即由軟件(中斷指令)產(chǎn)生,或者 滿足某些特定條件(陷阱)后引發(fā)CPU中斷。,8086/8088的中斷系統(tǒng)結(jié)構(gòu)如圖所 示,圖中給出了各主要的中斷源,(一) 外部中斷 8086/8088 CPU有兩條引腳供外部中斷源請(qǐng)求中斷:一條是高電平有效的可屏蔽中斷INTR;另一條是正跳變有效的非屏蔽中斷NMI。 .可屏蔽中斷 可屏蔽中斷是由用戶定義的外部硬件中斷。當(dāng)8086/8088CPU的INTR引腳上出現(xiàn)一高電平有效請(qǐng)求信號(hào)時(shí),它必須保持到當(dāng)前指令的結(jié)束。這是因?yàn)镃PU只在每條指令的最后一個(gè)時(shí)鐘周期才對(duì)INTR引腳的狀態(tài)

39、進(jìn)行采樣,如果CPU采樣到有可屏蔽中斷請(qǐng)求信號(hào)INTR產(chǎn)生,它是否響應(yīng)此中斷請(qǐng)求信號(hào)還要取決于標(biāo)志寄存器的中斷允許標(biāo)HJ5:*4/9志位IF的狀態(tài)。若IF=0,此時(shí)CPU是處于關(guān)中斷狀態(tài),則不響應(yīng)INTR;若IF=1,則CPU是處于開(kāi)中斷狀態(tài),將響應(yīng)INTR,并通過(guò)INTA引腳向產(chǎn)生INTR的設(shè)備接口(中斷源)發(fā)回響應(yīng)信號(hào),啟動(dòng)中斷過(guò)程。(第一個(gè)中斷響應(yīng)信號(hào)),8086/8088 CPU在發(fā)回第2個(gè)中斷響應(yīng)信號(hào)INTA時(shí),將 使發(fā)出中斷請(qǐng)求信號(hào)的接口把1字節(jié)的中斷類型號(hào)通過(guò)數(shù) 據(jù)總線傳送給CPU。由該中斷類型號(hào)指定了中斷服務(wù)程序 入口地址在中斷向量表中的位置。 中斷允許標(biāo)志IF位的狀態(tài)可用指令

40、STI使其置位,即 開(kāi)中斷;也可用CLI指令使其復(fù)位,即關(guān)中斷。由于8086 /8088CPU在系統(tǒng)復(fù)位以后或任一種中斷被響應(yīng)以后,IF =0,所以根據(jù)實(shí)際需要,在執(zhí)行程序的過(guò)程中要用STI指 令開(kāi)中斷,以便CPU有可能響應(yīng)新的可屏蔽中斷請(qǐng)求。,. 非屏蔽中斷 當(dāng)8086/8088 CPU的NMI引腳上出現(xiàn)一上升沿的邊沿觸 發(fā)有效請(qǐng)求信號(hào)時(shí),它將由CPU內(nèi)部的鎖存器將其鎖存起 來(lái)。8086/8088要求NMI上的請(qǐng)求脈沖的有效寬度(高電平 的持續(xù)時(shí)間)大于兩個(gè)時(shí)鐘周期。一旦此中斷請(qǐng)求信號(hào)產(chǎn) 生,不管標(biāo)志位IF的狀態(tài)如何,即使在關(guān)中斷(IF=0)的 情況下,CPU也能響應(yīng)它。 在IBM PC機(jī)中

41、的非屏蔽中斷源有3種:系統(tǒng)板上RAM的 奇偶校驗(yàn)錯(cuò),擴(kuò)展槽中的I/O通道錯(cuò)以及浮點(diǎn)運(yùn)算協(xié)處理器 8087的中斷請(qǐng)求,3個(gè)中斷源均可獨(dú)立申請(qǐng)中斷,能否形成 NMI信號(hào),還必須將口地址為0AH的寄存器的D位置1后,方 能允許產(chǎn)生NMI信號(hào)。,由于NMI比INTR引腳上產(chǎn)生的任何中斷請(qǐng)求的級(jí)別都 高,因此,若在指令執(zhí)行過(guò)程中,INTR和NMI引腳上同時(shí)都 有中斷請(qǐng)求信號(hào) ,則CPU將首先響應(yīng)NMI引腳上的中斷請(qǐng) 求。Intel公司在設(shè)計(jì)8086/8088芯片時(shí),已將NMI的中斷 類型號(hào)預(yù)先定義為類型2,所以,CPU響應(yīng)非屏蔽中斷時(shí),不 要求外部向CPU提供中斷類型號(hào),CPU在總線上也不發(fā)INTA 信

42、號(hào)。,(二)內(nèi)部中斷 .除法出錯(cuò)中斷類型0 當(dāng)執(zhí)行DIVs(除法)或IDVs(整數(shù)除法)指令時(shí),若發(fā)現(xiàn) 除數(shù)為0或商數(shù)超過(guò)了寄存器所能表達(dá)的范圍,則立即產(chǎn)生一個(gè) 類型為0的內(nèi)部中斷,CPU轉(zhuǎn)向除法出錯(cuò)的中斷服務(wù)程序。它是 優(yōu)先級(jí)最高的一種內(nèi)部中斷。 .溢出中斷類型4 若上一條指令執(zhí)行的結(jié)果使溢出標(biāo)志位置1(OF=1),則在 執(zhí)行溢出中斷(INTO)指令時(shí),將引起類型4的內(nèi)部中斷,CPU 就可以轉(zhuǎn)入對(duì)溢出錯(cuò)誤進(jìn)行處理的中斷服務(wù)程序。若OF=0 時(shí),則本指令執(zhí)行空操作,即此指令不起作用,程序執(zhí)行下一條指令。INTO指令常常緊跟在算術(shù)運(yùn)算指令之后,以便在該指令執(zhí) 行產(chǎn)生溢出時(shí)由INTO指令進(jìn)行特殊的

43、處理。與除法出錯(cuò)中斷不同,出現(xiàn)溢出狀態(tài)時(shí)不會(huì)由上一條指令自動(dòng)產(chǎn)生中斷,必須由INTO指令明確地規(guī)定溢出中斷。應(yīng)當(dāng)說(shuō)明的是,在溢出中斷服 務(wù)程序中,無(wú)需保存狀態(tài)標(biāo)志寄存器的內(nèi)容(PSW),因?yàn)镃PU 在中斷響應(yīng)時(shí)序中能自動(dòng)完成這一操作。,. 單步中斷類型1 8086/8088 CPU的狀態(tài)標(biāo)志寄存器中有一個(gè)跟蹤(陷 阱)標(biāo)志位TF。當(dāng)TF被置位(TF1)時(shí),8086/8088處于單 步工作方式,即CPU每執(zhí)行完一條指令后就自動(dòng)地產(chǎn)生一 個(gè)類型1的內(nèi)部中斷,程序控制將轉(zhuǎn)入單步中斷服務(wù)程序。 CPU響應(yīng)單步中斷后將自動(dòng)把狀態(tài)標(biāo)志壓入堆棧,然后清除 TF和IF標(biāo)志位,使CPU在單步中斷服務(wù)程序引入以后

44、退出單 步工作方式,在正常運(yùn)行方式下執(zhí)行單步中斷服務(wù)程序。 單步中斷服務(wù)程序結(jié)束時(shí),再通過(guò)執(zhí)行一條IRET中斷返回 指令,將CS與IP的內(nèi)容退棧并恢復(fù)狀態(tài)標(biāo)志寄存器的內(nèi)容, 使程序返回到斷點(diǎn)處。由于在中斷時(shí)TF位被保護(hù)起來(lái)了, 中斷返回時(shí)TF位又被重新恢復(fù)(TF=1),所以CPU在中斷返 回以后仍然處于單步工作方式。,在8086/8088指令集中,沒(méi)有直接用來(lái)設(shè)置或清除TF 狀態(tài)位的指令。但可以借助于壓棧指令PUSHF和出棧指令 POPF通過(guò)改變堆棧中的值來(lái)設(shè)置或清除TF位。例如,先用 PUSHF指令將標(biāo)志寄存器的內(nèi)容(PSW)壓入堆棧,再將堆 棧棧頂?shù)闹担碢SW)和0100H相“或”(OR

45、),或和FEFFH 相“與”(AND),然后用POPF指令將上述操作的結(jié)果從堆 棧中彈出,達(dá)到設(shè)置或清除TF位的目的。 單步中斷方式是一種很有用的調(diào)試手段,通過(guò)它可以 逐條觀察指令執(zhí)行的結(jié)果,做到精確跟蹤指令流程,并確 定程序出錯(cuò)的位置,. 斷點(diǎn)中斷類型3 8086/8088指令系統(tǒng)中有一條設(shè)置程序斷點(diǎn)的單字節(jié) 中斷指令(INT 3),執(zhí)行該指令以后就會(huì)產(chǎn)生一個(gè)中斷類 型為3的內(nèi)部中斷,CPU將轉(zhuǎn)向執(zhí)行一個(gè)斷點(diǎn)中斷服務(wù)程序, 以便進(jìn)行一些特殊的處理. 斷點(diǎn)中斷指令主要用于軟件調(diào)試中,程序員可用它在 程序中設(shè)置一個(gè)程序斷點(diǎn)。一般,斷點(diǎn)可以設(shè)置在程序的 任何位置,但在實(shí)際調(diào)試程序時(shí),只需在一些關(guān)鍵

46、性的地 方設(shè)置斷點(diǎn)。例如,可以用這種方法顯示寄存器或存儲(chǔ)器 的內(nèi)容,檢查程序運(yùn)行的結(jié)果是否正確。由斷點(diǎn)指令I(lǐng)NT 是一個(gè)單字節(jié)指令,所以借助該指令可以很容易地在程序 的任何地方設(shè)置斷點(diǎn)。,. 用戶定義的軟件中斷類型n 在8086/8088的內(nèi)部中斷中,有一個(gè)可由用戶定義的 雙字節(jié)的中斷指令I(lǐng)NT n,其第1個(gè)字節(jié)為INT的操作碼, 第2個(gè)字節(jié)n是它的中斷類型號(hào)。中斷類型號(hào)n由程序員 編程時(shí)給定,用它指出中斷服務(wù)程序的入口地址。256 級(jí)中斷的中斷入口地址表如圖6.20所示。圖中給出了與 中斷類型對(duì)應(yīng)的256個(gè)中斷入口,每個(gè)入口應(yīng)包含4個(gè)字 節(jié),2個(gè)低地址字節(jié)是IP偏移量,2個(gè)高地址字節(jié)是CS基

47、 址,因此,用來(lái)存放256個(gè)入口的中斷入口地址表需要占 用1K字節(jié)的存儲(chǔ)空間,且設(shè)置在存儲(chǔ)器的最低端,即 000H3FFH。這樣,每個(gè)中斷都可轉(zhuǎn)到1MB空間的任何 地方。,當(dāng)CPU響應(yīng)中斷訪問(wèn)入口地址表時(shí),外設(shè)應(yīng)通過(guò)接 口將一個(gè)8位的中斷類型號(hào)放在數(shù)據(jù)總線上,CPU對(duì)編 號(hào)n乘以4得到4n指向該入口地址的首字節(jié); 4n和4n+1 單元中存放的是入口的偏移地址值,其低字節(jié)在4n地 址中,高字節(jié)在4n+1地址中;4n+2和4n+3單元中存放 的是入口的段地址值,也是低字節(jié)在前,高字節(jié)在后。 實(shí)現(xiàn)中斷轉(zhuǎn)移時(shí),CPU將把有關(guān)的標(biāo)志位和斷點(diǎn)地址的 CS和IP值入棧,然后通過(guò)中斷向量間接轉(zhuǎn)入中斷服務(wù) 程序

48、。中斷處理結(jié)束,用返回指令彈出斷點(diǎn)地址的IP 與CS值以及標(biāo)志位,然后返回被中斷的程序。,應(yīng)當(dāng)注意,圖6.20的中斷入口地址表被明確地分為3 部分。第1部分是類型0到 類型4共5種類型已定義為專用 中斷,它們占表中的000H013H,共20個(gè)字節(jié),這5 種中 斷的入口已由系統(tǒng)定義,不允許用戶修改。第2部分是類 型5到類型31為系統(tǒng)備用中斷,占用表中014H07FH共108 個(gè)字節(jié)。這是Intel公司為軟、硬件開(kāi)發(fā)保留的中斷類型, 一般不允許用戶作其他用途,其中許多中斷已被系統(tǒng)開(kāi)發(fā) 使用,例如類型21已用作系統(tǒng)功能調(diào)用的軟中斷。第3部 分是類型32到類型255,占用表中的080H3FFH共896

49、個(gè)字 節(jié),可供用戶使用。這些中斷可由用戶定義為軟中斷,由 INT n指令引入,也可以是通過(guò)INTR端直接引入的或者通 過(guò)中斷控制器8259A 引入的可屏蔽中斷,使用時(shí)用戶要自 行置入相應(yīng)的中斷入口地址。,返回1,返回2,(三) 內(nèi)部中斷的特點(diǎn),(1)內(nèi)部中斷由一條INT n指令直接產(chǎn)生,其中斷類型號(hào)n或者包括在指令中,或者已由系統(tǒng)預(yù)先定義。 (2)除單步中斷以外,所有內(nèi)部中斷都不能被屏蔽。 (3)所有內(nèi)部中斷都沒(méi)有中斷響應(yīng)INTA機(jī)器總線周期,這是因?yàn)閮?nèi)部中斷不必通過(guò)查詢外部來(lái)獲得中斷類型號(hào)。,(4)硬、軟中斷的優(yōu)先級(jí)排隊(duì)如表6.2所示。8086/8088 中斷系統(tǒng)規(guī)定,除了單步中斷以外,所有

50、內(nèi)部中斷的優(yōu)先權(quán) 都比外部中斷的優(yōu)先權(quán)高。如果在執(zhí)行一個(gè)能引起內(nèi)部中斷 指令的同時(shí),在NMI或INTR引腳端也產(chǎn)生了外部中斷請(qǐng)求,則 CPU將首先處理內(nèi)部中斷。,(5)作為軟件調(diào)試手段, 單 步中斷是逐條地跟蹤調(diào) 試,而斷點(diǎn)中斷(INT )是 逐段地調(diào)試,它們均可用中 斷服務(wù)程序在屏幕上顯示有 關(guān)的各種信息。 如果所有斷點(diǎn)處要求打 印的信息都相同,就可以一律使用單字節(jié)的斷點(diǎn)中斷 INT 3指令;但若要打印的信息不同,則指令中就需使 用其他中斷類型號(hào)。圖 6.21 說(shuō)明了如何用雙字節(jié)的 INT n指令進(jìn)行程序調(diào)試的方法。其中,INT指令中就 分別使用了5、6、7這3個(gè)中斷類型號(hào),以指定不同的 中

51、斷服務(wù)入口地址。,(6)為了避開(kāi)由外設(shè)硬件產(chǎn)生INTR中斷請(qǐng)求 信號(hào)和提供中斷類型號(hào)的麻煩,可以用軟件中斷 指令I(lǐng)NT nn來(lái)模擬外設(shè)提供的硬件中斷,方法是 使nn類型號(hào)與該外設(shè)的類型號(hào)相同,從而可控制 程序轉(zhuǎn)入該外設(shè)的中斷服務(wù)程序。也就是說(shuō),用 戶定義的軟件中斷也可用來(lái)啟動(dòng)由硬件啟動(dòng)的 外設(shè)中斷服務(wù)程序。,二、 8086/8088的中斷處理過(guò)程,(一) 8086/8088 CPU中斷處理的基本過(guò)程,8086/8088CPU中斷處理的 基本過(guò)程如圖6.22所示,對(duì)該圖作如下幾點(diǎn)說(shuō)明: (1) 中斷的基本過(guò)程可分 為:中斷請(qǐng)求,中斷響應(yīng),中 斷處理和中斷返回。 (2) 按預(yù)先設(shè)計(jì)安排的中 斷優(yōu)先

52、權(quán)來(lái)響應(yīng)中斷。,(3) 在一般情況下,都要待當(dāng)前指令執(zhí)行完后方可響 應(yīng)中斷申請(qǐng)。但有少數(shù)情況是在下一條指令完成之后才響 應(yīng)中斷請(qǐng)求。例如,REP(重復(fù)前綴),LOCK(封鎖前綴) 和段超越前綴等指令都應(yīng)當(dāng)將前綴看作指令的一部分,在 執(zhí)行前綴和指令間不允許中斷。段寄存器的傳送指令MOV 和段寄存器的彈出指令POP也是一樣,在執(zhí)行下條指令之 前都不能響應(yīng)中斷。,(4) 在WAIT指令和重復(fù)數(shù)據(jù)串操作指令執(zhí)行的過(guò)程中 間可以響應(yīng)中斷請(qǐng)求,但必須要等一個(gè)基本操作或一個(gè)等 待檢測(cè)周期完成后才能響應(yīng)中斷。 (5) 因?yàn)镹MI引腳上的中斷請(qǐng)求是需要立即處理的,所 以在進(jìn)入執(zhí)行任何中斷(包括內(nèi)部中斷)服務(wù)程序

53、之前, 都要安排測(cè)試NMI引腳上是否有中斷請(qǐng)求,以保證它實(shí)際 上有最高的優(yōu)先權(quán)。這時(shí)要為轉(zhuǎn)入執(zhí)行NMI中斷服務(wù)程序 而再次保護(hù)現(xiàn)場(chǎng)、斷點(diǎn),并執(zhí)行完NMI中斷服務(wù)程序后返 回到所中斷的服務(wù)程序,例如內(nèi)部中斷或INTR中斷的中斷 服務(wù)程序。 ,(6) 若此時(shí)無(wú)NMI中斷發(fā)生,則接著去查看暫存寄存 器TEMP的狀態(tài)。若TEMP=1,則在中斷前CPU已處于單步工 作方式,就和NMI一樣重新保護(hù)現(xiàn)場(chǎng)和斷點(diǎn),轉(zhuǎn)入單步中 斷服務(wù)程序。若TEMP=0,也就是在中斷前CPU處于非單步 工作方式,則這時(shí)CPU將轉(zhuǎn)去執(zhí)行最先引起中斷的中斷服 務(wù)程序。 (7) 中斷處理程序結(jié)束時(shí),由中斷返回指令將堆棧中 存放的IP、

54、CS以及PSW值還原給指令指針I(yè)P、代碼段寄存 器CS以及程序狀態(tài)字PSW。,當(dāng)多個(gè)中斷請(qǐng)求同時(shí)產(chǎn)生時(shí),8086 CPU將根據(jù)各中斷源優(yōu)先權(quán)的高低來(lái)處理,首先響優(yōu)先權(quán)較高的中斷請(qǐng)求,等具有較高優(yōu)先權(quán)的中斷請(qǐng)求處理完以后,再去依次響應(yīng)和處理其他中斷申請(qǐng)。 假定8086CPU處于開(kāi) 中斷(IF=1)及單步工作(TF=1)方式,其處理多個(gè)中斷請(qǐng)求的過(guò)程如圖6.23所示。,(二) 同時(shí)發(fā)生多個(gè)中斷的處理過(guò)程,圖中,假定8086在執(zhí)行除法指令的過(guò)程中采樣到有 一個(gè)INTR中斷請(qǐng)求產(chǎn)生,由于除法出錯(cuò)中斷是在執(zhí)行除 法指令時(shí)才可能產(chǎn)生的,并且除法出錯(cuò)中斷被看作是除 法指令的一部分,故INTR引腳上的中斷請(qǐng)求

55、要待除法指 令后的一條指令執(zhí)行完時(shí)才能得到響應(yīng)因此,如果有除 法出錯(cuò),則CPU首先響應(yīng)除法出錯(cuò)中斷,于是進(jìn)行現(xiàn)場(chǎng)保 護(hù),并且關(guān)中斷進(jìn)入除法出錯(cuò)處理程序。若在除法出錯(cuò) 處理程序中沒(méi)有用指令STI使CPU開(kāi)中斷,那么在整個(gè)除 法出錯(cuò)中斷處理過(guò)程中CPU 都不會(huì)響應(yīng)INTR引腳上的中 斷請(qǐng)求。,如前所述,CPU在響應(yīng)中斷、執(zhí)行保護(hù)現(xiàn)場(chǎng)與查中斷 向量表,得到中斷服務(wù)程序入口地址后和執(zhí)行中斷服務(wù)程 序之前,還要測(cè)試NMI引腳上有無(wú)中斷請(qǐng)求。此時(shí)若無(wú)NMI 中斷請(qǐng)求,就測(cè)試其是否處于單步工作方式。如果TF=1,即 在執(zhí)行除法出錯(cuò)中斷服務(wù)程序的第1條指令之前CPU接受了 單步中斷,則CPU就根據(jù)單步中斷服務(wù)

56、程序的具體安排,既 可使除法出錯(cuò)中斷服務(wù)程序在單步方式下工作,也可以使 之在正常情況下工作。待除法出錯(cuò)處理程序執(zhí)行后,恢復(fù) 現(xiàn)場(chǎng),開(kāi)中斷,返回原來(lái)被中斷的程序。若INTR引腳上的 中斷請(qǐng)求依然存在,則CPU在將IF置1并且又執(zhí)行完一條指 令以后,才響應(yīng)INTR引腳上的中斷請(qǐng)求。同樣,首先進(jìn)行現(xiàn) 場(chǎng)保護(hù),重復(fù)執(zhí)行上述過(guò)程。中斷處理完了后,恢復(fù)現(xiàn)場(chǎng), 返回到原來(lái)被中斷的程序。這樣就描述了在單步方式下對(duì) 同時(shí)產(chǎn)生除法出錯(cuò)中斷和INTR中斷進(jìn)行處理的全過(guò)程。,三、 中斷向量表, 中斷向量表也稱中斷入口地址表。該表說(shuō)明了中斷類型 號(hào) 和中斷服務(wù)程序的入口地址之間的聯(lián)系。中斷向量表放在存儲(chǔ) 單元地址的最低

57、部位00000H到003FFH之間,占有1K字節(jié)的存儲(chǔ) 空間。中斷向量表分成256組,每組由兩個(gè)字(即4個(gè)字節(jié))組 成一個(gè)雙字長(zhǎng)的指針。每個(gè)雙字指針指示一種中斷類型,所以 8086最多能識(shí)別256種不同類型的中斷.通過(guò)這張中斷向量表產(chǎn) 生出各個(gè)中斷服務(wù)程序的入口地址。在雙字長(zhǎng)指針的高地址中 存放的字是中斷服務(wù)程序入口地址所在的代碼段的16位段地址 (CS),低地址字是中斷服務(wù)程序入口地址相對(duì)于段起始地址 的偏移值(IP)。CPU通過(guò)CS和IP的值得到一個(gè)20位的地址,它 就是中斷服務(wù)程序的實(shí)際入口地址,其計(jì)算方法同求一個(gè)存儲(chǔ) 器單元實(shí)際地址的方法一樣,就是將16位的CS段地址左移4位, 然后加上IP值。,每個(gè)中斷向量具有一個(gè)相應(yīng)的中斷類型號(hào),由中斷類型號(hào) 確定在中斷向量表中的中斷向量。中斷類型號(hào)乘4,將給出中 斷向量表中的中斷向量入口第1字節(jié)的物理地址。例如,若中 斷類型號(hào)為8,它指出中斷向量表的第9個(gè)入口,則這個(gè)向量的 第1字節(jié)的地址為: 類型號(hào)8432=00100000B20H 若類型8中,安排的CS= 1000H,IP=0200H,則它們 形成的服務(wù)程序的入口地址

溫馨提示

  • 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)論