IBM-PC匯編教材第8章.ppt_第1頁
IBM-PC匯編教材第8章.ppt_第2頁
IBM-PC匯編教材第8章.ppt_第3頁
IBM-PC匯編教材第8章.ppt_第4頁
IBM-PC匯編教材第8章.ppt_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第8章 輸入/輸出程序設(shè)計,8.1 I/O設(shè)備的數(shù)據(jù)傳送方式 8.2 程序直接控制I/O方式 8.3 中斷傳送方式,外設(shè)是用來實現(xiàn)人機(jī)交互的一些機(jī)電設(shè)備。 外設(shè)處理信息的類型、速度、通信方式與CPU不匹配, 不能直接掛在總線上,必須通過接口和系統(tǒng)相連,接口 指CPU、存儲器、外設(shè)之間通過總線進(jìn)行連接的電路部分, 是CPU與外界進(jìn)行信息交換的中轉(zhuǎn)站。,I/O設(shè)備與主機(jī)(CPU和存儲器)的通信是通過外設(shè)接口進(jìn)行的,傳送控制、狀態(tài)、數(shù)據(jù)三種不同的信息,都支持使用IN/OUT指令執(zhí)行信息交換。,8.1 I/O設(shè)備的數(shù)據(jù)傳送方式,控制、狀態(tài)、數(shù)據(jù)三種信息,控制信息輸出到I/O接口,通知設(shè)備和接口要做什么

2、動作,狀態(tài)信息從I/O接口輸入到CPU,表明設(shè)備當(dāng)前所處的狀態(tài),數(shù)據(jù)信息是I/O設(shè)備和CPU真正要交換的信息,并行、串行 ?,CPU與外設(shè)的工作速度不一致,如何使兩者高效、可靠地進(jìn)行數(shù)據(jù)傳送?,一、程序直接控制 二、中斷傳送方式 三、DMA傳送方式 ( Direct Memory Access ),CPU與外設(shè)間的數(shù)據(jù)傳送方式有以下幾種:,程序直接控制方式 CPU利用IN/OUT指令直接在端口級上處理輸入輸出 中斷方式 CPU在執(zhí)行程序的同時兼顧對I/O設(shè)備的控制或數(shù)據(jù)傳送。當(dāng)I/O設(shè)備準(zhǔn)備好(空閑),由I/O通知CPU暫停正在運行的程序,轉(zhuǎn)而處理I/O設(shè)備的請求,處理完即返回主程序繼續(xù)執(zhí)行。

3、 DMA方式(直接存儲器存取方式/成組傳送方式) 主要適用于高速I/O設(shè)備(如磁盤),CPU向I/O接口提供控制信息(如數(shù)據(jù)塊的首地址及字節(jié)數(shù)),I/O設(shè)備直接和存儲器進(jìn)行成批數(shù)據(jù)的快速傳送。,1、程序直接控制方式 無條件傳送(CPU與外設(shè)同步工作): 外部控制過程各種動作時間是固定的,而且是已知的。 查詢方式(CPU與外設(shè)不同步工作): 傳送前,先查詢外設(shè)狀態(tài),準(zhǔn)備好才傳送,否則CPU處于等待狀態(tài)。 2、中斷方式: 外設(shè)與CPU處于并行工作,一旦外設(shè)準(zhǔn)備好,外設(shè)向CPU發(fā)中斷申請,條件具備,CPU暫停原程序執(zhí)行,響應(yīng)中斷,外設(shè)與CPU串行工作。 3、DMA方式(高速I/O及成組交換數(shù)據(jù)):

4、CPU不干予,由硬件實現(xiàn)存儲器與外設(shè)之間交換數(shù)據(jù),稱直接存取存儲器。,DMA傳送方式的特點 1. 外設(shè)和內(nèi)存之間,直接進(jìn)行數(shù)據(jù)傳送, 不通過CPU, 傳送效率高。 適用于在內(nèi)存與高速外設(shè)、或兩個高速外設(shè)之間進(jìn)行大批量 數(shù)據(jù)傳送。 2. 電路結(jié)構(gòu)復(fù)雜,硬件開銷較大。, 中斷傳送方式的特點: 1. CPU和外設(shè)大部分時間處在并行工作狀態(tài), 只在CPU響應(yīng)外設(shè)的中斷申請后, 進(jìn)入數(shù)據(jù)傳送的過程 2. 中斷傳送方式提高了CPU的效率,查詢傳送方式特點: 1. CPU通過不斷查詢外設(shè)狀態(tài),實現(xiàn)與外設(shè)的速度匹配 2. CPU的工作效率低,外設(shè)接口由一組寄存器(數(shù)據(jù)寄存器/狀態(tài)寄存器/命令寄存器)組成,每個

5、寄存器有一個端口地址(端口號),,8.2 程序直接控制I/O方式,8.2.1 I/O端口,端口中的三種寄存器 數(shù)據(jù)寄存器: 狀態(tài)寄存器: 命令寄存器:,對于8位端口, 可達(dá)64K(0000FFFFH) ,即65536 對于16位端口,可達(dá)32K(0000FFFFH) ,即32768 對于32位端口,可達(dá)16K(0000FFFFH) ,即16384,80X86微機(jī)中I/O地址空間獨立于主存儲器,地址空間理論值的大小,地址空間實際上的使用情況,只有十幾個外設(shè)大容量存儲設(shè)備,輸入指令I(lǐng)N,8.2.2 I/O指令,輸出指令OUT,例:測試某狀態(tài)寄存器(端口號27H)的第2位是否為1 IN AL, 27

6、H TEST AL, 00000100B JNZ ERROR I/O指令是主機(jī)與外設(shè)進(jìn)行通信的最基本途徑。DOS功能調(diào)用和BIOS例行程序中的輸入/輸出功能也是由IN和OUT指令完成的。,例8.1Sound程序 mov dx, 1000 in al, 61h and al, 11111100b sound: xor al, 2 out 61h, al mov cx, 6000 wait1: loop wait1 dec dx jne sound,8.2.3 I/O程序舉例,發(fā)聲原理: 向揚聲器發(fā)送一串脈沖信號,推動揚聲器內(nèi)紙盆振動,發(fā)出聲音 脈沖的頻率,控制音高; 脈沖的個數(shù)(延遲),控制音長

7、,與門,例8.3CPU要從3個設(shè)備輪流輸入數(shù)據(jù),設(shè)備1,2,3的狀態(tài)寄存器 端口號分別用STAT1,STAT2,STAT3表示,第5位是輸入 準(zhǔn)備位。 INPUT: IN AL, STAT1 TEST AL, 20H JZ DEV2 CALL FAR PTR PROC1 DEV2: IN AL, STAT2 TEST AL, 20H JZ DEV3 CALL FAR PTR PROC2 DEV3: IN AL, STAT3 TEST AL, 20H JZ NO_INPUT CALL FAR PTR PROC3 NO_INPUT: ,查詢傳送方式,編程流程:,查詢傳送方式特點: 1. CPU通過

8、不斷查詢外設(shè)狀態(tài),實現(xiàn)與外設(shè)的速度匹配 2. CPU的工作效率低,8.3 中斷傳送方式,關(guān)于中斷的幾個概念: 什么是中斷? 中斷源? 中斷向量指什么? 中斷向量的地址? 硬件中斷、軟件中斷、非屏蔽中斷?,使用中斷方式時: 外設(shè)準(zhǔn)備數(shù)據(jù),CPU執(zhí)行程序, CPU與外設(shè)并行工作; 一旦外設(shè)準(zhǔn)備就緒,外設(shè)向CPU發(fā)中斷申請, CPU暫停原程序執(zhí)行,響應(yīng)中斷,進(jìn)行數(shù)據(jù)傳輸。此時,CPU與外設(shè)是串行工作。,INTEL 8059A可編程中斷控制器(PIC),8086/8088中斷源,LPT2,COM2,COM1,LPT1,1. 向CPU的引腳INTR發(fā)中斷申請信號 當(dāng)有多個外設(shè)同時發(fā)出中斷請求時, 能按照

9、一定的優(yōu)先級順序,向CPU發(fā)出中斷申請, 使CPU能優(yōu)先響應(yīng)優(yōu)先級最高的外部設(shè)備的中斷申請。 2. 送中斷類型號 在CPU中斷響應(yīng)周期,針對不同外設(shè)的中斷請求, 向CPU傳送不同的中斷類型號, 使CPU執(zhí)行相應(yīng)的中斷子程。,IBM PC機(jī)8259A可編程中斷控制器(PIC)主要功能:,1.軟中斷(內(nèi)中斷): (1)INT指令 (2) CPU錯(除法錯、溢出) (3)為調(diào)試程序設(shè)置的中斷( 單步、斷點) 2.硬中斷(外中斷): (1)外設(shè)的I/O請求 可屏蔽中斷 (2)電源掉電/奇偶錯 非屏蔽中斷,8.3.1 8086的中斷分類,按中斷源的不同,中斷分為內(nèi)中斷和外中斷,問 外設(shè)發(fā)出中斷請求,CP

10、U是否就一定回響應(yīng)呢?,這由兩個控制條件決定: 1、該外設(shè)的中斷請求是否屏蔽 2、CPU是否允許響應(yīng)中斷,8259A的IMR FLAGS的IF,答:不一定,8259A的IMR,I/O端口地址:21H 功能:8位對應(yīng)控制8個外設(shè) 工作方式:0表示允許外設(shè)中斷請求,1表示禁止,例如新增允許 IR2 的中斷申請 IN AL, 21H ;讀入原IMR的內(nèi)容 AND AL, 1111 1011B ;D2=0,允許IR2的中斷申請 OUT 21H, AL ;寫入IMR,FLAGS的IF,工作方式: IF位=1 允許中斷 (STI 開中斷) =0 禁止中斷 (CLI 關(guān)中斷),功能:設(shè)置CPU中斷允許位,非

11、屏蔽中斷(類型號為2):一種特殊的外部中斷,與IF位的設(shè)置情況無關(guān),CPU不能禁止此類中斷。,中斷命令寄存器,CPU響應(yīng)某級中斷后,如果不發(fā)出中斷結(jié)束命令 EOI ,則8259A會屏蔽同級或低級的中斷申請。,為什么要發(fā)中斷結(jié)束命令 EOI?,INTSUB PROC 、 MOV AL, 20H ;將中斷結(jié)束命令字20H 送AL OUT 20H, AL ;寫入中斷命令寄存器中 IRET ;中斷返回 INTSUB ENDP,怎么發(fā)中斷結(jié)束命令 EOI?,中斷操作的5個步驟:,(1) 取中斷類型號 (2) 計算中斷向量地址 (3) 取中斷向量,偏移地址送IP,段地址送CS (4) 轉(zhuǎn)入中斷處理程序 (

12、5) 中斷返回到INT指令的下一條指令,例:BIOS中斷 INT 4AH 4AH4 = 128H 4AH4+2 = 12AH (128H) IP (12AH) CS,8.3.2 中斷向量表,中斷類型號:? 中斷向量表:? 中斷向量地址:?,用戶如何利用保留的中斷類型號擴(kuò)充中斷?,中斷程序的編寫步驟: 1、主程序的編寫: (1) 設(shè)置中斷向量 (2) 設(shè)置CPU中斷允許位(IF) (3) 設(shè)置中斷屏蔽位(IMR) 2、中斷處理子程序的編寫: (1) 中斷處理功能 (2) IRET中斷返回,例:為中斷類型N設(shè)置中斷向量 MOV AX, 0 MOV ES, AX MOV BX, N*4 MOV AX

13、, OFFSET INTHAND MOV ES: WORD PTRBX, AX ; 偏移地址(N*4) MOV AX, SEG INTHAND MOV ES: WORD PTRBX+2, AX ; 段地址(N*4+2) INTHAND: IRET,設(shè)置/ 取中斷向量(方法1:絕對地址法),DOS功能調(diào)用(21H)存取中斷向量 設(shè)置中斷向量: AH=25H AL=中斷類型號 DS:DX=中斷向量 INT 21H 取中斷向量: AH=35H AL=中斷類型號 INT 21H 返回時送ES:BX=中斷向量,設(shè)置/ 取中斷向量(方法2:DOS功能調(diào)用法),例8.4用DOS功能調(diào)用存取中斷向量 MOV

14、AL, N MOV AH, 35H INT 21H ; 取原中斷向量 PUSH ES PUSH BX ; 保存原中斷向量 PUSH DS MOV AX, SEG INTHAND MOV DS, AX MOV DX, OFFSET INTHAND MOV AL, N MOV AH, 25H INT 21H ; 設(shè)置新的中斷向量 POP DS POP DX POP DS MOV AL, N MOV AH, 25H INT 21H ; 恢復(fù)原中斷向量 RET ; INTHAND: IRET,不同?,8.3.3 中斷過程,當(dāng)中斷源產(chǎn)生中斷申請后, 不論是內(nèi)中斷、非屏蔽中斷,還是可屏蔽中斷, 只要滿足響

15、應(yīng)條件,在執(zhí)行完當(dāng)前指令后, CPU內(nèi)部硬件會自動完成下列響應(yīng)中斷的過程:, 取中斷類型號N 當(dāng)前FLAGS的內(nèi)容入棧 當(dāng)前CS的內(nèi)容入棧 當(dāng)前IP的內(nèi)容入棧 清IF、TF標(biāo)志為0 取內(nèi)存單元( 0 : N 4 )字內(nèi)容送IP 取中斷子程 取內(nèi)存單元( 0 : N 4 + 2 )字內(nèi)容送CS 入口地址 轉(zhuǎn)中斷子程序 此時CS:IP指向中斷程序的入口,開始執(zhí)行中斷程序。,8.3.4 中斷優(yōu)先級和中斷嵌套,當(dāng)有多個中斷源同時產(chǎn)生中斷申請時, CPU先響應(yīng)優(yōu)先權(quán)最高的中斷源, 再響應(yīng)優(yōu)先級較低的中斷源。,高 低 內(nèi)中斷 ( 除零,INT 指令,斷點,INTO指令 ) 非屏蔽中斷 可屏蔽中斷(IR0

16、, IR1 , IR2 , IR3 , IR4 , IR5, IR6, IR7) 低 內(nèi)中斷( 單步 ),中斷優(yōu)先級如何進(jìn)行控制?,8259A的中斷命令寄存器的6、7位可以控制,一般情況下,以正常的優(yōu)先級方式(IR0IR7) 特殊情況下,可以改變優(yōu)先級的次序:,R SL 0 0 正常優(yōu)先級方式 0 1 清除由L2L0指定的中斷請求 0 各中斷優(yōu)先級依次左循環(huán)一個位置 1 1 各中斷優(yōu)先級依次循環(huán)到由L2L0指定的中斷請求到達(dá)最低優(yōu)先級位置上,CPU正在執(zhí)行某一中斷子程,又被其它中斷源中斷 使CPU轉(zhuǎn)去執(zhí)行另一中斷子程,這個過程叫中斷嵌套,嵌套的概念,. . . . STI. . . . . .

17、 (EOI) . . . . . IRET,IF=0,禁止中斷,允許級別高中斷,允許級別低或同級中斷,中斷子程序運行過程中的中斷允許情況,8.3.5 中斷處理程序,中斷程序的編寫步驟: 1、主程序的編寫: (1) 設(shè)置中斷向量 (2) 設(shè)置CPU中斷允許位 (3) 設(shè)置中斷屏蔽位 2、中斷處理子程序的編寫: (1) 中斷處理功能 (2) IRET中斷返回,當(dāng)前指令執(zhí)行完的含義,對于帶重復(fù)前綴的串指令(如REP MOVSB),執(zhí)行一 次重復(fù)和串指令即可響應(yīng)中斷;,對MOV和POP指令,處理對象為段寄存器,STI和IRET 指令執(zhí)行完本條指令后再執(zhí)行一條指令才響應(yīng)中斷。,加封鎖指令,看作一條指令,

18、一般指令,只要一條指令的執(zhí)行周期結(jié)束即可響應(yīng)中斷 特殊情況:,軟中斷子程與子程序的編寫類似, 其不同點在于: 1子程用CALL指令調(diào)用;中斷子程用INT指令調(diào)用 2子程用RET指令返回;中斷子程用IRET指令返回 3CALL指令直接用過程名做操作數(shù), 即由過程名提供子程的入口地址 INT指令由類型號N到中斷向量表中固定的單元 獲得中斷子程的入口地址,子程序的編寫步驟,1、保存寄存器內(nèi)容 2、如允許中斷嵌套,則開中斷(STI) 3、處理中斷 4、關(guān)中斷(CLI) 5、送中斷結(jié)束命令(EOI)給中斷命令寄存器 6、恢復(fù)寄存器內(nèi)容 7、返回被中斷的程序(IRET),同子程序,?,?,不同子程序,例8

19、.4 編寫一個中斷處理程序,要求在主程序運行期間,每隔 10秒響鈴一次,同時顯示The bell is ring! dseg segment count dw 1 mess db The bell is ring!,0ah,0dh,$ dseg ends cseg segment main proc far assume cs:cseg, ds:dseg, es:dseg start: push ds mov ax, ax push ax mov ax, dseg mov ds, ax,mov al, 1ch mov ah, 35h int 21h ; 取原中斷向量 push es push bx ; 保存原中斷向量 push ds mov dx, offset ring mov ax, seg ring mov ds, ax mov al, 1ch mov ah, 25h int 21

溫馨提示

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

評論

0/150

提交評論