匯編語言第8章_第1頁
匯編語言第8章_第2頁
匯編語言第8章_第3頁
匯編語言第8章_第4頁
匯編語言第8章_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第八章第八章 輸入輸出程序設計輸入輸出程序設計 CPUMEMI/O設備設備總線總線I/O接口接口2查詢方式查詢方式(程序控制方式程序控制方式)中斷方式中斷方式DMA方式方式(直接存儲器存取方式直接存儲器存取方式/ /成組傳送方式成組傳送方式)1. I/O 設備的數(shù)據(jù)傳送方式設備的數(shù)據(jù)傳送方式3 I/O 指令指令是主機與外設進行通信的最基本途徑是主機與外設進行通信的最基本途徑。DOS 功能調用和功能調用和BIOS例行程序中的輸入例行程序中的輸入/ /輸出輸出功能也是由功能也是由IN和和OUT指令完成的。指令完成的。例:循環(huán)測試某例:循環(huán)測試某狀態(tài)寄存器狀態(tài)寄存器的第的第2位是否為位是否為1 A

2、GAIN: AGAIN: IN AL, IN AL, STATUS_PORTSTATUS_PORT TEST AL, 00000100B TEST AL, 00000100B JZ AGAIN JZ AGAIN2. 程序直接控制程序直接控制 I/O 方式方式 讀讀I/O狀態(tài)狀態(tài)準備好?準備好? 傳送數(shù)據(jù)傳送數(shù)據(jù)NYIN AL,DATA_PORTIN AL,DATA_PORT 4 I/O 指令指令是主機與外設進行通信的最基本途徑是主機與外設進行通信的最基本途徑。DOS 功能調用和功能調用和BIOS例行程序中的輸入例行程序中的輸入/ /輸出輸出功能也是由功能也是由IN和和OUT指令完成的。指令完成

3、的。例:循環(huán)測試某例:循環(huán)測試某狀態(tài)寄存器狀態(tài)寄存器的第的第2位是否為位是否為1 AGAIN: AGAIN: IN AL, IN AL, STATUS_PORTSTATUS_PORT TEST AL, 00000100B TEST AL, 00000100B JZ AGAIN JZ AGAIN 2. 程序直接控制程序直接控制 I/O 方式方式 讀讀I/O狀態(tài)狀態(tài)準備好?準備好? 傳送數(shù)據(jù)傳送數(shù)據(jù)NYMOV AL, DATAMOV AL, DATAOUT DATA_PORT, ALOUT DATA_PORT, AL5輪流查詢幾種輪流查詢幾種I/O設備:設備:DEV1: INAL, STAT1TE

4、STAL, STAT1_BITJZDEV2CALLFAR PTR PROC1DEV2: INAL, STAT2TESTAL, STAT2_BITJZDEV3CALLFAR PTR PROC2DEV3: INAL, STAT3TESTAL, STAT3_BITJZDEV1CALLFAR PTR PROC3優(yōu):程序安排或修改 設備的優(yōu)先次序缺:查詢等待浪費CPU大量有效時間6設備控制寄存器設備控制寄存器( 61h61h )1/0 01/0 0 控制其它外部設備控制其它外部設備與門與門放大器放大器2號定時器門控號定時器門控1 0例:例:Sound 程序程序1 mov dx, 100mov dx, 1

5、00 in al, 61hin al, 61h and al, 11111100b and al, 11111100bsound: xor al, 2sound: xor al, 2 out 61h, alout 61h, al mov cx, 140h mov cx, 140hwait1: loop wait1wait1: loop wait1 dec dx dec dx jne sound jne sound 7.model tiny.code.startupcall speaker_onmov ah, 1int 21hcall speaker_off.exit 0speaker_on p

6、roc push ax in al, 61h or al, 3 out 61h, al pop ax retspeaker_on endpspeaker_off proc push ax in al, 61h and al, 0fch out 61h, al pop ax retspeaker_off endpend例:例:Sound 程序程序28print proc nearprint proc near push ax push ax push dx push dx mov dx, mov dx, 378h378h ; ; 數(shù)據(jù)寄存器數(shù)據(jù)寄存器 out dx, al out dx, al

7、mov dx, mov dx, 379h 379h ; ; 狀態(tài)寄存器狀態(tài)寄存器again: in al, dxagain: in al, dx test al, 80h ; test al, 80h ; (dx)7 7 = busy je again je again ; =0,; =0,打印機忙打印機忙 mov dx, mov dx, 37ah 37ah ; ; 控制寄存器控制寄存器 mov al, 0dhmov al, 0dh out dx, al out dx, al ; 送選通信號送選通信號 jmp $+2jmp $+2 ; ; 展寬選通信號展寬選通信號 mov al, 0chmov

8、 al, 0ch out dx, al out dx, al pop dx pop dx pop ax pop ax ret retprint endpprint endp例:打印機查詢輸出子程序例:打印機查詢輸出子程序0 0 0 0 1 1 0 1選通位自動換行初始化選擇位中斷位37AH9中斷源:中斷源:引起中斷的事件引起中斷的事件外中斷外中斷(硬中斷硬中斷): 外設的外設的 I/O 請求請求 可屏蔽中斷可屏蔽中斷 電源掉電電源掉電 / 奇偶錯奇偶錯 非屏蔽中斷非屏蔽中斷內(nèi)中斷內(nèi)中斷(軟中斷軟中斷): INT 指令指令 / CPU 錯(除法錯、溢出)錯(除法錯、溢出)/ 為調試程序設置的中斷

9、為調試程序設置的中斷3. 中斷傳送方式中斷傳送方式10非屏蔽中斷請求非屏蔽中斷請求 中斷邏輯中斷邏輯INT nINTO除法錯除法錯單步單步 n 4 0 1CPU 2 NMI8259A可編程中斷控制器可編程中斷控制器(PIC)IR0 系統(tǒng)定時器系統(tǒng)定時器IR1 鍵盤鍵盤IR2 彩色彩色/圖形接口圖形接口IR3 保留保留IR4 串行通訊口串行通訊口IR5 保留保留IR6 軟盤軟盤IR7 打印機打印機INTR08090A0B0C0D0E0F80 x86 中斷源:中斷源:11設置設置CPU中斷允許位:中斷允許位: FLAGS 中的中的 IF 位位 = 1 允許中斷允許中斷 ( STI ) = 0 禁止

10、中斷禁止中斷 ( CLI )設置中斷屏蔽位:設置中斷屏蔽位: 中斷屏蔽寄存器的中斷屏蔽位中斷屏蔽寄存器的中斷屏蔽位 = 0 允許允許I/O設備請求中斷設備請求中斷 = 1 禁止禁止I/O設備請求中斷設備請求中斷 7 6 5 4 3 2 1 0定時器定時器鍵鍵 盤盤 打印機打印機中斷屏蔽寄存器中斷屏蔽寄存器21H 7 6 5 4 3 2 1 0中斷命令寄存器中斷命令寄存器20H EOIMOV AL, 20HOUT 20H, AL8259A中斷的條件:中斷的條件:IN AL, 21HAND AL,0FDH OUT 21H,AL12 類型類型0的的(IP) 類型類型0的的(CS) 類型類型1的的(I

11、P) 類型類型1的的(CS) 類型類型N的的(IP) 類型類型N的的(CS) 類型類型255的的(IP) 類型類型255的的(CS)0000000004 4*N003FC中斷向量中斷向量中斷處理程序的入口中斷處理程序的入口 地址(段址)地址(段址):(偏址)(偏址)中斷向量中斷向量表表用戶可利用保留的中斷類型號用戶可利用保留的中斷類型號擴充自己需要的中斷功能。擴充自己需要的中斷功能。13CPU中斷過程:中斷過程:(1)取中斷類型:)取中斷類型:CPU type N(2)保護現(xiàn)場:)保護現(xiàn)場:FLAGS、CS、IP入棧入棧(3)IF=0, TF=0(4)取中斷向量)取中斷向量:(:(4N) IP

12、 (4N2) CS(5)轉中斷處理程序)轉中斷處理程序14例例:為中斷類型為中斷類型 N 設置中斷向量設置中斷向量 MOV AX, 0 MOV AX, 0 MOV ES, AX MOV ES, AX MOV BX, N MOV BX, N* *4 4 MOV AX, OFFSET MOV AX, OFFSET INTHANDINTHAND MOV ES: WORD PTRBX, AX MOV ES: WORD PTRBX, AX ;偏移地址(N*4) MOV AX, SEG MOV AX, SEG INTHANDINTHAND MOV ES: WORD PTRBX+2,AX MOV ES: W

13、ORD PTRBX+2,AX ;段地址(N*4+2) INTHAND: INTHAND: ;中斷處理程序 IRET IRET15DOS 功能調用(功能調用(21H)存取存取中斷向量:中斷向量:設置中斷向量:設置中斷向量:AH = 25HAL = 中斷類型號中斷類型號DS : DX = 中斷向量中斷向量INT 21H取中斷向量:取中斷向量:AH = 35HAL = 中斷類型號中斷類型號INT 21H返回時送返回時送 ES : BX = 中斷向量中斷向量16MOV AL, NMOV AL, NMOV AH, 35HMOV AH, 35HINT 21HINT 21H ; ; 取原中斷向量取原中斷向量

14、PUSH ESPUSH ESPUSH BXPUSH BX ; ; 保存原中斷向量保存原中斷向量PUSH DSPUSH DSMOV AX, SEG INTHANDMOV AX, SEG INTHANDMOV DS, AX MOV DS, AX MOV DX, OFFSET INTHANDMOV DX, OFFSET INTHANDMOV AL, NMOV AL, NMOV AH, 25HMOV AH, 25HINT 21HINT 21H ; ; 設置新的中斷向量設置新的中斷向量 POP DSPOP DSPOP DXPOP DXPOP DSPOP DSMOV AL, NMOV AL, NMOV A

15、H, 25HMOV AH, 25HINT 21HINT 21H ; ; 恢復原中斷向量恢復原中斷向量INTHAND: INTHAND: ; ; 中斷處理程序中斷處理程序IRETIRET例:用例:用 DOS 功能調用存取中斷向量功能調用存取中斷向量17中斷程序的編寫步驟:中斷程序的編寫步驟:主程序:主程序:設置中斷向量設置中斷向量設置設置 CPU 的中斷允許位的中斷允許位 IF設置設備的中斷屏蔽位設置設備的中斷屏蔽位中斷處理子程序:中斷處理子程序:保存寄存器內(nèi)容保存寄存器內(nèi)容如允許中斷嵌套,則開中斷如允許中斷嵌套,則開中斷 ( STI )中斷中斷處理功能處理功能關中斷關中斷送中斷結束命令送中斷結

16、束命令( EOI )給中斷命令寄存器給中斷命令寄存器恢復寄存器內(nèi)容恢復寄存器內(nèi)容(1) IRET中斷返回中斷返回18 例例: : 編寫一個中斷處理程序,要求在主程序運行期間,編寫一個中斷處理程序,要求在主程序運行期間, 每隔每隔 1010秒響鈴一次,同時顯示秒響鈴一次,同時顯示 bell bell 定時器定時器 中斷中斷18.2次次/SEC ; INT_TIMERINT 1CH IRET INT_1CH PROC IRET INT_ICH ENDPRING PROC1.計數(shù)計數(shù)182(10秒秒)2.顯示字符串顯示字符串 IRETRING ENDP19例:編寫一個中斷處理程序,要求在主程序運行期

17、間,例:編寫一個中斷處理程序,要求在主程序運行期間, 每隔每隔 10 10 秒響鈴一次,并顯示秒響鈴一次,并顯示 bellbell.model small.stack.datacnt dw 1mes db bell,0ah,0dh,$.codemain proc farstart: mov ax, data mov ds, axmov al, 1chmov ah, 35hint 21hpush espush bxpush dsmov dx, offset ringringmov ax, seg ringringmov ds, axmov al, 1chmov ah, 25hint 21hpop

18、 dsin al, 21hand al, 11111110bout 21h, alsti20 mov di, 30000dly: mov si, 60000dly1: dec si jnz dly1 dec di jnz dly ;主程序 pop dx pop ds mov al, 1ch mov ah, 25h int 21h mov ax, 4c00h int 21hmain endpring proc nearring proc near ; ;保存寄存器保存寄存器 mov ax, data mov ds, ax sti ; ;開中斷開中斷 dec cnt jnz exit mov dx

19、, offset mes mov ah, 09 int 21h call sound mov cnt,182mov cnt,182exit: cli ; ;關中斷關中斷 ; ;恢復寄存器恢復寄存器 iretring endpring endp end start21例:鍵盤模擬程序例:鍵盤模擬程序字符碼字符碼:采用ASCII 碼表示字母、數(shù)字、專用字符和一些 非打印字符,鍵盤上的控制鍵和功能鍵的ASCII 碼為0,必須用掃描碼來識別。掃描碼掃描碼:鍵盤上的每個鍵都對應一個掃描碼,掃描碼是按 鍵的位置來排列的。data segment scatab db 0,0,1234567890-=,8,0

20、 db qwertyuiop,0dh,0 db asdfghjkl;,0,0,0,0 db zxcvbnm,./,0,0,0 db ,0,0,0,0,0,0,0,0,0,0,0,0,0 db 789-456+1230,0data ends22main proc far lea bx, scatabkey_in: in al, 60h test al, 80h ;通碼? jnz key_in push ax in al, 61h or al, 80h ;置應答位 out 61h, al and al, 7fh out 61h, al;復位應答位 pop ax cmp al, 01 jz exit

21、 ;按Esc退出 xlatbxlatb cmp al, 0 jz no_disp call disp_charno_disp: jmp key_inexit: main endpdisp_char proc near mov ah, 2 mov dl, al int 21h retdisp_char endp 7 6 5 4 3 2 1 0設備控制寄存器 61H鍵盤23例:從鍵盤接收字符,同時對例:從鍵盤接收字符,同時對32字節(jié)的輸入緩沖區(qū)進行字節(jié)的輸入緩沖區(qū)進行 測試;如緩沖區(qū)已滿,將鍵盤掛起,由打印機輸出測試;如緩沖區(qū)已滿,將鍵盤掛起,由打印機輸出 一個提示信息一個提示信息MAINBUFF

22、ER滿 CALL CALL IRETNKBD中斷32次TYP中斷17次KBINTIRETPRINTRETDISPRETINTIP24例:從鍵盤接收字符,同時對例:從鍵盤接收字符,同時對32字節(jié)的輸入緩沖區(qū)進行字節(jié)的輸入緩沖區(qū)進行 測試;如緩沖區(qū)已滿,將鍵盤掛起,由打印機輸出測試;如緩沖區(qū)已滿,將鍵盤掛起,由打印機輸出 一個提示信息一個提示信息 程序包括以下幾個部分:程序包括以下幾個部分:main main 初始化部分初始化部分kbint kbint 鍵盤中斷處理程序鍵盤中斷處理程序intip intip 初始化打印機初始化打印機prtint prtint 打印機中斷處理程序打印機中斷處理程序d

23、isp disp 用十六進制顯示用十六進制顯示alal中的內(nèi)容中的內(nèi)容 25dseg segment addr dw ? ;緩沖區(qū)指針 count dw ? buffer db 20h dup ( ) prompt db please input:,0dh,0ah,$ message db buffer overflow,0dh,0ah save_ip9 dw ? save_cs9 dw ? save_ipf dw ? save_csf dw ?dseg endsmain proc farmain proc far mov addr, offset buffer mov count, 026m

24、ov al, 09 ;鍵盤mov ah, 35hint 21hmov save_ip9, bxmov save_cs9, es mov dx, offset kbintpush dsmov ax, seg kbintmov ds, axmov al, 09mov ah, 25hint 21h pop ds in al, 21hand al, 0fdhout 21h, al mov al, 0fh ;打印機mov ah, 35hint 21h mov save_ipf, bxmov save_csf, es mov dx, offset prtintpush dsmov ax, seg prti

25、ntmov ds, axmov al, 0fhmov ah, 25hint 21h pop ds mov ah, 9lea dx, promptint 21h27 sti mov di, 8000hdly: mov si, 9000hdly1: dec si jnz dly1 dec di jnz dly mov ah, 2 mov dl, $ int 21h cli push ds mov dx, save_ip9 mov ax, save_cs9 mov ds, ax mov al, 09 mov ah, 25h int 21h pop dspush dsmov dx, save_ipfm

26、ov ax, save_csfmov ds, axmov al, 0fhmov ah, 25hint 21h pop dsin al, 21hand al, 0fdhout 21h, al stimain endpmain endp 28 kbint proc nearkbint proc near push ax push bx in al, 60h push ax in al, 61h mov ah, al or al, 80h out 61h, al ;送鍵盤應答信號 xchg ah, al out 61h, al ;復位鍵盤 pop ax test al, 80h jnz ret1 ;

27、通碼時處理通碼:通碼:(60h)7=0斷碼:斷碼:(60h)7=1 mov bx, addr mov bx, al call disp inc bx inc count mov addr, bxcheck: cmp count,32 jb ret1 ;判斷是否溢出 in al, 21h or al, 02 ;屏蔽鍵盤中斷 and al, 7fh out 21h,al ;允許打印機中斷 call intipret1: cli mov al, 20h out 20h,al ;結束鍵盤中斷 pop bx pop ax iretkbint endpkbint endp 29intip proc nearintip proc near push ax push bx push dx cli

溫馨提示

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

評論

0/150

提交評論