收藏 分享(赏)

第7章+输入输出和中断.ppt

上传人:gnk289057 文档编号:9233790 上传时间:2019-07-30 格式:PPT 页数:51 大小:238.50KB
下载 相关 举报
第7章+输入输出和中断.ppt_第1页
第1页 / 共51页
第7章+输入输出和中断.ppt_第2页
第2页 / 共51页
第7章+输入输出和中断.ppt_第3页
第3页 / 共51页
第7章+输入输出和中断.ppt_第4页
第4页 / 共51页
第7章+输入输出和中断.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、第7章 输入/输出和中断,CPU和外设,CPU,MEM,I/O设备,总线,I/O接口,查询方式 (程序控制方式)中断方式DMA方式 (直接存储器存取方式/成组传送方式),I/O 设备的数据传送方式,I/O 指令是主机与外设进行通信的最基本途径。DOS 功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。例:循环测试某状态寄存器的第2位是否为1AGAIN: IN AL, STATUS_PORTTEST AL, 00000100BJZ AGAIN,程序直接控制 I/O 方式,读I/O状态,准备好?,传送数据,N,Y,IN AL,DATA_PORT,I/O 指令是主机与外设进行

2、通信的最基本途径。DOS 功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。例:循环测试某状态寄存器的第2位是否为1AGAIN: IN AL, STATUS_PORTTEST AL, 00000100BJZ AGAIN,程序直接控制 I/O 方式,读I/O状态,准备好?,传送数据,N,Y,MOV AL, DATA OUT DATA_PORT, AL,轮流查询几种I/O设备: DEV1: IN AL, STAT1TEST AL, STAT1_BITJZ DEV2CALL FAR PTR PROC1 DEV2: IN AL, STAT2TEST AL, STAT2_BITJ

3、Z DEV3CALL FAR PTR PROC2 DEV3: IN AL, STAT3TEST AL, STAT3_BITJZ DEV1CALL FAR PTR PROC3,优:程序安排或修改 设备的优先次序 缺:查询等待浪费CPU大量有效时间,例:Sound 程序,mov dx, 100in al, 61hand al, 11111100b sound: xor al, 2out 61h, almov cx, 140h wait1: loop wait1dec dxjne sound,.model tiny .code .startup call speaker_on mov ah, 1 i

4、nt 21h call speaker_off .exit 0,speaker_on procpush axin al, 61hor al, 3 out 61h, alpop axret speaker_on endpspeaker_off procpush axin al, 61hand al, 0fchout 61h, alpop axret speaker_off endpend,例:Sound 程序2,print proc nearpush axpush dxmov dx, 378h ; 数据寄存器out dx, al mov dx, 379h ; 状态寄存器 again: in al

5、, dxtest al, 80h ; (dx)7 = busyje again ; =0,打印机忙mov dx, 37ah ; 控制寄存器mov al, 0dhout dx, al ; 送选通信号jmp $+2 ; 展宽选通信号mov al, 0chout dx, alpop dxpop axret print endp,例:打印机查询输出子程序,0 0 0 0 1 1 0 1,选通位,自动换行,初始化,选择位,中断位,37AH,中断源:引起中断的事件外中断(硬中断):外设的 I/O 请求 可屏蔽中断电源掉电 / 奇偶错 非屏蔽中断内中断(软中断):INT 指令 / CPU 错(除法错、溢出)

6、/ 为调试程序设置的中断,中断传送方式,80x86 中断源:,设置CPU中断允许位:FLAGS 中的 IF 位 = 1 允许中断 ( STI )= 0 禁止中断 ( CLI ) 设置中断屏蔽位:中断屏蔽寄存器的中断屏蔽位 = 0 允许I/O设备请求中断 = 1 禁止I/O设备请求中断,中断的条件:,IN AL, 21H AND AL,0FDH OUT 21H,AL,类型0的(IP),类型0的(CS),类型1的(IP),类型1的(CS),类型N的(IP),类型N的(CS),类型255的(IP),类型255的(CS),00000,00004,4*N,003FC,中断向量中断处理程序的入口地址(段址

7、):(偏址),中断向量表,用户可利用保留的中断类型号 扩充自己需要的中断功能。,CPU中断过程:(1)取中断类型:CPU type N (2)保护现场:FLAGS、CS、IP入栈 (3)IF=0, TF=0 (4)取中断向量:(4N) IP(4N2) CS (5)转中断处理程序,例:为中断类型 N 设置中断向量MOV AX, 0MOV ES, AXMOV BX, N*4MOV AX, OFFSET INTHANDMOV ES: WORD PTRBX, AX ;偏移地址(N*4)MOV AX, SEG INTHANDMOV ES: WORD PTRBX+2,AX ;段地址(N*4+2)INTHA

8、ND: ;中断处理程序IRET,DOS 功能调用(21H)存取中断向量:设置中断向量: AH = 25H AL = 中断类型号 DS : DX = 中断向量 INT 21H取中断向量: AH = 35H AL = 中断类型号 INT 21H 返回时送 ES : BX = 中断向量,MOV 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 ;

9、设置新的中断向量 POP DS POP DX POP DS MOV AL, N MOV AH, 25H INT 21H ; 恢复原中断向量 INTHAND: ; 中断处理程序 IRET,例:用 DOS 功能调用存取中断向量,中断程序的编写步骤:主程序: 设置中断向量 设置 CPU 的中断允许位 IF 设置设备的中断屏蔽位中断处理子程序: 保存寄存器内容 如允许中断嵌套,则开中断 ( STI ) 中断处理功能 关中断 送中断结束命令( EOI )给中断命令寄存器 恢复寄存器内容 IRET中断返回,例: 编写一个中断处理程序,要求在主程序运行期间,每隔 10秒响铃一次,同时显示 bell ,定时器

10、 中断 18.2次/SEC,; INT_TIMERINT 1CHIRET,INT_1CH PROCIRETINT_ICH ENDP,RING PROC 1.计数182(10秒) 2.显示字符串IRET RING ENDP,例:编写一个中断处理程序,要求在主程序运行期间,每隔 10 秒响铃一次,并显示 bell,.model small .stack .datacnt dw 1 mes db bell,0ah,0dh,$.codemain proc far start:mov ax, datamov ds, ax,mov al, 1ch mov ah, 35h int 21h push es p

11、ush bxpush ds mov dx, offset ring mov ax, seg ring mov ds, ax mov al, 1ch mov ah, 25h int 21h pop dsin al, 21h and al, 11111110b out 21h, al sti,mov di, 30000 dly: mov si, 60000 dly1:dec sijnz dly1dec dijnz dly ;主程序pop dxpop dsmov al, 1chmov ah, 25hint 21h mov ax, 4c00hint 21hmain endp,例:键盘模拟程序,字符码:

12、采用ASCII 码表示字母、数字、专用字符和一些非打印字符,键盘上的控制键和功能键的ASCII码为0,必须用扫描码来识别。扫描码:键盘上的每个键都对应一个扫描码,扫描码是按键的位置来排列的。data segmentscatab db 0,0,1234567890-=,8,0db qwertyuiop,0dh,0db asdfghjkl;,0,0,0,0db zxcvbnm,./,0,0,0db ,0,0,0,0,0,0,0,0,0,0,0,0,0db 789-456+1230,0 data ends,例:从键盘接收字符,同时对32字节的输入缓冲区进行测试;如缓冲区已满,将键盘挂起,由打印机输出

13、一个提示信息,MAIN,BUFFER满CALLCALLIRET,N,KBD中断32次,TYP中断17次,KBINT,IRET,PRINT,RET,DISP,RET,INTIP,例:从键盘接收字符,同时对32字节的输入缓冲区进行 测试;如缓冲区已满,将键盘挂起,由打印机输出一个提示信息程序包括以下几个部分:main 初始化部分 kbint 键盘中断处理程序 intip 初始化打印机 prtint 打印机中断处理程序 disp 用十六进制显示al中的内容,dseg segmentaddr dw ? ;缓冲区指针count dw ?buffer db 20h dup ( )prompt db ple

14、ase input:,0dh,0ah,$message db buffer overflow,0dh,0ahsave_ip9 dw ?save_cs9 dw ?save_ipf dw ?save_csf dw ? dseg endsmain proc far mov addr, offset buffer mov count, 0,mov al, 09 ;键盘 mov ah, 35h int 21h mov save_ip9, bx mov save_cs9, es mov dx, offset kbint push ds mov ax, seg kbint mov ds, ax mov al

15、, 09 mov ah, 25h int 21h pop ds in al, 21h and al, 0fdh out 21h, al,kbint proc nearpush axpush bxin al, 60hpush axin al, 61hmov ah, alor al, 80hout 61h, al;送键盘应答信号xchg ah, alout 61h, al;复位键盘pop axtest al, 80hjnz ret1 ;通码时处理,intip proc nearpush axpush bxpush dxclimov bx, offset messagemov addr, bxmov

16、 dx, 378hmov al, 0dhout dx, al ;输出回车mov dx, 37ahmov al, 1dhout dx, al ;送选通信号jmp $+2 ;展宽选通信号mov al, 1chout dx, alpop dxpop bxpop ax ret intip endp,子程序调用,主程序 CALL SUBP,子程序RET,DOS/BIOS调用,源程序INT n,DOS/BIOS例行程序IRET,实现机制不同,BIOS和DOS基本调用调用方法: 1、将调用参数装入指定的寄存器中; 2、BIOS或DOS功能号装入AH; 3、如需子功能号,把它装入AL; 4、按中断号调用DOS

17、或BIOS中断(INT); 5、检查或取得返回参数。,例:DOS调用:键盘输入,显示输出MOV AH, 01 ;DOS功能号:键盘输入 INT 21H ;DOS调用MOV CHAR, AL ;返回参数: (AL)MOV DL, A ;调用参数: 输出字符MOV AH, 02 ; DOS功能号: 显示输出INT 21H ; DOS调用,1. 键盘I/O(1) BIOS键盘中断 ( INT 16H),AH 功能 返回参数0 从键盘读一字符 AL=字符码,AH=扫描码1 读键盘缓冲区的字符 如ZF=0,AL=字符码,AH=扫描码如ZF=1,缓冲区空2 取键盘状态字节 AL=键盘状态字节,字符数字键

18、字符码为ASCII 码功能键、控制键 字符码为0,对应一个扫描码,DOS键盘中断 ( INT 21H),AH 功 能 调用参数 返回参数,1 从键盘输入一个字符并回显在屏幕上 AL=字符 6 读键盘字符,不回显 DL= 0FFH 若有字符可取,AL=字符,ZF=0 若无字符可取,AL=0,ZF=1 7 从键盘输入一个字符,不回显 AL=字符 8 从键盘输入一个字符,不回显, AL=字符 检测Ctrl-BreakA 输入字符到缓冲区 DS:DX = 缓冲区首址 B 读键盘状态 AL=0FFH有键入,AL=00无键入 C 清除键盘缓冲区, AL=键盘功能号并调用一种键盘功能 (1,6,7,8或A)

19、,例: 输入字符串到缓冲区STRINGDATA SEGMENTMAXLEN DB 32 MAXLEN DB 32 ,0, 32 DUP(?)ACTLEN DB ? MAXLEN DB 32 ,33 DUP(?)STRING DB 32 DUP(?) DATA ENDS CODE SEGMENTLEA DX,MAXLENMOV AH,0AHINT 21H CODE ENDSEND,MAXLEN,ACTLEN,STRING,显示器I/O文本方式 ASCII字符,单色属性,前景,闪烁,背景,BL R G B I R G B,16色属性,BIOS显示中断 INT 10H功能号 AH=0,1, 2, 3

20、, 5, 6, 7, 8, 9, 0AH, 0EH 13H (p.328)例:清除屏幕mov ah, 6 ; 屏幕初始化mov al, 0 ; 全屏空白mov bh, 7 ; 卷入行属性mov ch, 0 ; 左上角行号mov cl, 0 ; 左上角列号mov dh, 24 ; 右下角行号mov dl, 79 ; 右下角列号int 10h ; BIOS调用,定义窗口,例: 在品红背景下,显示5个浅绿色闪烁的星号。MOV AH,09 ;光标位置下显示MOV AL,* ;显示字符MOV BH,0 ;显示页0MOV BL,0DAH ; 1 101 1010 (表9.7)MOV CX,05 ;显示次数

21、INT 10H ;BIOS调用,例:在屏幕上以红底兰字显示字符串:“WORLD SCENERY”STRING DB WORLD SCENERY ;定义在ES段LEN_TR DW 13MOV AL,3 ;8025, 16色文 本方式MOV AH,0 INT 10HMOV BP,SEG STRING MOV ES,BP ;串地址ES:BPMOV BP,OFFSET STRING MOV CX,LEN_STR ;串长度 MOV DX,0 ;起始行列MOV BX,0041H ;0100 0001(属性)MOV AL,1 ;子功能MOV AH,13H ;显示字符串INT 10H,(2) DOS显示功能调

22、用中断 INT 21H,AH 功 能 调 用 参 数2 显示一个字符(检验Ctrl-Break) DL = 字符 光标跟随字符移动6 显示一个字符(不检验Ctrl-Break) DL = 字符 光标跟随字符移动9 显示字符串 DS:DX=串地址串必须以$结束,光标跟随串移动,例:显示字符串MESSAGE DB The sort operation is finished.,13,10,$ MOV AH,9MOV DX,SEG MESSAGEMOV DS,DXMOV DX,OFFSET MESSAGEINT 21H,打印机I/O,例: 打印字符串TEXT (DOS)TEXT DB Hello,e

23、verybody! COUNT EQU $TEXT ;COUNT=17MOV CX,COUNTMOV BX,0 NEXT: MOV AH,5 MOV DL,TEXTBX INT 21HINC BX LOOP NEXT,例: 打印字符串TEXT(BIOS)TEXT DB Hello,everybody! COUNT EQU $TEXTMOV CX, COUNTMOV BX, 0 NEXT: MOV AH, 0 MOV AL,TEXTBX MOV DX,0 ;打印机号INT 17HINC BXLOOP NEXT,串行通信口I/O,DOS 串行通信口功能 (INT 21H),(2)BIOS 串行通信口功能 (INT 14H),例. 从串行口输入字符,MOV AH, 3 ;读字符INT 21H ;DOS调用MOV CHAR, AL ;(AL)=读入字符 CHAR DB 0,例. 初始化COM1端口,MOV AH, 0 ;读字符MOV DX, 0 ;COM1MOV AL, 0C3H ;4800,n,1,8INT 14H ;BIOS调用,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报