本章概述:
輸入和輸出是指微型機(jī)與外界之間的信息交換,即通信。微型機(jī)與外界的通信,是通過(guò)輸入輸出設(shè)備進(jìn)行的, 它是計(jì)算機(jī)的重要組成部分。
中斷是指計(jì)算機(jī)的CPU暫時(shí)中止正在執(zhí)行的主程序,而轉(zhuǎn)去執(zhí)行請(qǐng)求中斷的那個(gè)外設(shè)或事件的中斷服務(wù)程序, 待處理完后又返回到被中止了的程序這樣一個(gè)過(guò)程。
8086可以處理256種中斷,用中斷類型碼來(lái)區(qū)分每一種中斷。這些中斷源可以是硬件,也可以是軟件;有的來(lái)自CPU內(nèi)部,有的來(lái)自外圍芯片。
直接內(nèi)存?zhèn)魉?DMA),是硬件控制外設(shè)與內(nèi)存直接進(jìn)行交換,而不通過(guò)CPU進(jìn)行傳送。
第一節(jié) 微型機(jī)輸入與輸出
輸入/輸出是指CPU與外部設(shè)備之間的信息交換(或稱"通訊")。外部設(shè)備包括輸入設(shè)備(如鍵盤(pán)、鼠標(biāo)、模/數(shù)轉(zhuǎn)換器等)、輸出設(shè)備(如顯示器、打印機(jī)、磁盤(pán)、數(shù)/模轉(zhuǎn)換器等)。外部設(shè)備簡(jiǎn)稱"外設(shè)"。
外設(shè)的種類繁多,可以是機(jī)械式、電子式或光、磁等形式。外設(shè)輸入或輸出的信息類型也不同,可以有數(shù)字量、模擬量(電壓或電流)、開(kāi)關(guān)量。而且傳送信息的速度差異也很大。因此,外設(shè)一般不能直接與系統(tǒng)總線連接,應(yīng)通過(guò)"接口電路"與系統(tǒng)總線連接。接口電路的一般功能有:
1.進(jìn)行地址譯碼,以實(shí)現(xiàn)CPU與某一指定設(shè)備通訊。
2.對(duì)傳送數(shù)據(jù)提供緩沖,以便使快速CPU與慢速外設(shè)速度匹配。
3.信息交換,使CPU與外設(shè)信息的格式、電平一致。
4.提供數(shù)據(jù)傳送的狀態(tài)協(xié)調(diào),如設(shè)備準(zhǔn)備好、設(shè)備忙等。
5.提供時(shí)序控制,以滿足各種外設(shè)對(duì)時(shí)序的要求。
目前,接口電路已標(biāo)準(zhǔn)化、產(chǎn)品化、系列化,稱為"接口芯片"。某些接口電路的工作情況還可由程序設(shè)定或改變,稱為"可編程"接口芯片。
1.1輸入輸出的尋址方式
在Windows 9.X系統(tǒng)中,可以對(duì)接口電路使用的端口地址資源、中斷號(hào)資源、DMA通道號(hào)資源進(jìn)行自動(dòng)分配,這種特性稱為"即插即用(PnP: Plug And Play)"。獲得即插即用特性的條件是:硬件本身支持即插即用,即插即用BIOS、即插即用操作系統(tǒng)。
在一般的硬件設(shè)計(jì)中,可以使用"地址開(kāi)關(guān)(SW:Switch)"或"跳線器(JP:Jumper)"來(lái)選擇硬件使用的端口地址(和/或IRQ、DMA)。
1.1.1CPU與外設(shè)的接口信息

1.數(shù)據(jù)信息
2.狀態(tài)信息
3.控制信息
(1) 數(shù)據(jù)信息
數(shù)據(jù)信息可以是數(shù)字量、模擬量、開(kāi)關(guān)量。鍵盤(pán)等外設(shè)輸入的是數(shù)字量。
CPU只能處理數(shù)字量,溫度、壓力、速度等模擬量需要經(jīng)"變送器"轉(zhuǎn)換為電壓或電流,再經(jīng)"模/數(shù)轉(zhuǎn)換器"轉(zhuǎn)換為數(shù)字量,才能被處理。CPU的輸出也必須經(jīng)過(guò)"數(shù)/模轉(zhuǎn)換器"轉(zhuǎn)換為模擬電壓/電流才能控制某些外部設(shè)備。
開(kāi)關(guān)量表示外設(shè)開(kāi)關(guān)的狀態(tài)(分、合).用一位二進(jìn)制可以表示一個(gè)開(kāi)關(guān)的狀態(tài),如1=合、0=分。
(2) 狀態(tài)信息
狀態(tài)信息表示外設(shè)的工作狀態(tài),如:
"準(zhǔn)備好(Ready)":外設(shè)已把傳送給CPU的數(shù)據(jù)準(zhǔn)備好,CPU可以讀取。
"忙(Busy)":外設(shè)目前正忙,不能接收來(lái)自CPU的數(shù)據(jù)。
(3) 控制命令
控制命令是CPU傳送給外設(shè)的,如啟動(dòng)/停止外設(shè)等。
1.1.2 接口電路
接口電路:

CPU與外設(shè)間的數(shù)據(jù),狀態(tài),控制信息,均經(jīng)過(guò)接口電路轉(zhuǎn)達(dá).一般說(shuō)來(lái),在接口電路中設(shè)計(jì)一組寄存器(稱為I/O"端口"port)用于存放控制命令,狀態(tài),數(shù)據(jù),分別稱為控制寄存器(或控制端口)、狀態(tài)寄存器(或狀態(tài)端口)、數(shù)據(jù)寄存器(或數(shù)據(jù)端口).如上圖中各端口的作用為:
| 端口1 | 數(shù)據(jù)端口 | (數(shù)據(jù)寄存器) |
|---|---|---|
| 端口2 | 狀態(tài)端口 | (狀態(tài)寄存器) |
| 端口3 | 控制端口 | (控制寄存器) |
(1)數(shù)據(jù)端口(數(shù)據(jù)寄存器)
CPU與外設(shè)間可進(jìn)行雙向數(shù)據(jù)傳輸,因此,數(shù)據(jù)端口有兩種:數(shù)據(jù)輸入端口(數(shù)據(jù)輸入寄存器),數(shù)據(jù)輸出端口(數(shù)據(jù)輸出寄存器).
輸出:CPU使用OUT指令把數(shù)據(jù)送至數(shù)據(jù)輸出端口,數(shù)據(jù)輸出端口把數(shù)據(jù)送給外設(shè)。
輸入:外設(shè)把其數(shù)據(jù)送至數(shù)據(jù)輸入端口,CPU使用IN指令從數(shù)據(jù)輸入端口讀得數(shù)據(jù)。
數(shù)據(jù)端口在CPU與外設(shè)之間起著緩沖和寄存數(shù)據(jù)的作用。
(2)狀態(tài)端口(狀態(tài)寄存器)
外設(shè)把其狀態(tài)送入狀態(tài)端口,CPU使用IN指令讀入狀態(tài)端口的值,以查詢外設(shè)的狀態(tài)。
外設(shè)的狀態(tài)一般采用編碼表示,編碼值稱為外設(shè)的"狀態(tài)字"。
狀態(tài)字可以編碼為8位或16位,用一位或幾位表示外設(shè)的一種狀態(tài),取決于狀態(tài)端口的具體設(shè)計(jì),如,可以這樣設(shè)計(jì):
用bit0表示外設(shè)是否已把輸入數(shù)據(jù)準(zhǔn)備好(數(shù)據(jù)已放入數(shù)據(jù)輸入端口):
| bit0 |
![]() |
=1,準(zhǔn)備好,CPU可以讀取 |
| =0,未準(zhǔn)備好 |
用bit1表示外設(shè)是否可以接收新的數(shù)據(jù)(數(shù)據(jù)輸出端口是否為空):
| bit1 |
![]() |
=1,可以,數(shù)據(jù)輸出端口為空,CPU可以再輸出數(shù)據(jù) |
| =0,外設(shè)不能接受新的數(shù)據(jù),輸出端口還有數(shù)據(jù) |
(3)控制端口(控制寄存器)
CPU使用OUT指令把控制命令送至外設(shè)的控制端口,外設(shè)從控制端口獲得命令。
控制命令采用編碼表示,編碼值稱為外設(shè)的"控制字"或"命令字"??刂谱挚梢跃幋a為8位或16位,用一位或幾位表示控制命令及其參數(shù),取決于控制端口的具體設(shè)計(jì)。
結(jié)論:CPU對(duì)外設(shè)的各種操作(向外設(shè)發(fā)出控制命令、查詢外設(shè)的狀態(tài)、向外設(shè)輸出數(shù)據(jù)、從外設(shè)獲得數(shù)據(jù)),均歸結(jié)為對(duì)接口電路中各端口的讀/寫(xiě)操作(IN/OUT指令)。當(dāng)然,不同操作對(duì)應(yīng)的IN/OUT指令的端口不同。
注意,某些設(shè)備不是通過(guò)接口電路直接連接到CPU上,而是通過(guò)接口電路直接連接到系統(tǒng)總線上,如下圖: 
1.1.3 I/O端口地址尋址方式
3.I/O端口尋址方式
系統(tǒng)中的端口用"端口地址"來(lái)區(qū)分,端口地址的編碼方式有兩種:"獨(dú)立I/O編址"和"存儲(chǔ)器I/O統(tǒng)一編址"。
Intel X86系列CPU及其兼容CPU使用獨(dú)立I/O編址方式,其端口地址范圍是0000~FFFFH。存儲(chǔ)器的地址也包含0000~FFFFH地址范圍,使用 M/IO(8088CPU是IO/W)來(lái)區(qū)分端口和存儲(chǔ)器。
M/IO=1,地址信號(hào)表示存儲(chǔ)器地址;
M/IO=0,地址信號(hào)表示端口地址;
當(dāng)CPU執(zhí)行端口訪問(wèn)指令I(lǐng)N/OUT時(shí),產(chǎn)生M/IO=0信號(hào)。當(dāng)執(zhí)行存儲(chǔ)器訪問(wèn)指令時(shí),產(chǎn)生M/IO=1信號(hào)。
在某些CPU中,使用存儲(chǔ)器統(tǒng)一I/O編址。在這種編址方式中,CPU使用相同的指令訪問(wèn)存儲(chǔ)器和I/O,僅由地址信號(hào)來(lái)區(qū)分訪問(wèn)存儲(chǔ)器或I/O。
1.1.4 輸入/輸出指令I(lǐng)N/OUT
4.輸入/輸出指令I(lǐng)N/OUT
把端口地址放在DX寄存器中,可對(duì)該端口進(jìn)行讀/寫(xiě)。
IN AL,DX ;從DX端口讀入8位,放在AL寄存器中
IN AX,DX ;從DX端口讀入8位,放在AL寄存器中
;從DX+1端口讀入8位,放在AH寄存器中
OUT DX,AL ;把AL的8位值送DX端口
OUT DX,AX ;AL的值送DX端口,AH的值送DX+1端口
如果端口地址小于或等于FFH,在IN/OUT指令中可用立即數(shù)表示端口地址,如:
IN AL,42H
IN AX,42H
OUT 43H,AL
OUT 43H,AX
接口電路用端口地址(I/O地址)來(lái)區(qū)分CPU需訪問(wèn)的端口。一個(gè)接口芯片可以有幾個(gè)端口,地址信號(hào)的高位譯碼后作為芯片的片選信號(hào)CS,地址信號(hào)的低位用于選擇該芯片的端口,如下圖:

在接口電路的設(shè)計(jì)中,也可把幾個(gè)端口設(shè)計(jì)為相同的端口地址,這有以下幾種情況:
(1).CPU對(duì)數(shù)據(jù)輸入端口只進(jìn)行讀操作(IN),對(duì)數(shù)據(jù)輸出端口僅進(jìn)行寫(xiě)操作(OUT),因此,數(shù)據(jù)輸入端口和數(shù)據(jù)輸出端口可使用相同的地址,接口電路用IOR和IOW來(lái)區(qū)分。(最小模式時(shí)為RD,WR )。
與此類似,由于CPU對(duì)狀態(tài)端口只進(jìn)行讀操作(IN),對(duì)控制端口僅進(jìn)行寫(xiě)操作(OUT),因此,狀態(tài)端口和控制端口可使用相同的地址。
(2).多個(gè)數(shù)據(jù)端口也可使用相同的端口地址,接口電路根據(jù)CPU對(duì)該端口地址訪問(wèn)的先后順序確定具體的端口。
(3).多個(gè)控制端口也可使用相同的端口地址,接口電路根據(jù)CPU對(duì)該端口地址寫(xiě)入的先后順序確定具體的端口。
1.1.5 微機(jī)中I/O端口地址的使用
5.微機(jī)中I/O端口地址的使用
端口地址是微機(jī)的一種重要資源,一般作如下分配:
| DMA控制器1 | 000~01FH | 8237 |
| DMA控制器2 | 0C0~0DFH | 8237 |
| 中斷控制器 1 | 020~03FH | 8259 |
| 中斷控制器 2 | 0A0~0BFH | 8259 |
| 定時(shí)/計(jì)數(shù)器 | 040~05FH | 8253 |
| 鍵盤(pán)控制器 | 060~06FH | 8042 |
| RT/CMOS | 070~07FH | 1287 |
| 數(shù)學(xué)協(xié)處理器 | 0F0~0FFH | 8087 |
| 并行接口1 | 370~37FH | LPT1,PRN |
| 并行接口2 | 270~27FH | LPT2 |
| 串行接口 1 | 3F8~3FFH | COM1 |
| 串行接口 2 | 2F8~2FFH | COM2 |
| 顯示接口 | 3C0~3CFH | CRT |
| 硬盤(pán)接口 | 1F0~1FFH | HDD |
| 軟盤(pán)接口 | 3F0~3F7H | FDD |
在使用和設(shè)計(jì)接口電路時(shí),應(yīng)遵循如下原則:
?、俜彩且驯幌到y(tǒng)使用的端口地址,如上表的地址,不能作為它用。
?、诜彩潜幌到y(tǒng)聲明為保留(reserved)的地址,盡量不要作為它用,否則,可能與其它或未來(lái)的產(chǎn)品不兼容。
1.2 輸入輸出傳送方式
輸入/輸出方式是指CPU與外設(shè)傳送數(shù)據(jù)的方式,重點(diǎn)討論:
?、俑鞣N輸入/輸出方式的執(zhí)行過(guò)程。
?、诮涌陔娐酚布?dòng)作與CPU軟件的關(guān)系(已知硬件動(dòng)作要求,設(shè)計(jì)出對(duì)應(yīng)的軟件,或已知軟件,分析在該軟件控制下的硬件動(dòng)作情況).
?、劢涌陔娐返脑O(shè)計(jì)。
1.2.1 傳送方式
1、 程序方式
在程序控制下進(jìn)行外設(shè)的信息傳送。通常的方法是在程序中安排一段有IN/OUT指令和其他指令組成的程序段,用來(lái)控制外設(shè)的工作。根據(jù)外設(shè)的特點(diǎn),可以采用無(wú)條件傳送方式或條件傳送方式(查詢方式).
(1)無(wú)條件傳送方式
無(wú)條件傳送時(shí)指:不查詢外設(shè)的狀態(tài),認(rèn)為外設(shè)已經(jīng)準(zhǔn)備就緒,直接與外設(shè)傳送數(shù)據(jù)。
外設(shè)準(zhǔn)備就緒是指:對(duì)于輸入設(shè)備,它已經(jīng)把數(shù)據(jù)放入接口電路的數(shù)據(jù)輸入端口(數(shù)據(jù)輸入寄存器),CPU可以讀??;對(duì)于輸出設(shè)備,它已經(jīng)準(zhǔn)備好接收數(shù)據(jù)(接口電路的數(shù)據(jù)輸出寄存器已空),CPU可以向它輸出數(shù)據(jù)。
由于不查詢外設(shè)狀態(tài),接口電路不需要狀態(tài)寄存器,只需要數(shù)據(jù)輸入寄存器和數(shù)據(jù)輸出寄存器。 要求數(shù)據(jù)輸入寄存器僅在CPU讀(IN指令)該寄存器時(shí)才送出數(shù)據(jù),因此,應(yīng)使用三態(tài)緩沖器設(shè)計(jì)數(shù)據(jù)輸入寄存器。 CPU把數(shù)據(jù)輸出至數(shù)據(jù)輸出寄存器后,數(shù)據(jù)輸出寄存器應(yīng)保持該數(shù)據(jù),直到CPU向其送入新的數(shù)據(jù),因此,應(yīng)使用鎖存器設(shè)計(jì)數(shù)據(jù)輸出寄存器。
三態(tài)緩沖器的工作情況:
當(dāng)STB=0,選通,緩沖器輸出Do=輸入Di。
當(dāng)STB=1,無(wú)論Di如何變化,緩沖器輸出Do懸空。
鎖存器的工作情況:
當(dāng)LATCH=1,鎖存器輸出Do=輸入Di。
當(dāng)LATCH由1到0跳變,輸入Di被鎖存。
當(dāng)LATCH=0,無(wú)論Di如何變化,鎖存器輸出Do維持不變。
無(wú)條件傳送方式的輸入接口電路:
外設(shè)把數(shù)據(jù)送到三態(tài)緩沖器,CPU執(zhí)行IN指令從三態(tài)緩沖器中讀得外設(shè)的數(shù)據(jù)。
IN AL,Addr
CPU執(zhí)行IN指令時(shí)RD=0,IO/M=1(8088CPU為IO/M,8086CPU為M/IO),地址總線A7~A0上出現(xiàn)地址Adrr。地址信號(hào)經(jīng)地址譯碼器后輸出高電平,與非門(mén)輸出EN=0,選通三態(tài)緩沖器,三態(tài)緩沖器把其存放的數(shù)據(jù)送出至數(shù)據(jù)總線D7~D0,從而CPU的AL獲得該數(shù)據(jù)。
無(wú)條件傳送方式的輸出接口電路:
CPU執(zhí)行OUT指令把數(shù)據(jù)送到鎖存器,鎖存器把數(shù)據(jù)送給外設(shè)。
OUT Addr,AL
CPU執(zhí)行OUT指令時(shí),WR =0,IO/M =1,地址總線A7~A0上出現(xiàn)地址Addr,數(shù)據(jù)總線D7~D0上出現(xiàn)AL的值。地址信號(hào)經(jīng)地址譯碼器后輸出高電平,它與IO/M 、WR 一起使與非門(mén)輸出STB=0,把數(shù)據(jù)總線D7~D0上出現(xiàn)的數(shù)據(jù)(AL的值)鎖存到鎖存器中,外設(shè)從鎖存器獲得該數(shù)據(jù)。
例、打印機(jī)字體設(shè)置和步進(jìn)電機(jī)控制。在打印機(jī)上,有一組DIP開(kāi)關(guān),用于設(shè)置字體、國(guó)別等,程序使用IN指令讀入DIP開(kāi)關(guān)的狀態(tài),從而獲得這些設(shè)置。在打印時(shí),程序控制步進(jìn)電機(jī)的正轉(zhuǎn)/反轉(zhuǎn),從而控制字車的左、右行進(jìn)。
START:MOV DX, DATA_PORT ; 端口地址
MOV AL, 03H ; AB相加電
OUT DX, AL
CALL DELAY ; 延時(shí)子程序
MOV AL, 06H ; BC相加電
OUT DX, AL
CALL DELAY
MOV AL, 0CH ; CD相加電
OUT DX, AL
CALL DELAY
MOV AL, 09H ; DA相加電
OUT DX, AL
CAL DELAY
JMP START
讀入DIP開(kāi)關(guān)的狀態(tài):
MOV DX, DATA_PORT
IN AL, DX
(2) 查詢方式(條件傳送方式)
CPU從接口電路的狀態(tài)寄存器讀取外設(shè)的狀態(tài),當(dāng)外設(shè)準(zhǔn)備好,則與外設(shè)傳送數(shù)據(jù),否則,應(yīng)繼續(xù)查詢狀態(tài)。
由此可見(jiàn),查詢式傳送的接口電路除了需要數(shù)據(jù)端口外,還需要狀態(tài)端口。
(1)、查詢式輸入的接口電路
設(shè)狀態(tài)寄存器的端口地址為STATUS_PORT,數(shù)據(jù)輸出寄存器的端口地址為DATA_PORT。狀態(tài)寄存器的D6=0表示輸出設(shè)備可以接收數(shù)據(jù)(準(zhǔn)備好,不"忙",數(shù)據(jù)鎖存器為"空"),D6=1表示輸出設(shè)備"忙"。則查詢式輸出的程序?yàn)椋?br />
POLL:IN AL,STATUS_PORT ;讀狀態(tài)
TEST AL, 40H ; 忙?
JNZ POLL ; D6(BUSY)=1,輸出設(shè)備忙
MOV AL,STORE(數(shù)據(jù))
OUT DATA_PORT,AL ; 輸出數(shù)據(jù)
結(jié)合查詢式輸出的程序,分析查詢式輸出接口電路的動(dòng)作情況:
"IN AL,STATUS_PORT"指令產(chǎn)生的信號(hào)為:RD=0、IO/M=1、地址總線上出現(xiàn)的信號(hào)為STATUS_PORT,地址譯碼輸出Y1=1,與非門(mén)1=0,選通狀態(tài)寄存器,狀態(tài)寄存器把D觸發(fā)器輸出(反應(yīng)輸出設(shè)備狀態(tài))送至數(shù)據(jù)總線,從而在AL中獲得輸入設(shè)備的狀態(tài)(D6位).D6(BUSY)=0,表示輸出設(shè)備不忙,CPU可向其輸出數(shù)據(jù)。D6(BUSY)=1,表示輸出設(shè)備忙,CPU不能向其輸出數(shù)據(jù)。
當(dāng)輸出設(shè)備不忙(BUSY=0),CPU用指令"OUT DATA_PORT,AL"向其輸出數(shù)據(jù),該令產(chǎn)生的信號(hào)為:WR=0、IO/M=1、地址總線上出現(xiàn)的信號(hào)為DATA_PORT,數(shù)據(jù)總線上出現(xiàn)數(shù)據(jù)(AL的值)。端口譯碼輸出Y2=1,選通數(shù)據(jù)輸出寄存器,把AL的值保存在鎖存器中。同時(shí),D觸發(fā)器被置1,產(chǎn)生OBF信號(hào)(輸出緩沖器滿,Output Buffer Full),它一方面通知輸出設(shè)備,鎖存器中已有數(shù)據(jù),另方面給出輸出設(shè)備忙的信號(hào)。
1.2.2 中斷傳送方式
2.中斷傳送方式
使用查詢方式時(shí),CPU讀取狀態(tài)寄存器并檢測(cè)狀態(tài)字,如設(shè)備未準(zhǔn)備好,CPU不斷地查詢(讀取狀態(tài)寄存器并檢測(cè)狀態(tài)字),浪費(fèi)了大量CPU時(shí)間,CPU的利用率低。
使用中斷方式,CPU不查詢?cè)O(shè)備狀態(tài),當(dāng)設(shè)備準(zhǔn)備好時(shí),主動(dòng)向CPU提出中斷請(qǐng)求,CPU響應(yīng)中斷后,在中斷處理程序中與設(shè)備交換信息。如果設(shè)備未準(zhǔn)備好,CPU可以執(zhí)行其他程序,大大提高了CPU的利用率。
在每條指令執(zhí)行完后,CPU均可響應(yīng)中斷,因此,當(dāng)設(shè)備準(zhǔn)備好時(shí),CPU可以及時(shí)與設(shè)備交換信息,大大提高了CPU對(duì)設(shè)備響應(yīng)的實(shí)時(shí)性。
因此,中斷方式被廣泛使用。
中斷方式輸入的接口電路:
中斷方式輸入的接口電路除了必須的輸入鎖存器和三態(tài)緩沖器外,還必須包含產(chǎn)生中斷請(qǐng)求信號(hào)(INTR)的電路,當(dāng)CPU響應(yīng)中斷請(qǐng)求后,接口電路應(yīng)撤消中斷請(qǐng)求。另外,在應(yīng)用中,通常需要禁止某設(shè)備申請(qǐng)中斷,因此,一般還要設(shè)計(jì)一個(gè)中斷屏蔽觸發(fā)器(MASK),當(dāng)中斷屏蔽觸發(fā)器置1時(shí),允許該設(shè)備申請(qǐng)中斷,否則禁止該設(shè)備申請(qǐng)中斷。第三,CPU響應(yīng)中斷后,發(fā)出INTA 信號(hào),接口電路收到該信號(hào)后,應(yīng)送出中斷類型碼。中斷類型碼標(biāo)識(shí)該接口電路對(duì)應(yīng)的輸入設(shè)備。

該接口電路的工作原理是:
當(dāng)輸入設(shè)備準(zhǔn)備好一個(gè)數(shù)據(jù)供輸入時(shí),它發(fā)出一個(gè)選通信號(hào)STB,該信號(hào)一方面把數(shù)據(jù)打入鎖存器,另方面使中斷請(qǐng)求觸發(fā)器INTR置1。如果允許該接口電路發(fā)出中斷申請(qǐng),中斷屏蔽觸發(fā)器MASK為1(Q=1),則接口電路發(fā)出中斷請(qǐng)求信號(hào)INTR。
CPU收到中斷請(qǐng)求信號(hào)后,如果CPU內(nèi)部允許中斷(標(biāo)志寄存器中IF位=1),CPU在執(zhí)行完當(dāng)前指令后,響應(yīng)中斷。中斷響應(yīng)信號(hào)INTA選通緩沖器,送出中斷類型碼。CPU根據(jù)中斷類型碼進(jìn)入相應(yīng)的中斷處理程序。
在中斷處理程序中,CPU執(zhí)行輸入指令(IN),讀取輸入寄存器中的數(shù)據(jù)。IN指令產(chǎn)生的信號(hào)為:RD=0、地址總線上出現(xiàn)的信號(hào)為輸入寄存器的地址,地址經(jīng)譯碼后的輸出Y2與RD,IO/M一起,選通輸入寄存器,把輸入數(shù)據(jù)送到數(shù)據(jù)總線,AL寄存器獲得該數(shù)據(jù)。輸入指令同時(shí)對(duì)中斷請(qǐng)求寄存器INTR復(fù)位。
在該接口電路中,以下指令使接口電路允許請(qǐng)求中斷(置MASK=1):
MOV AL,01H ;D0至MASK的D輸入端
OUT DX,AL ;DX的值使譯碼器輸出Y1=1
1.2.3 直接存儲(chǔ)器存取方式(DMA)
3.直接存儲(chǔ)器存取方式(DMA)
中斷傳送方式提高了CPU利用率和系統(tǒng)工作的實(shí)時(shí)性,但它通過(guò)中斷處理程序完成數(shù)據(jù)的輸入/輸出,在中斷處理程序中,要保存段點(diǎn)、保護(hù)現(xiàn)場(chǎng),需要較多指令,因而傳送一次數(shù)據(jù)需要較長(zhǎng)時(shí)間,這對(duì)于高速外設(shè)及成組數(shù)據(jù)交換(如磁盤(pán)與內(nèi)存間的數(shù)據(jù)交換)速度顯得太慢了。
DMA方式(Direct Memory Access)由DMA控制器(DMAC,典型芯片是Intel 8237A)控制外設(shè)與內(nèi)存直接進(jìn)行數(shù)據(jù)交換,不經(jīng)過(guò)CPU,從而大大加快了傳送速度。

