




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第第6 6章章 輸入輸出程序設(shè)計(jì)輸入輸出程序設(shè)計(jì)主編主編 郭顯久郭顯久大連海洋大學(xué)信息工程學(xué)院大連海洋大學(xué)信息工程學(xué)院2011年8月9日匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)教材配套課件教材配套課件 大連理工大學(xué)出版社大連理工大學(xué)出版社 輸入輸入/輸出概述輸出概述 程序直接控制程序直接控制輸入輸入/輸出方式輸出方式 中斷輸入中斷輸入/輸出方式輸出方式 DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用 BIOS中斷調(diào)用中斷調(diào)用提提 綱綱 6.1.1 CPU與外部設(shè)備與外部設(shè)備 由于外部設(shè)備種類繁多,工作原理各不相同,因此計(jì)算機(jī)與外部設(shè)備由于外部設(shè)備種類繁多,工作原理各不相同,因此計(jì)算機(jī)與外部設(shè)備進(jìn)行數(shù)據(jù)交換需要滿足兩
2、個(gè)條件,即:首先通過相應(yīng)的專門接口電路將計(jì)進(jìn)行數(shù)據(jù)交換需要滿足兩個(gè)條件,即:首先通過相應(yīng)的專門接口電路將計(jì)算機(jī)和其外部設(shè)備連接起來,接口實(shí)現(xiàn)對(duì)信號(hào)的控制與管理;其次是要有算機(jī)和其外部設(shè)備連接起來,接口實(shí)現(xiàn)對(duì)信號(hào)的控制與管理;其次是要有相應(yīng)的軟件來驅(qū)動(dòng)外部設(shè)備,使之能夠完成所要求的工作。圖相應(yīng)的軟件來驅(qū)動(dòng)外部設(shè)備,使之能夠完成所要求的工作。圖6.1為計(jì)算機(jī)為計(jì)算機(jī)與外部設(shè)備連接示意圖。與外部設(shè)備連接示意圖。6.1 6.1 輸入輸入/ /輸出概述輸出概述 在圖在圖中,計(jì)算機(jī)的外部設(shè)備都是通過中,計(jì)算機(jī)的外部設(shè)備都是通過I/O接口連接到系統(tǒng)上的,接口連接到系統(tǒng)上的,I/O接口接口包括數(shù)據(jù)、控制和狀態(tài)
3、三種不同性質(zhì)的信息,分別由相應(yīng)的寄存器存放。包括數(shù)據(jù)、控制和狀態(tài)三種不同性質(zhì)的信息,分別由相應(yīng)的寄存器存放。 1數(shù)據(jù)寄存器:用來存放外部設(shè)備與數(shù)據(jù)寄存器:用來存放外部設(shè)備與CPU之間傳送的數(shù)據(jù),這種寄存之間傳送的數(shù)據(jù),這種寄存器實(shí)際上起緩沖區(qū)的作用。不同的器實(shí)際上起緩沖區(qū)的作用。不同的I/O設(shè)備要求傳送的數(shù)據(jù)類型一般是不同設(shè)備要求傳送的數(shù)據(jù)類型一般是不同的,例如,向顯示器傳送數(shù)據(jù)必須是的,例如,向顯示器傳送數(shù)據(jù)必須是ASCII碼,而不能是二進(jìn)制形式的數(shù)。碼,而不能是二進(jìn)制形式的數(shù)。 2控制寄存器:控制寄存器:CPU給外設(shè)或接口的命令通過此寄存器進(jìn)行傳送,通過給外設(shè)或接口的命令通過此寄存器進(jìn)行傳
4、送,通過控制命令告訴外設(shè)或接口要做什么。例如:控制命令告訴外設(shè)或接口要做什么。例如:CPU向打印機(jī)接口發(fā)送啟動(dòng)或停向打印機(jī)接口發(fā)送啟動(dòng)或停止打印的命令來控制打印機(jī)。止打印的命令來控制打印機(jī)。 3狀態(tài)寄存器:用來存放外設(shè)或接口的當(dāng)前狀態(tài)信息,狀態(tài)寄存器:用來存放外設(shè)或接口的當(dāng)前狀態(tài)信息,CPU通過讀取該通過讀取該信息,可以實(shí)時(shí)了解外設(shè)或接口的工作情況。對(duì)于輸入設(shè)備,通常用準(zhǔn)備好信息,可以實(shí)時(shí)了解外設(shè)或接口的工作情況。對(duì)于輸入設(shè)備,通常用準(zhǔn)備好(READY)信號(hào)來表示外設(shè)已準(zhǔn)備好數(shù)據(jù),這時(shí)信號(hào)來表示外設(shè)已準(zhǔn)備好數(shù)據(jù),這時(shí)CPU可以從其讀入數(shù)據(jù)。對(duì)可以從其讀入數(shù)據(jù)。對(duì)于輸出設(shè)備,通常用忙于輸出設(shè)備,
5、通常用忙(BUSY)信號(hào)表示外設(shè)是否處于空閑狀態(tài),如處于空信號(hào)表示外設(shè)是否處于空閑狀態(tài),如處于空閑狀態(tài),則閑狀態(tài),則CPU可以向其發(fā)送數(shù)據(jù),否則可以向其發(fā)送數(shù)據(jù),否則CPU要等待。要等待。 這些寄存器都分配一個(gè)稱為這些寄存器都分配一個(gè)稱為I/O端口的地址編碼,端口的地址編碼,CPU和內(nèi)存就是通過和內(nèi)存就是通過這些端口和外部設(shè)備進(jìn)行通信的。在這些端口和外部設(shè)備進(jìn)行通信的。在8086微機(jī)中,微機(jī)中,I/O端口的編址在一個(gè)獨(dú)端口的編址在一個(gè)獨(dú)立的地址空間中,在這個(gè)立的地址空間中,在這個(gè)I/O空間中允許設(shè)置空間中允許設(shè)置64K個(gè)個(gè)8位或位或32K個(gè)個(gè)16位端口地位端口地址。表址。表6.1列出了部分列出
6、了部分I/O端口地址,對(duì)于不同型號(hào)的計(jì)算機(jī)及其接口,其端口地址,對(duì)于不同型號(hào)的計(jì)算機(jī)及其接口,其I/O端口的地址有時(shí)不完全相同。端口的地址有時(shí)不完全相同。 6.1 6.1 輸入輸入/ /輸出概述輸出概述 6.1.2 輸入輸入/輸出指令輸出指令 CPU尋址外部尋址外部I/O端口有兩種方式,一是存儲(chǔ)器尋址方式,在這種編址端口有兩種方式,一是存儲(chǔ)器尋址方式,在這種編址方式中,把方式中,把I/O端口作為存儲(chǔ)器的一個(gè)存儲(chǔ)單元,統(tǒng)一納入存儲(chǔ)器地址空間,端口作為存儲(chǔ)器的一個(gè)存儲(chǔ)單元,統(tǒng)一納入存儲(chǔ)器地址空間,為每一個(gè)端口分配一個(gè)存儲(chǔ)器地址,為每一個(gè)端口分配一個(gè)存儲(chǔ)器地址,CPU可以用訪問存儲(chǔ)器的方式來訪問可以
7、用訪問存儲(chǔ)器的方式來訪問I/O端口。這種編址方式的優(yōu)點(diǎn)是:不用專門設(shè)置訪問端口的指令,用于訪端口。這種編址方式的優(yōu)點(diǎn)是:不用專門設(shè)置訪問端口的指令,用于訪問存儲(chǔ)器的指令都可以用于訪問端口。缺點(diǎn)是:由于端口占用了存儲(chǔ)器的一問存儲(chǔ)器的指令都可以用于訪問端口。缺點(diǎn)是:由于端口占用了存儲(chǔ)器的一部分存儲(chǔ)空間,使得存儲(chǔ)器的實(shí)際存儲(chǔ)空間減少;程序部分存儲(chǔ)空間,使得存儲(chǔ)器的實(shí)際存儲(chǔ)空間減少;程序I/O操作不清晰,難操作不清晰,難以區(qū)分程序中的以區(qū)分程序中的I/O操作和存儲(chǔ)器操作;由于指令長度比專門的操作和存儲(chǔ)器操作;由于指令長度比專門的I/O指令長,指令長,因此執(zhí)行時(shí)間要長。在因此執(zhí)行時(shí)間要長。在MCS51、
8、MCS96等單片機(jī)系統(tǒng)中,多數(shù)采用這等單片機(jī)系統(tǒng)中,多數(shù)采用這種編址方法。種編址方法。6.1 6.1 輸入輸入/ /輸出概述輸出概述 1輸入指令輸入指令I(lǐng)N指令格式:指令格式:IN累加器,端口地址累加器,端口地址 IN指令是從指定端口讀取一個(gè)字節(jié)或字,傳送到指令是從指定端口讀取一個(gè)字節(jié)或字,傳送到AL或或AX中。端口尋址中。端口尋址可采用直接尋址或間接尋址兩種方式,當(dāng)采用直接尋址時(shí),端口地址是一個(gè)可采用直接尋址或間接尋址兩種方式,當(dāng)采用直接尋址時(shí),端口地址是一個(gè)8位立即數(shù),其范圍是位立即數(shù),其范圍是0255;當(dāng)采用間接尋址方式時(shí),端口地址必須存放;當(dāng)采用間接尋址方式時(shí),端口地址必須存放在在DX
9、寄存器中,其范圍是寄存器中,其范圍是065535。具體指令格式有以下四種:。具體指令格式有以下四種:INAL,PORT;AL(PORT)INAX,PORT;AX(PORT+1:PORT)INAL,DX;AL(DX)INAX,DX;AX(DX+1):(DX) 例例6.1 下面兩條指令將端口地址下面兩條指令將端口地址0028H和和0029H的內(nèi)容傳送到存存器的內(nèi)容傳送到存存器DATAW單元中。單元中。 INAX,28HMOVDATAW,AX 例例6.2 LPT1打印機(jī)狀態(tài)端口地址為打印機(jī)狀態(tài)端口地址為379H,試將其狀態(tài)信息讀入,試將其狀態(tài)信息讀入AL。MOVDX,379HIN AL,DX6.1
10、6.1 輸入輸入/ /輸出概述輸出概述 2輸出指令輸出指令OUT指令格式:指令格式:OUT端口地址,累加器端口地址,累加器 OUT指令將指令將AL(字節(jié)字節(jié))或或AX(字字)的內(nèi)容輸出到指定端口。端口尋址方的內(nèi)容輸出到指定端口。端口尋址方式與輸入指令相同,所以輸出指令也有以下四種格式:式與輸入指令相同,所以輸出指令也有以下四種格式:OUTPORT,AL;(PORT)(AL)OUTPORT,AX;(PORT+1:PORT)(AX)OUTDX, AL;(DX)(AL)OUTDX,AX;(DX+1:DX)(AX) 例例6.3 LPT1打印機(jī)控制端口地址為打印機(jī)控制端口地址為37AH,試向其寫入控制字
11、,試向其寫入控制字0CH。MOVDX,37AHMOVAL,0CHOUT DX,AL 需要注意的是:需要注意的是:I/O指令中使用的寄存器必須是指令中使用的寄存器必須是AL或或AX。端口尋址方。端口尋址方式中,間接尋址可以覆蓋直接尋址的地址范圍,但直接尋址范圍只能是式中,間接尋址可以覆蓋直接尋址的地址范圍,但直接尋址范圍只能是0255。I/O指令端口地址沒有使用分段尋址,因而端口地址范圍在指令端口地址沒有使用分段尋址,因而端口地址范圍在065535的的64KB之間。之間。6.1 6.1 輸入輸入/ /輸出概述輸出概述 程序直接控制輸入程序直接控制輸入/輸出方式又分為兩種,一是為直接方式,是指輸出
12、方式又分為兩種,一是為直接方式,是指CPU可可在任何時(shí)刻直接用在任何時(shí)刻直接用I/O指令與外部設(shè)備進(jìn)行數(shù)據(jù)交換。顯然,這種方式對(duì)外設(shè)指令與外部設(shè)備進(jìn)行數(shù)據(jù)交換。顯然,這種方式對(duì)外設(shè)有很高的要求,它必須能像內(nèi)存一樣時(shí)刻準(zhǔn)備著與有很高的要求,它必須能像內(nèi)存一樣時(shí)刻準(zhǔn)備著與CPU進(jìn)行數(shù)據(jù)傳遞,并且能進(jìn)行數(shù)據(jù)傳遞,并且能夠跟上夠跟上CPU的速度,保證傳送信息的正確性。另一種是查詢方式,有些外部設(shè)的速度,保證傳送信息的正確性。另一種是查詢方式,有些外部設(shè)備傳遞數(shù)據(jù)的速度比較慢,而備傳遞數(shù)據(jù)的速度比較慢,而CPU執(zhí)行指令的速度比它快很多,所以如果不考執(zhí)行指令的速度比它快很多,所以如果不考慮外設(shè)與慮外設(shè)與C
13、PU之間的速度匹配問題,就可能造成數(shù)據(jù)丟失。之間的速度匹配問題,就可能造成數(shù)據(jù)丟失。 6.2.1直接方式直接方式 直接輸入直接輸入/輸出方式的優(yōu)點(diǎn)是硬件電路簡單,程序編寫容易,調(diào)試方便等。輸出方式的優(yōu)點(diǎn)是硬件電路簡單,程序編寫容易,調(diào)試方便等。 例例6.4 有一數(shù)據(jù)采集系統(tǒng),所采集的參數(shù)有流量、壓力和溫度。參數(shù)都經(jīng)有一數(shù)據(jù)采集系統(tǒng),所采集的參數(shù)有流量、壓力和溫度。參數(shù)都經(jīng)過數(shù)字傳感器轉(zhuǎn)為數(shù)字量存入接口寄存器中,硬件連接如圖過數(shù)字傳感器轉(zhuǎn)為數(shù)字量存入接口寄存器中,硬件連接如圖6.2所示,試編程所示,試編程實(shí)現(xiàn)參數(shù)的采集,并將數(shù)據(jù)存入實(shí)現(xiàn)參數(shù)的采集,并將數(shù)據(jù)存入BUFFER單元中。單元中。 如圖所
14、示,設(shè)端口地址分別為如圖所示,設(shè)端口地址分別為30H、31H和和32H,端口尋址是通過地址譯,端口尋址是通過地址譯碼器選中和碼器選中和IO/M有效來選通相應(yīng)的端口地址。由于所采集的物理量變化緩慢,有效來選通相應(yīng)的端口地址。由于所采集的物理量變化緩慢,采集的時(shí)間不受限制,傳感器輸出始終處于準(zhǔn)備好的狀態(tài),因此可以直接訪問采集的時(shí)間不受限制,傳感器輸出始終處于準(zhǔn)備好的狀態(tài),因此可以直接訪問傳感器的端口來讀取參數(shù)。傳感器的端口來讀取參數(shù)。 6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 DATA SEGMENTBUFFERDB3 DUP(?);定義數(shù)據(jù)存儲(chǔ)區(qū);定義數(shù)據(jù)存儲(chǔ)區(qū)PORT1EQU
15、30H;定義端口地址常量;定義端口地址常量PORT2EQU31HPORT3EQU32HDATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXNEXT:LEABX,BUFFER;取數(shù)據(jù)存儲(chǔ)區(qū)有效地址;取數(shù)據(jù)存儲(chǔ)區(qū)有效地址INAL,PORT1;讀溫度數(shù)據(jù);讀溫度數(shù)據(jù)MOVBX,AL;存溫度數(shù)據(jù);存溫度數(shù)據(jù)CODEENDSEND START6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 INCBXINAL,PORT2;讀流量數(shù)據(jù);讀流量數(shù)據(jù)MOV BX,
16、AL;存流量數(shù)據(jù);存流量數(shù)據(jù)INCBXINAL,PORT3;讀壓力數(shù)據(jù);讀壓力數(shù)據(jù)MOV BX,AL;存壓力數(shù)據(jù);存壓力數(shù)據(jù)CALL TREAT;調(diào)用數(shù)據(jù)處理子程序;調(diào)用數(shù)據(jù)處理子程序JMPNEXTMAINENDPTREATPROCNEAR;數(shù)據(jù)處理子程序;數(shù)據(jù)處理子程序RETTREATENDPCODEENDSENDSTART6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 例例6.5 利用計(jì)算機(jī)利用計(jì)算機(jī)8253-5定時(shí)器聲源產(chǎn)生一發(fā)聲程序。該程序按照輸入定時(shí)器聲源產(chǎn)生一發(fā)聲程序。該程序按照輸入指定可發(fā)出一個(gè)或多個(gè)長音指定可發(fā)出一個(gè)或多個(gè)長音(每個(gè)長音為每個(gè)長音為3秒秒),以及一個(gè)
17、或多個(gè)短音,以及一個(gè)或多個(gè)短音(每個(gè)短每個(gè)短音為音為0.5秒秒)。每個(gè)發(fā)音之間的間歇為。每個(gè)發(fā)音之間的間歇為0.5秒。計(jì)算機(jī)發(fā)聲系統(tǒng)硬件原理框圖如秒。計(jì)算機(jī)發(fā)聲系統(tǒng)硬件原理框圖如圖圖6.3所示。所示。 該系統(tǒng)的發(fā)生原理是:該系統(tǒng)的發(fā)生原理是:8253-5定時(shí)器通道定時(shí)器通道2計(jì)數(shù)器的門控信號(hào)由計(jì)數(shù)器的門控信號(hào)由8255端口端口B的的D0位控制,通道位控制,通道2計(jì)數(shù)器的輸出信號(hào)能否驅(qū)動(dòng)揚(yáng)聲器,還取決于計(jì)數(shù)器的輸出信號(hào)能否驅(qū)動(dòng)揚(yáng)聲器,還取決于8255端端口口B的的D1位,當(dāng)位,當(dāng)D0D1=11時(shí)即將定時(shí)器與揚(yáng)聲器接通,可使揚(yáng)聲器發(fā)出聲音。時(shí)即將定時(shí)器與揚(yáng)聲器接通,可使揚(yáng)聲器發(fā)出聲音。 對(duì)對(duì)825
18、3-5定時(shí)器通道定時(shí)器通道2計(jì)數(shù)器的編程為方式計(jì)數(shù)器的編程為方式3,預(yù)置一固定的音調(diào)頻率,預(yù)置一固定的音調(diào)頻率(輸入一除數(shù)輸入一除數(shù)),當(dāng),當(dāng)D0=1時(shí),計(jì)數(shù)器開始計(jì)數(shù),通道時(shí),計(jì)數(shù)器開始計(jì)數(shù),通道2計(jì)數(shù)器可產(chǎn)生輸出信號(hào)。計(jì)數(shù)器可產(chǎn)生輸出信號(hào)。若置入計(jì)數(shù)初值為若置入計(jì)數(shù)初值為533H,則計(jì)數(shù)器可產(chǎn)生一方波頻率序列,其頻率等于,則計(jì)數(shù)器可產(chǎn)生一方波頻率序列,其頻率等于6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 1.1931816MHz/533H=896Hz。8253-5定時(shí)器通道定時(shí)器通道2計(jì)數(shù)器的端計(jì)數(shù)器的端口地址為口地址為42H,8253-5定時(shí)器控制字寄存器的端口地址為定時(shí)
19、器控制字寄存器的端口地址為43H。其控制字的格式及設(shè)置如下:其控制字的格式及設(shè)置如下: 6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 ;判斷長短音子程序;判斷長短音子程序(入口參數(shù):入口參數(shù):DH=發(fā)出長音個(gè)數(shù),發(fā)出長音個(gè)數(shù),DL=發(fā)出短音個(gè)數(shù)發(fā)出短音個(gè)數(shù))LSSOUNDPROCNEARPUSHF;保護(hù)標(biāo)志寄存器;保護(hù)標(biāo)志寄存器CLI;關(guān)中斷;關(guān)中斷ORDH,DH;判斷是否發(fā)長音;判斷是否發(fā)長音JZSHORT1LONG1:MOVBL,6;置長音計(jì)數(shù)器;置長音計(jì)數(shù)器CALL SOUND ;調(diào)發(fā)聲子程序;調(diào)發(fā)聲子程序LONG2:LOOP LONG2;發(fā)音之間的間歇;發(fā)音之間的間歇DE
20、CDH;繼續(xù)發(fā)長音嗎?;繼續(xù)發(fā)長音嗎?JNZLONG1SHORT1:MOVBL,1;置短音計(jì)數(shù)器;置短音計(jì)數(shù)器CALL SOUND ;調(diào)發(fā)聲子程序;調(diào)發(fā)聲子程序SHORT2:LOOP SHORT2;發(fā)音之間的間歇;發(fā)音之間的間歇DECDL;繼續(xù)發(fā)短音嗎?;繼續(xù)發(fā)短音嗎?JNZSHORT1DELAY1:LOOP DELAY1;發(fā)完音間歇;發(fā)完音間歇6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 DELAY2:LOOP DELAY2;返回前間歇;返回前間歇 POPF;恢復(fù)標(biāo)志寄存器;恢復(fù)標(biāo)志寄存器 RETLSSOUND ENDP發(fā)聲子程序發(fā)聲子程序(入口參數(shù):入口參數(shù):BL=發(fā)音時(shí)間,
21、單位:發(fā)音時(shí)間,單位:0.5秒秒)SOUNDPROC NEARMOVAL,10110110B ;通道;通道2方式字方式字OUT43H,AL;寫入控制字端口;寫入控制字端口MOVAX,533H;確定;確定896Hz除數(shù)除數(shù)OUT42H,AL;先送;先送LSBMOVAL,AHOUT42H,AL;再送;再送MSBINAL,61H;讀;讀8255端口端口BMOVAH,AL;保留原端口信息;保留原端口信息ORAL,03HOUT61H,AL;接通揚(yáng)聲器;接通揚(yáng)聲器SUBCX,CX;一次發(fā)聲;一次發(fā)聲0.5秒秒6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 6.2.2 6.2.2 查詢方式查詢方
22、式 對(duì)于工作速度較低的外部設(shè)備,當(dāng)對(duì)于工作速度較低的外部設(shè)備,當(dāng)CPUCPU要向其輸出數(shù)據(jù)時(shí),在輸出前要向其輸出數(shù)據(jù)時(shí),在輸出前必須要查詢外設(shè)是否處于接收數(shù)據(jù)的狀態(tài)。若處于接收狀態(tài),則必須要查詢外設(shè)是否處于接收數(shù)據(jù)的狀態(tài)。若處于接收狀態(tài),則CPUCPU可執(zhí)可執(zhí)行行OUTOUT指令,向外設(shè)輸出數(shù)據(jù),否則重新查詢,直到外設(shè)處于接收狀態(tài)為指令,向外設(shè)輸出數(shù)據(jù),否則重新查詢,直到外設(shè)處于接收狀態(tài)為止。同樣,當(dāng)止。同樣,當(dāng)CPUCPU要從外設(shè)讀入數(shù)據(jù)時(shí),在讀入前也必須查詢輸入設(shè)備是要從外設(shè)讀入數(shù)據(jù)時(shí),在讀入前也必須查詢輸入設(shè)備是否處于數(shù)據(jù)準(zhǔn)備好狀態(tài)。若數(shù)據(jù)準(zhǔn)備好,則否處于數(shù)據(jù)準(zhǔn)備好狀態(tài)。若數(shù)據(jù)準(zhǔn)備好,則
23、CPUCPU可執(zhí)行可執(zhí)行ININ指令,從外設(shè)讀指令,從外設(shè)讀入數(shù)據(jù),否則重新查詢,直到外設(shè)準(zhǔn)備好數(shù)據(jù)為止。需要注意的是:在外入數(shù)據(jù),否則重新查詢,直到外設(shè)準(zhǔn)備好數(shù)據(jù)為止。需要注意的是:在外設(shè)沒有準(zhǔn)備好之前,設(shè)沒有準(zhǔn)備好之前,CPUCPU始終處于查詢等待,不能做其它操作。如果外設(shè)始終處于查詢等待,不能做其它操作。如果外設(shè)可能由于故障等原因始終處于未準(zhǔn)備好狀態(tài),為防止長時(shí)間查詢而使可能由于故障等原因始終處于未準(zhǔn)備好狀態(tài),為防止長時(shí)間查詢而使CPUCPU處于無限循環(huán)等待狀態(tài),則在實(shí)際查詢輸入處于無限循環(huán)等待狀態(tài),則在實(shí)際查詢輸入/ /輸出程序中可以設(shè)定一個(gè)超輸出程序中可以設(shè)定一個(gè)超時(shí)參數(shù)。即在規(guī)定的
24、時(shí)間內(nèi),若外設(shè)沒有準(zhǔn)備好,則放棄此次數(shù)據(jù)的交換時(shí)參數(shù)。即在規(guī)定的時(shí)間內(nèi),若外設(shè)沒有準(zhǔn)備好,則放棄此次數(shù)據(jù)的交換過程。其一般查詢方式的流程圖如圖過程。其一般查詢方式的流程圖如圖6.46.4所示。所示。 6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 例例6.6 控制打印機(jī)以查詢方式工作,打印一個(gè)字符串,共打印控制打印機(jī)以查詢方式工作,打印一個(gè)字符串,共打印10行,行,在打印過程中要進(jìn)行超時(shí)檢查,若超時(shí),則在顯示器上輸出在打印過程中要進(jìn)行超時(shí)檢查,若超時(shí),則在顯示器上輸出“Printer Error”。打印字符串如下:。打印字符串如下: “Print a character strin
25、g” 打印機(jī)是一種可以按查詢方式工作的輸出外設(shè),它與主機(jī)連接的接口打印機(jī)是一種可以按查詢方式工作的輸出外設(shè),它與主機(jī)連接的接口部件是打印機(jī)適配器,也就是平常所說的部件是打印機(jī)適配器,也就是平常所說的“標(biāo)準(zhǔn)并行接口標(biāo)準(zhǔn)并行接口”。打印機(jī)接口。打印機(jī)接口中包含數(shù)據(jù)寄存器、狀態(tài)寄存器和控制寄存器,它們各自占據(jù)一個(gè)外設(shè)端中包含數(shù)據(jù)寄存器、狀態(tài)寄存器和控制寄存器,它們各自占據(jù)一個(gè)外設(shè)端口號(hào)碼,分別是:數(shù)據(jù)寄存器口號(hào)碼,分別是:數(shù)據(jù)寄存器378H,狀態(tài)寄存器,狀態(tài)寄存器379H,控制寄存,控制寄存器器37AH。打印機(jī)接口的狀態(tài)寄存器和控制寄存器各位的定義如下:。打印機(jī)接口的狀態(tài)寄存器和控制寄存器各位的定義
26、如下:打印機(jī)狀態(tài)寄存器:打印機(jī)狀態(tài)寄存器:6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 在本例中,為實(shí)現(xiàn)超時(shí)檢查,使用狀態(tài)寄存器的在本例中,為實(shí)現(xiàn)超時(shí)檢查,使用狀態(tài)寄存器的D0位作為位作為超時(shí)標(biāo)志,超時(shí)判斷的方法是設(shè)定一個(gè)查詢打印機(jī)超時(shí)標(biāo)志,超時(shí)判斷的方法是設(shè)定一個(gè)查詢打印機(jī)“忙閑忙閑”位位的次數(shù),如果在這個(gè)數(shù)內(nèi),打印機(jī)始終處于的次數(shù),如果在這個(gè)數(shù)內(nèi),打印機(jī)始終處于“忙忙”狀態(tài),則斷狀態(tài),則斷定為超時(shí)錯(cuò)誤。該例流程圖如圖定為超時(shí)錯(cuò)誤。該例流程圖如圖6.5所示。所示。 6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出
27、方式 源程序如下:源程序如下:DATASEGMENTPRINTDB Print a character string ,0DH,0AHRRORDBPrinter Error,0DH,0AH,$DATA ENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOVDS,AX MOV DX,37AH;打印機(jī)初始化程序;打印機(jī)初始化程序 MOV AL,08H;打印機(jī)聯(lián)機(jī);打印機(jī)聯(lián)機(jī) OUT DX,AL MOV CX,1000;維持初始化信號(hào)一段時(shí)間;維持初始化信號(hào)一段時(shí)間INIT: LOOP INIT MOV AL,0CH O
28、UT DX,AL ;結(jié)束初始化,保持聯(lián)機(jī);結(jié)束初始化,保持聯(lián)機(jī) MOVCX,10 ;打?。淮蛴?0行行6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 AGAIN:LEA BX,PRINT ;取待打印字符串首址;取待打印字符串首址NEXT: MOV DX,379H;取打印機(jī)狀態(tài)寄存器地址;取打印機(jī)狀態(tài)寄存器地址MOVSI,0FFFFH;設(shè)置查詢次數(shù);設(shè)置查詢次數(shù) WAIT: IN AL,DX;讀入打印機(jī)狀態(tài)寄存器;讀入打印機(jī)狀態(tài)寄存器 TEST AL,80H JNZ PRINTING ;打印機(jī)空閑,轉(zhuǎn)去送數(shù)據(jù);打印機(jī)空閑,轉(zhuǎn)去送數(shù)據(jù)DECSI;查詢次數(shù)減;查詢次數(shù)減1JNZWAITJ
29、MPPERROR;超時(shí),輸出打印機(jī)出錯(cuò);超時(shí),輸出打印機(jī)出錯(cuò)PRINTING:DECDX ;取數(shù)據(jù)端口號(hào);取數(shù)據(jù)端口號(hào) MOVAL,BX;取待打印字符;取待打印字符 OUTDX,AL ;送字符到數(shù)據(jù)端口暫存;送字符到數(shù)據(jù)端口暫存 MOVDX,37AH;選通打印機(jī);選通打印機(jī)MOV AL,0DHOUT DX,AL ;置;置STB信號(hào)為信號(hào)為1 DEC AL6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 OUT DX,AL ;置;置STB信號(hào)為信號(hào)為0 CMP BX,0AH;判斷一行結(jié)束否?;判斷一行結(jié)束否? JZ NEWLINE;結(jié)束,轉(zhuǎn)打印新一行;結(jié)束,轉(zhuǎn)打印新一行 INC BX;
30、修改字符串地址指針;修改字符串地址指針 JMP NEXTNEWLINE:LOOP AGAINJMPEXITPRERROR:LEADX,ERROR;顯示打印機(jī)出錯(cuò)信息;顯示打印機(jī)出錯(cuò)信息MOVAH,09HINT21HEXIT:MOV AX,4C00H;返回操作系統(tǒng);返回操作系統(tǒng) INT 21HCODE ENDS END START6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 例例6.7 CPU要從三個(gè)設(shè)備輪流輸入數(shù)據(jù),設(shè)要從三個(gè)設(shè)備輪流輸入數(shù)據(jù),設(shè)PROC1、PROC2和和PROC3分別為設(shè)備分別為設(shè)備1、設(shè)備、設(shè)備2和設(shè)備和設(shè)備3的數(shù)據(jù)輸入子程序;設(shè)三個(gè)設(shè)備的狀的數(shù)據(jù)輸入子程序;
31、設(shè)三個(gè)設(shè)備的狀態(tài)寄存器的端口地址分別用態(tài)寄存器的端口地址分別用STAT1、STAT2和和STAT3表示,這三個(gè)狀態(tài)寄表示,這三個(gè)狀態(tài)寄存器的第存器的第5位是輸入準(zhǔn)備位,該位為位是輸入準(zhǔn)備位,該位為“1”表示數(shù)據(jù)準(zhǔn)備好。試編制表示數(shù)據(jù)準(zhǔn)備好。試編制CPU從從這三個(gè)設(shè)備輪流輸入數(shù)據(jù)的程序段。這三個(gè)設(shè)備輪流輸入數(shù)據(jù)的程序段。INPUT:INAL,STAT1;讀取設(shè)備;讀取設(shè)備1狀態(tài)信息狀態(tài)信息TESTAL,20H;檢測(cè)第;檢測(cè)第5位是否為位是否為1?JZDEV2;不為;不為1,轉(zhuǎn)設(shè)備,轉(zhuǎn)設(shè)備2CALLFAR PTR PROC1;讀入設(shè)備;讀入設(shè)備1的數(shù)據(jù)的數(shù)據(jù)DEV2:INAL,STAT2;讀取設(shè)備
32、;讀取設(shè)備2狀態(tài)信息狀態(tài)信息TESTAL,20H;檢測(cè)第;檢測(cè)第5位是否為位是否為1?JZDEV3;不為;不為1,轉(zhuǎn)設(shè)備,轉(zhuǎn)設(shè)備3CALLFAR PTR PROC2;讀入設(shè)備;讀入設(shè)備2的數(shù)據(jù)的數(shù)據(jù)DEV3:INAL,STAT3;讀取設(shè)備;讀取設(shè)備3狀態(tài)信息狀態(tài)信息TESTAL,20H;檢測(cè)第;檢測(cè)第5位是否為位是否為1?JZNO_INPUT;不為;不為1,轉(zhuǎn)不輸入,轉(zhuǎn)不輸入CALLFAR PTR PROC3;讀入設(shè)備;讀入設(shè)備3的數(shù)據(jù)的數(shù)據(jù)NO_INPUT:6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 查詢輸入查詢輸入/輸出方式的優(yōu)點(diǎn)是:可以用程序安排幾個(gè)輸入輸輸出方式的優(yōu)點(diǎn)是
33、:可以用程序安排幾個(gè)輸入輸出設(shè)備的先后次序,來設(shè)定設(shè)備的優(yōu)先級(jí),最先查詢的設(shè)備,出設(shè)備的先后次序,來設(shè)定設(shè)備的優(yōu)先級(jí),最先查詢的設(shè)備,其工作的優(yōu)先級(jí)最高;另外通過聯(lián)絡(luò)可以實(shí)現(xiàn)其工作的優(yōu)先級(jí)最高;另外通過聯(lián)絡(luò)可以實(shí)現(xiàn)CPU與外設(shè)間的與外設(shè)間的正確輸入輸出操作,從而使不同工作速度的外設(shè)可以和正確輸入輸出操作,從而使不同工作速度的外設(shè)可以和CPU協(xié)協(xié)調(diào)工作。但缺點(diǎn)是:為了知道外設(shè)的工作狀態(tài),要求調(diào)工作。但缺點(diǎn)是:為了知道外設(shè)的工作狀態(tài),要求CPU不斷不斷地查詢外設(shè)的狀態(tài),當(dāng)查詢到的狀態(tài)不是要求的狀態(tài)時(shí),地查詢外設(shè)的狀態(tài),當(dāng)查詢到的狀態(tài)不是要求的狀態(tài)時(shí),CPU則要等待再查詢,直到所需狀態(tài)的到來。在此期
34、間,則要等待再查詢,直到所需狀態(tài)的到來。在此期間,CPU不能不能進(jìn)行其它操作,白白浪費(fèi)了進(jìn)行其它操作,白白浪費(fèi)了CPU原本可以執(zhí)行大量指令的時(shí)間。原本可以執(zhí)行大量指令的時(shí)間。特別是當(dāng)外設(shè)輸入輸出速度較低時(shí)特別是當(dāng)外設(shè)輸入輸出速度較低時(shí)(如鍵盤、打印機(jī)等如鍵盤、打印機(jī)等),CPU用用于查詢的時(shí)間要比完成一次輸入輸出操作的時(shí)間長得多,從而于查詢的時(shí)間要比完成一次輸入輸出操作的時(shí)間長得多,從而造成了造成了CPU的極大浪費(fèi)。為解決這個(gè)問題,可采用下節(jié)介紹的的極大浪費(fèi)。為解決這個(gè)問題,可采用下節(jié)介紹的中斷輸入中斷輸入/輸出方式。輸出方式。6.2 程序直接控制輸入程序直接控制輸入/輸出方式輸出方式 中斷輸
35、入中斷輸入/輸出方式就是為了提高輸出方式就是為了提高CPU的工作效率而引入的工作效率而引入的,其基本思想是當(dāng)?shù)?,其基本思想是?dāng)CPU需要輸入輸出數(shù)據(jù)時(shí),先執(zhí)行啟動(dòng)需要輸入輸出數(shù)據(jù)時(shí),先執(zhí)行啟動(dòng)外設(shè)工作的指令,然后外設(shè)工作的指令,然后CPU就繼續(xù)執(zhí)行原程序。如果是輸入就繼續(xù)執(zhí)行原程序。如果是輸入操作,當(dāng)輸入數(shù)據(jù)已存到外設(shè)接口的輸入寄存器時(shí),或輸出操作,當(dāng)輸入數(shù)據(jù)已存到外設(shè)接口的輸入寄存器時(shí),或輸出操作,當(dāng)外設(shè)接口輸出寄存器已空閑時(shí),就由外設(shè)向操作,當(dāng)外設(shè)接口輸出寄存器已空閑時(shí),就由外設(shè)向CPU發(fā)發(fā)出中斷請(qǐng)求。出中斷請(qǐng)求。CPU收到外設(shè)中斷請(qǐng)求后,就暫停原來正在執(zhí)收到外設(shè)中斷請(qǐng)求后,就暫停原來正在
36、執(zhí)行的程序行的程序(即實(shí)現(xiàn)中斷即實(shí)現(xiàn)中斷),轉(zhuǎn)去執(zhí)行輸入,轉(zhuǎn)去執(zhí)行輸入(或輸出或輸出)處理程序處理程序(即中即中斷處理程序斷處理程序)。在完成所需要的輸入。在完成所需要的輸入(或輸出或輸出)處理操作后,就處理操作后,就返回原程序從被中斷處接續(xù)執(zhí)行。這種輸入返回原程序從被中斷處接續(xù)執(zhí)行。這種輸入/輸出方式不是輸出方式不是CPU去查詢外設(shè)的狀態(tài),而是當(dāng)外設(shè)完成一次輸入去查詢外設(shè)的狀態(tài),而是當(dāng)外設(shè)完成一次輸入(或輸出或輸出)操操作后,主動(dòng)向作后,主動(dòng)向CPU發(fā)出中斷請(qǐng)求,請(qǐng)求發(fā)出中斷請(qǐng)求,請(qǐng)求CPU為它服務(wù)。這樣為它服務(wù)。這樣就把外設(shè)忙期間的時(shí)間讓給就把外設(shè)忙期間的時(shí)間讓給CPU去做其它工作,因此極
37、大地去做其它工作,因此極大地提高了提高了CPU的工作效率。這種方式還允許的工作效率。這種方式還允許CPU同時(shí)啟動(dòng)多個(gè)同時(shí)啟動(dòng)多個(gè)外設(shè),即允許外設(shè),即允許CPU與多個(gè)外設(shè)同時(shí)工作。與多個(gè)外設(shè)同時(shí)工作。6.3 中斷輸入中斷輸入/輸出方式輸出方式 6.3.1 8086中斷系統(tǒng)概述中斷系統(tǒng)概述 中斷控制是現(xiàn)代計(jì)算機(jī)發(fā)展中的一種重要技術(shù),它的出現(xiàn)原是為克服對(duì)外中斷控制是現(xiàn)代計(jì)算機(jī)發(fā)展中的一種重要技術(shù),它的出現(xiàn)原是為克服對(duì)外設(shè)設(shè)I/O接口采用程序查詢方式所帶來的接口采用程序查詢方式所帶來的CPU低效率的弊端,故最初的中斷一律低效率的弊端,故最初的中斷一律是對(duì)外設(shè)而言的,稱之為外中斷是對(duì)外設(shè)而言的,稱之為外
38、中斷(即硬件中斷即硬件中斷)。但隨著計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的不斷。但隨著計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的不斷復(fù)雜及應(yīng)用技術(shù)日益提高,中斷的使用范圍也隨之?dāng)U大,出現(xiàn)了另外兩種中復(fù)雜及應(yīng)用技術(shù)日益提高,中斷的使用范圍也隨之?dāng)U大,出現(xiàn)了另外兩種中斷類型:內(nèi)中斷和軟中斷,這就構(gòu)成了一個(gè)完整的計(jì)算機(jī)中斷系統(tǒng)。斷類型:內(nèi)中斷和軟中斷,這就構(gòu)成了一個(gè)完整的計(jì)算機(jī)中斷系統(tǒng)。1中斷源類型中斷源類型 所謂中斷是一種使所謂中斷是一種使CPU中止正在執(zhí)行的程序而轉(zhuǎn)去處理特殊事件的操作。中止正在執(zhí)行的程序而轉(zhuǎn)去處理特殊事件的操作。這些引起中斷的事件稱之為中斷源。中斷源可以來自于外部設(shè)備這些引起中斷的事件稱之為中斷源。中斷源可以來自于外部設(shè)備(
39、如輸入如輸入/輸出輸出請(qǐng)求請(qǐng)求)稱為外中斷。也可以來自于內(nèi)部硬件出錯(cuò)稱為外中斷。也可以來自于內(nèi)部硬件出錯(cuò)(如內(nèi)存奇偶校驗(yàn)錯(cuò)、協(xié)處如內(nèi)存奇偶校驗(yàn)錯(cuò)、協(xié)處理器異常等理器異常等);或者為處理器遇到某些特殊事件;或者為處理器遇到某些特殊事件(如如INT N指令、除數(shù)零、運(yùn)算指令、除數(shù)零、運(yùn)算溢出或單步執(zhí)行等溢出或單步執(zhí)行等)引起的,通常前者中斷源引發(fā)的中斷稱之為不可屏蔽中斷引起的,通常前者中斷源引發(fā)的中斷稱之為不可屏蔽中斷(NMI);后者中斷源引發(fā)的中斷稱為軟中斷,為區(qū)別外中斷,這里統(tǒng)稱為內(nèi)中;后者中斷源引發(fā)的中斷稱為軟中斷,為區(qū)別外中斷,這里統(tǒng)稱為內(nèi)中斷。斷。8086CPU共支持共支持256個(gè)中斷,
40、個(gè)中斷,CPU為識(shí)別每一種中斷源,將它們從為識(shí)別每一種中斷源,將它們從0到到255編號(hào),賦以一個(gè)中斷類型號(hào)編號(hào),賦以一個(gè)中斷類型號(hào)N,簡稱為中斷類型。,簡稱為中斷類型。8086CPU的中斷源如圖的中斷源如圖6.6所示,圖中引線旁標(biāo)示的是系統(tǒng)分配的中斷類型號(hào)。所示,圖中引線旁標(biāo)示的是系統(tǒng)分配的中斷類型號(hào)。6.3 中斷輸入中斷輸入/輸出方式輸出方式 1)不可屏蔽中斷()不可屏蔽中斷(NMI) 不可屏蔽中斷是通過不可屏蔽中斷是通過NMI信號(hào)端信號(hào)端(中斷類型號(hào)為中斷類型號(hào)為2)向向CPU發(fā)出中斷請(qǐng)求發(fā)出中斷請(qǐng)求的,該請(qǐng)求不受中斷標(biāo)志位的,該請(qǐng)求不受中斷標(biāo)志位IF的影響,所以該中斷主要用于一些緊急的事
41、的影響,所以該中斷主要用于一些緊急的事件或故障處理。比如:存儲(chǔ)器的奇偶效驗(yàn)檢測(cè)或電源故障等。件或故障處理。比如:存儲(chǔ)器的奇偶效驗(yàn)檢測(cè)或電源故障等。 2)可屏蔽中斷)可屏蔽中斷 可屏蔽中斷是外部中斷,是通過可屏蔽中斷是外部中斷,是通過INTR信號(hào)端向信號(hào)端向CPU發(fā)出中斷請(qǐng)求的,發(fā)出中斷請(qǐng)求的,該請(qǐng)求受中斷標(biāo)志位該請(qǐng)求受中斷標(biāo)志位IF的影響。當(dāng)?shù)挠绊?。?dāng)IF設(shè)置為設(shè)置為1時(shí),時(shí),CPU便可接受外部中斷請(qǐng)便可接受外部中斷請(qǐng)求,此時(shí)稱為開中斷;當(dāng)求,此時(shí)稱為開中斷;當(dāng)IF清為清為0時(shí),時(shí),CPU不接受外部中斷請(qǐng)求,此時(shí)稱為不接受外部中斷請(qǐng)求,此時(shí)稱為關(guān)中斷。關(guān)中斷。 由圖可以看出,外部中斷是通過由圖
42、可以看出,外部中斷是通過8259A可編程中斷控制器控制,可使可編程中斷控制器控制,可使8個(gè)外部中斷源通過個(gè)外部中斷源通過INTR向向CPU發(fā)出中斷請(qǐng)求。標(biāo)志寄存器中的發(fā)出中斷請(qǐng)求。標(biāo)志寄存器中的IF位只是控位只是控制是否允許制是否允許CPU響應(yīng)外部中斷,而不控制外部中斷源是否可以向響應(yīng)外部中斷,而不控制外部中斷源是否可以向CPU發(fā)出發(fā)出中斷請(qǐng)求。這個(gè)功能可由中斷請(qǐng)求。這個(gè)功能可由8259A的的 8位中斷屏蔽寄存器來實(shí)現(xiàn),它的端口地位中斷屏蔽寄存器來實(shí)現(xiàn),它的端口地址為址為21H,用來控制,用來控制8個(gè)外部中斷源是否允許向個(gè)外部中斷源是否允許向CPU申請(qǐng)中斷,屏蔽寄存器申請(qǐng)中斷,屏蔽寄存器如圖如
43、圖6.7所示。當(dāng)某位為所示。當(dāng)某位為0時(shí),允許外部設(shè)備中斷;當(dāng)為時(shí),允許外部設(shè)備中斷;當(dāng)為1時(shí),禁止時(shí),禁止(屏蔽屏蔽)外部外部設(shè)備的中斷。因此,某個(gè)外設(shè)要想實(shí)現(xiàn)設(shè)備的中斷。因此,某個(gè)外設(shè)要想實(shí)現(xiàn)CPU響應(yīng)其中斷請(qǐng)求,必須滿足響應(yīng)其中斷請(qǐng)求,必須滿足IF=1和相應(yīng)位為和相應(yīng)位為0這兩個(gè)條件。這兩個(gè)條件。6.3 中斷輸入中斷輸入/輸出方式輸出方式 例如:允許鍵盤中斷,可用下列指令實(shí)現(xiàn):例如:允許鍵盤中斷,可用下列指令實(shí)現(xiàn):STI;開中斷;開中斷INAL,21H ;讀取中斷屏蔽寄存器;讀取中斷屏蔽寄存器ANDAL,11111101B;鍵盤中斷允許位置;鍵盤中斷允許位置0OUT21H,AL;寫入中斷
44、屏蔽寄存器;寫入中斷屏蔽寄存器 3)內(nèi)中斷)內(nèi)中斷 內(nèi)中斷不受中斷標(biāo)志位的影響,一旦出現(xiàn)這種中斷,內(nèi)中斷不受中斷標(biāo)志位的影響,一旦出現(xiàn)這種中斷,CPU就響應(yīng)這一中斷并執(zhí)行相應(yīng)處理程序。就響應(yīng)這一中斷并執(zhí)行相應(yīng)處理程序。 (1)INT指令引起的內(nèi)中斷指令引起的內(nèi)中斷 當(dāng)當(dāng)CPU執(zhí)行完一條執(zhí)行完一條INT N指令后,立即產(chǎn)生中斷并調(diào)用系統(tǒng)指令后,立即產(chǎn)生中斷并調(diào)用系統(tǒng)中相應(yīng)的中斷處理程序來完成中斷功能。中相應(yīng)的中斷處理程序來完成中斷功能。N為中斷類型號(hào),系統(tǒng)為中斷類型號(hào),系統(tǒng)可提供可提供256個(gè)中斷類型號(hào),除系統(tǒng)占用的類型號(hào)以外,用戶可以個(gè)中斷類型號(hào),除系統(tǒng)占用的類型號(hào)以外,用戶可以利用保留的類型
45、號(hào)來擴(kuò)充新的中斷處理功能。利用保留的類型號(hào)來擴(kuò)充新的中斷處理功能。6.3 中斷輸入中斷輸入/輸出方式輸出方式 (2)INTO中斷中斷 該中斷為溢出中斷,其類型號(hào)為該中斷為溢出中斷,其類型號(hào)為4,當(dāng)程序執(zhí)行過程中,遇到,當(dāng)程序執(zhí)行過程中,遇到INTO指指令時(shí),且此時(shí)溢出標(biāo)志令時(shí),且此時(shí)溢出標(biāo)志OF=1,則產(chǎn)生中斷并轉(zhuǎn)入溢出中斷處理程序。該,則產(chǎn)生中斷并轉(zhuǎn)入溢出中斷處理程序。該處理程序只是給出一個(gè)出錯(cuò)信息,在處理程序結(jié)束時(shí),不返回原程序而返處理程序只是給出一個(gè)出錯(cuò)信息,在處理程序結(jié)束時(shí),不返回原程序而返回系統(tǒng)。若遇到回系統(tǒng)。若遇到INTO指令,但此時(shí)指令,但此時(shí)OF=0,則,則CPU繼續(xù)執(zhí)行原程序
46、。例如繼續(xù)執(zhí)行原程序。例如下面的指令用來測(cè)試加法的溢出:下面的指令用來測(cè)試加法的溢出:ADDAX,VALUEINTO ()除法錯(cuò)誤中斷()除法錯(cuò)誤中斷 該中斷的類型號(hào)為,當(dāng)除數(shù)為零或商超過了寄存器所能表達(dá)的范圍該中斷的類型號(hào)為,當(dāng)除數(shù)為零或商超過了寄存器所能表達(dá)的范圍時(shí),則時(shí),則CPU自動(dòng)產(chǎn)生自動(dòng)產(chǎn)生0號(hào)中斷,并給出該中斷的入口地址。用戶可編寫相號(hào)中斷,并給出該中斷的入口地址。用戶可編寫相應(yīng)的中斷處理程序,以解決除法溢出問題。應(yīng)的中斷處理程序,以解決除法溢出問題。(4)單步中斷)單步中斷 當(dāng)把單步標(biāo)志位當(dāng)把單步標(biāo)志位TF置為置為1時(shí),則在每執(zhí)行完一條指令后,時(shí),則在每執(zhí)行完一條指令后,CPU自
47、動(dòng)產(chǎn)自動(dòng)產(chǎn)生類型號(hào)為生類型號(hào)為1的中斷的中斷單步中斷。在中斷處理程序的控制下,給出有關(guān)寄單步中斷。在中斷處理程序的控制下,給出有關(guān)寄存器的內(nèi)容和各狀態(tài)標(biāo)志位的狀態(tài)。使用單步中斷可以一條指令一條指令存器的內(nèi)容和各狀態(tài)標(biāo)志位的狀態(tài)。使用單步中斷可以一條指令一條指令地跟蹤程序的運(yùn)行,這在調(diào)試程序時(shí)非常有用。地跟蹤程序的運(yùn)行,這在調(diào)試程序時(shí)非常有用。6.3 中斷輸入中斷輸入/輸出方式輸出方式 2中斷優(yōu)先級(jí)中斷優(yōu)先級(jí)1)中斷優(yōu)先級(jí))中斷優(yōu)先級(jí) 在外中斷、內(nèi)中斷中有多個(gè)中斷源,為解決同時(shí)有多個(gè)中斷源向在外中斷、內(nèi)中斷中有多個(gè)中斷源,為解決同時(shí)有多個(gè)中斷源向CPU發(fā)出中斷請(qǐng)求時(shí)的響應(yīng)問題,發(fā)出中斷請(qǐng)求時(shí)的響
48、應(yīng)問題,CPU規(guī)定了中斷源的優(yōu)先級(jí),中斷源的優(yōu)先規(guī)定了中斷源的優(yōu)先級(jí),中斷源的優(yōu)先順序?yàn)椋喉樞驗(yàn)椋?除法錯(cuò)誤除法錯(cuò)誤INTOINT NNMIINTR單步中斷。單步中斷。 其中:在其中:在INTR(可屏蔽中斷可屏蔽中斷)中,有中,有8個(gè)中斷源,分別命名為個(gè)中斷源,分別命名為IRQ0IRQ7,系統(tǒng)默認(rèn),系統(tǒng)默認(rèn)IRQ0優(yōu)先級(jí)最高,以后依次降低,優(yōu)先級(jí)最高,以后依次降低,IRQ7最低。由于這最低。由于這8個(gè)中斷源受個(gè)中斷源受8259A可編程中斷控制器控制,因此可編程中斷控制器控制,因此IRQ0IRQ7可由可由8259A中中斷命令寄存器改變它們的優(yōu)先級(jí)。斷命令寄存器改變它們的優(yōu)先級(jí)。 當(dāng)有多個(gè)中斷源同
49、時(shí)發(fā)出中斷申請(qǐng)時(shí),當(dāng)有多個(gè)中斷源同時(shí)發(fā)出中斷申請(qǐng)時(shí),CPU將根據(jù)上述規(guī)定的優(yōu)先次將根據(jù)上述規(guī)定的優(yōu)先次序,首先響應(yīng)優(yōu)先級(jí)最高的中斷請(qǐng)求,在完成該中斷處理程序后,再響應(yīng)序,首先響應(yīng)優(yōu)先級(jí)最高的中斷請(qǐng)求,在完成該中斷處理程序后,再響應(yīng)次高優(yōu)先級(jí)的中斷請(qǐng)求。以優(yōu)先級(jí)順序逐個(gè)處理各中斷源的中斷請(qǐng)求。次高優(yōu)先級(jí)的中斷請(qǐng)求。以優(yōu)先級(jí)順序逐個(gè)處理各中斷源的中斷請(qǐng)求。6.3 中斷輸入中斷輸入/輸出方式輸出方式 2)8259A中斷命令寄存器中斷命令寄存器8259A中斷命令寄存器的端口地址為中斷命令寄存器的端口地址為20H,各位如圖,各位如圖6.8所示。所示。 例如:例如:IRQ0IRQ7為正常優(yōu)先級(jí)順序,現(xiàn)要求
50、為正常優(yōu)先級(jí)順序,現(xiàn)要求IR4為最低級(jí)中斷請(qǐng)求,則為最低級(jí)中斷請(qǐng)求,則向中斷命令寄存器發(fā)送如下命令:向中斷命令寄存器發(fā)送如下命令:MOVAL,11100100BOUT20H,AL命令執(zhí)行完后,優(yōu)先級(jí)的順序?yàn)椋好顖?zhí)行完后,優(yōu)先級(jí)的順序?yàn)椋篒RQ5,IRQ6,IRQ7,IRQ0,IRQ1,IRQ2,IRQ3,IRQ46.3 中斷輸入中斷輸入/輸出方式輸出方式 (3)EOI:中斷結(jié)束位,當(dāng):中斷結(jié)束位,當(dāng)EOI=1時(shí),當(dāng)前正在處理的中斷請(qǐng)求被清除。所時(shí),當(dāng)前正在處理的中斷請(qǐng)求被清除。所 以在每個(gè)中斷處理程序結(jié)束時(shí),必須把中斷結(jié)束位置以在每個(gè)中斷處理程序結(jié)束時(shí),必須把中斷結(jié)束位置1,這表明該中斷處理
51、,這表明該中斷處理程序結(jié)束,并允許該中斷源重新發(fā)出中斷請(qǐng)求。否則,該中斷源不能再發(fā)出程序結(jié)束,并允許該中斷源重新發(fā)出中斷請(qǐng)求。否則,該中斷源不能再發(fā)出中斷請(qǐng)求,同時(shí)也會(huì)屏蔽掉對(duì)以后同級(jí)或低級(jí)中斷的處理。當(dāng)然在必要時(shí)候,中斷請(qǐng)求,同時(shí)也會(huì)屏蔽掉對(duì)以后同級(jí)或低級(jí)中斷的處理。當(dāng)然在必要時(shí)候,在中斷處理程序中也可利用在中斷處理程序中也可利用EOI位清除當(dāng)前的中斷請(qǐng)求,使得在中斷處理的位清除當(dāng)前的中斷請(qǐng)求,使得在中斷處理的過程中又能響應(yīng)同級(jí)或低級(jí)中斷請(qǐng)求。清除硬件中斷用如下命令:過程中又能響應(yīng)同級(jí)或低級(jí)中斷請(qǐng)求。清除硬件中斷用如下命令:INAL,20HORAL,00100000BOUT20H,AL3)中
52、斷嵌套)中斷嵌套 所謂中斷嵌套是指計(jì)算機(jī)正在執(zhí)行一個(gè)中斷處理程序時(shí),有另一個(gè)優(yōu)先所謂中斷嵌套是指計(jì)算機(jī)正在執(zhí)行一個(gè)中斷處理程序時(shí),有另一個(gè)優(yōu)先級(jí)更高的中斷源提出中斷請(qǐng)求,這時(shí)計(jì)算機(jī)會(huì)暫時(shí)終止當(dāng)前正在執(zhí)行的級(jí)別級(jí)更高的中斷源提出中斷請(qǐng)求,這時(shí)計(jì)算機(jī)會(huì)暫時(shí)終止當(dāng)前正在執(zhí)行的級(jí)別較低的中斷源的中斷處理程序,轉(zhuǎn)去處理高優(yōu)先級(jí)的中斷處理程序,待處理較低的中斷源的中斷處理程序,轉(zhuǎn)去處理高優(yōu)先級(jí)的中斷處理程序,待處理完畢后,再返回到被中斷了的中斷處理程序繼續(xù)執(zhí)行的過程。完畢后,再返回到被中斷了的中斷處理程序繼續(xù)執(zhí)行的過程。6.3 中斷輸入中斷輸入/輸出方式輸出方式 80X86沒有規(guī)定中斷嵌套的層次,但在實(shí)際
53、使用時(shí),多重沒有規(guī)定中斷嵌套的層次,但在實(shí)際使用時(shí),多重的中斷嵌套要受到堆棧容量的限制,所以在編寫中斷程序時(shí),的中斷嵌套要受到堆棧容量的限制,所以在編寫中斷程序時(shí),一定要考慮有足夠的堆棧單元來保存多次中斷的斷點(diǎn)及各寄存一定要考慮有足夠的堆棧單元來保存多次中斷的斷點(diǎn)及各寄存器的內(nèi)容。器的內(nèi)容。 為實(shí)現(xiàn)中斷嵌套,需要注意的是:在每一個(gè)中斷處理程序?yàn)閷?shí)現(xiàn)中斷嵌套,需要注意的是:在每一個(gè)中斷處理程序的開始部分要用的開始部分要用STI指令將指令將IF位置位置1開中斷,這樣計(jì)算機(jī)在執(zhí)開中斷,這樣計(jì)算機(jī)在執(zhí)行該中斷處理程序過程中,可以響應(yīng)比該中斷源優(yōu)先級(jí)更高的行該中斷處理程序過程中,可以響應(yīng)比該中斷源優(yōu)先級(jí)
54、更高的中斷源的中斷請(qǐng)求。若在中斷處理程序中發(fā)出中斷結(jié)束命令,中斷源的中斷請(qǐng)求。若在中斷處理程序中發(fā)出中斷結(jié)束命令,即即EOI位置位置1,則計(jì)算機(jī)在執(zhí)行該中斷處理程序過程中,在發(fā)出,則計(jì)算機(jī)在執(zhí)行該中斷處理程序過程中,在發(fā)出中斷結(jié)束命令后,還可以響應(yīng)同級(jí)或低優(yōu)先級(jí)中斷源的中斷請(qǐng)中斷結(jié)束命令后,還可以響應(yīng)同級(jí)或低優(yōu)先級(jí)中斷源的中斷請(qǐng)求。求。6.3 中斷輸入中斷輸入/輸出方式輸出方式 例例6.8 在正常優(yōu)先級(jí)方式下,假設(shè)在主程序執(zhí)行過程中,在正常優(yōu)先級(jí)方式下,假設(shè)在主程序執(zhí)行過程中,IR2和和IR4同同時(shí)發(fā)出中斷請(qǐng)求,而后時(shí)發(fā)出中斷請(qǐng)求,而后IR1申請(qǐng)中斷,最后申請(qǐng)中斷,最后IR3的中斷請(qǐng)求也到達(dá)。
55、其中斷的中斷請(qǐng)求也到達(dá)。其中斷處理順序如下:處理順序如下: 由于由于IR2比比IR4中斷優(yōu)先級(jí)高,所以中斷優(yōu)先級(jí)高,所以CPU首先響應(yīng)首先響應(yīng)IR2,從主程序轉(zhuǎn),從主程序轉(zhuǎn)去處理去處理IR2的中斷處理程序。進(jìn)人的中斷處理程序。進(jìn)人IR2中斷處理程序后,立即將中斷處理程序后,立即將IF置為置為1。當(dāng)當(dāng)IR1的中斷請(qǐng)求到達(dá)后,因的中斷請(qǐng)求到達(dá)后,因IR1的優(yōu)先級(jí)高于的優(yōu)先級(jí)高于IR2,CPU就立即中止執(zhí)行就立即中止執(zhí)行IR2的程序,轉(zhuǎn)去執(zhí)行的程序,轉(zhuǎn)去執(zhí)行IR1的中斷處理程序。在的中斷處理程序。在IR1處理程序中,由指令發(fā)處理程序中,由指令發(fā)出了出了EOI命令,結(jié)束了命令,結(jié)束了IR1的中斷請(qǐng)求。
56、返回的中斷請(qǐng)求。返回IR2處理程序后,同樣由于發(fā)處理程序后,同樣由于發(fā)出出EOI命令清除了命令清除了IR2 的中斷請(qǐng)求,所以在較低優(yōu)先級(jí)的中斷請(qǐng)求的中斷請(qǐng)求,所以在較低優(yōu)先級(jí)的中斷請(qǐng)求IR4到達(dá)到達(dá)后,即轉(zhuǎn)向處理后,即轉(zhuǎn)向處理IR4的中斷請(qǐng)求。在的中斷請(qǐng)求。在IR4處理程序的執(zhí)行過程中,處理程序的執(zhí)行過程中,IR3的中的中斷請(qǐng)求到達(dá),當(dāng)判斷斷請(qǐng)求到達(dá),當(dāng)判斷 IF已被置為已被置為 1,則又中斷了,則又中斷了IR4的程序,轉(zhuǎn)去執(zhí)行的程序,轉(zhuǎn)去執(zhí)行IR3的中斷處理程序。在的中斷處理程序。在IR3程序中,也發(fā)出了開中斷指令程序中,也發(fā)出了開中斷指令(STI)和中斷結(jié)束命和中斷結(jié)束命令令(EOI),最
57、后,最后IRET指令使其返回到指令使其返回到IR4程序,程序,IR4的程序在返回的程序在返回IR2的程的程序之前也發(fā)出了序之前也發(fā)出了EOI命令,結(jié)束了命令,結(jié)束了IR4的中斷請(qǐng)求。的中斷請(qǐng)求。IR2中斷請(qǐng)求在前面已中斷請(qǐng)求在前面已被清除,所以被清除,所以IR4執(zhí)行完后,返回執(zhí)行完后,返回IR2繼續(xù)執(zhí)行直到返回主程序。各中斷處繼續(xù)執(zhí)行直到返回主程序。各中斷處理程序的執(zhí)行順序如圖理程序的執(zhí)行順序如圖6.9所示。所示。6.3 中斷輸入中斷輸入/輸出方式輸出方式 6.3.2中斷向量表中斷向量表1中斷向量表中斷向量表 在在8086中斷系統(tǒng)中,為每種中斷都安排了一個(gè)中斷類型號(hào)中斷系統(tǒng)中,為每種中斷都安排
58、了一個(gè)中斷類型號(hào)(類型類型號(hào)為號(hào)為00FFH),每種類型的中斷都有相應(yīng)的中斷處理程序,來,每種類型的中斷都有相應(yīng)的中斷處理程序,來完成中斷的任務(wù)。為了方便管理中斷處理程序,系統(tǒng)把所有的完成中斷的任務(wù)。為了方便管理中斷處理程序,系統(tǒng)把所有的中斷處理程序的入口地址都集中在一起,構(gòu)成一個(gè)中斷向量表。中斷處理程序的入口地址都集中在一起,構(gòu)成一個(gè)中斷向量表。每個(gè)入口地址占每個(gè)入口地址占4個(gè)字節(jié),高個(gè)字節(jié),高2個(gè)字節(jié)存放中斷處理程序的段基個(gè)字節(jié)存放中斷處理程序的段基址,低址,低2個(gè)宇節(jié)存放中斷處理程序的段內(nèi)偏移地址。各中斷處理個(gè)宇節(jié)存放中斷處理程序的段內(nèi)偏移地址。各中斷處理程序的入口地址是按中斷類型號(hào)的順
59、序存放在中斷向量表中,程序的入口地址是按中斷類型號(hào)的順序存放在中斷向量表中,因此每類中斷向量的地址可由中斷類型號(hào)乘以因此每類中斷向量的地址可由中斷類型號(hào)乘以4計(jì)算出來。例如:計(jì)算出來。例如:當(dāng)類型號(hào)當(dāng)類型號(hào)8中斷發(fā)生時(shí),則系統(tǒng)從中斷向量表地址中斷發(fā)生時(shí),則系統(tǒng)從中斷向量表地址48=0010H中中取得取得8號(hào)類型的中斷處理程序的入口地址,分別送入號(hào)類型的中斷處理程序的入口地址,分別送入IP和和CS寄存寄存器中,器中,CPU就可以轉(zhuǎn)入相應(yīng)的中斷處理程序。就可以轉(zhuǎn)入相應(yīng)的中斷處理程序。256個(gè)中斷處理程個(gè)中斷處理程序的入口地址共占用序的入口地址共占用1024個(gè)字節(jié)空間,位于存儲(chǔ)器個(gè)字節(jié)空間,位于存儲(chǔ)
60、器0000:0000H0000:03FFH地址空間,中斷向量表如圖地址空間,中斷向量表如圖6.10所示。所示。6.3 中斷輸入中斷輸入/輸出方式輸出方式 表表6.2列出了列出了80 x86各類型中斷在中斷向量表中的地址。各類型中斷在中斷向量表中的地址。2存取中斷向量存取中斷向量 我們知道,中斷向量表是用來存放中斷程序的入口地址的,當(dāng)某類型我們知道,中斷向量表是用來存放中斷程序的入口地址的,當(dāng)某類型中斷請(qǐng)求被中斷請(qǐng)求被CPU響應(yīng)后,響應(yīng)后,CPU就到中斷向量表中取得該類型中斷的中斷處就到中斷向量表中取得該類型中斷的中斷處理程序的入口地址,分別送入理程序的入口地址,分別送入IP和和CS寄存器中,即
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國FMS物流管理軟件數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國24針平推打印機(jī)數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025至2030年中國黑白藍(lán)底膠片市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國鋁合金分析儀器市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國輸送槽市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國結(jié)晶喂線機(jī)市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國礦泉水水處理設(shè)備市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國甲氧胺鹽酸鹽市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國混凝試驗(yàn)儀市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國水解蛋白酶市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 基于STM32迷宮機(jī)器人設(shè)計(jì)與實(shí)現(xiàn)
- DB65T 8020-2024 房屋建筑與市政基礎(chǔ)設(shè)施工程施工現(xiàn)場(chǎng)從業(yè)人員配備標(biāo)準(zhǔn)
- 山東省東營市廣饒縣2025屆五下數(shù)學(xué)期末統(tǒng)考試題含答案
- 某咨詢標(biāo)桿企業(yè)分析(英文版)
- 2025年湖北省技能高考(計(jì)算機(jī)類)專業(yè)知識(shí)考試題(附答案)
- 2024年心理咨詢師題庫附參考答案(達(dá)標(biāo)題)
- 公開招聘編外聘用人員報(bào)名登記表
- 2025患者十大安全目標(biāo)
- 《二氧化碳陸地封存工程地質(zhì)條件適宜性評(píng)價(jià)及選址指南》
- 初中生田徑隊(duì)訓(xùn)練計(jì)劃
- 露天礦山開采工藝及安全技術(shù)
評(píng)論
0/150
提交評(píng)論