第八章输入输出程序设计 IO设备的数据传送方式 程序直接控制O方式 中断传送方式
1 第八章 输入输出程序设计 • I/O 设备的数据传送方式 • 程序直接控制 I/O 方式 • 中断传送方式
1.IO设备的数据传送方式 查询方式 (程序控制方式) 中断方式 DMA方式 (直接存储器存取方式/成组传送方式)
2 查询方式 (程序控制方式) 中断方式 DMA 方式 (直接存储器存取方式 / 成组传送方式) 1. I/O 设备的数据传送方式
程序直接控制ⅣO方式 IO指令是主机与外设进行通信的最基本途径 DOS功能调用和BIOS例行程序中的输入/输出功能 也是由IN和OUT指令完成的。 例:循环测试某状态寄存器的第2位是否为1 AGA工N:工N AL. 27H TEST AL 00000100B JZ AGAIN
3 I/O指令是主机与外设进行通信的最基本途径。 DOS功能调用和BIOS例行程序中的输入/输出功能 也是由 IN 和 OUT 指令完成的。 例:循环测试某状态寄存器的第2位是否为1 AGAIN: IN AL, 27H TEST AL, 00000100B JZ AGAIN 2. 程序直接控制 I/O 方式
例: Sound程序1 mov dx, 100 In 1,61h and al,11111100b sound xor al 2 out 61h al mov X,140h wail: loop wait dec dx ne sound 设备控制寄存器(61h) 0 1/00 2号定时器门控 控制其它外部设备 与放大器
4 设备控制寄存器( 61h ) 1/0 0 控制其它外部设备 与 门 放大器 2号定时器门控 1 0 例:Sound 程序 1 …… mov dx, 100 in al, 61h and al, 11111100b sound: xor al, 2 out 61h, al mov cx, 140h wait1: loop wait1 dec dx jne sound ……
例: Sound程序2 speaker_on proc push ax model tiny 1 al. 61h code or 1,3 startup out 61h. al ca speaker_on pop ax mov ah 1 ret int 21h speaker_on endp call speaker_off exit o speaker_off proc push ax 1.61h and al. ofch out 61h. al pop ax ret speaker_off endp end 5
5 .model tiny .code .startup call speaker_on mov ah, 1 int 21 h call speaker_off .exit 0 speaker_on proc push ax in al, 61 h or al, 3 out 61h, al pop ax ret speaker_on endp speaker_off proc push ax in al, 61 h and al, 0fch out 61h, al pop ax ret speaker_off endp end 例:Sound 程序 2
例: Sound程序3 speaker _on proc push ax call speaker_on 1 al. 61h or 1,3 mov al. 255 out 61h. al out 42h. al pop ax mov CX, 500 ret 2: push CX speaker_on endp mov Cx. 0do00h L2a. speaker_off proc loop L2a push ax pop CX 1.61h loop L2 and al. ofch sub al 1 out 61h. al Jnz pop ax ret call speaker_off speaker_off endp
6 …… call speaker_on mov al, 255 L 1 : out 42 h , al mov cx, 500 L 2 : push cx mov cx, 0 d000 h L 2 a : loop L 2 a pop cx loop L 2 sub al, 1 jnz L 1 call speaker_off …… speaker_on proc push ax in al, 61 h or al, 3 out 61h, al pop ax ret speaker_on endp speaker_off proc push ax in al, 61 h and al, 0fch out 61h, al pop ax ret speaker_off endp …… 例:Sound 程序 3
例:打印机查询输出子程序 print proc near push ax push dx mov dx. 378h ;数据寄存器 out dx. al mov dx. 379h ;状态寄存器 again: In a test al. 80h Je agaIn 打印机忙? mov dx. 37ah ;控制寄存器 mov al. odh out dx. al 送选通信号 jmp $+2 ;展宽选通信号 mov al Och out dx. al pop dx pop ax ret print endp 7
7 print proc near push ax push dx mov dx, 378h ; 数据寄存器 out dx, al mov dx, 379h ; 状态寄存器 again: in al, dx test al, 80h je again ; 打印机忙? mov dx, 37ah ; 控制寄存器 mov al, 0dh out dx, al ; 送选通信号 jmp $+2 ; 展宽选通信号 mov al, 0ch out dx, al pop dx pop ax ret print endp 例:打印机查询输出子程序
3.中断传送方式 中断源:引起中断的事件 外中断(硬中断): 外设的IO请求 可屏蔽中断 电源掉电/奇偶错—非屏蔽中断 内中断(软中断): INT指令/CPU错(除法错、溢出)/为调试程序设置的中断
8 中断源:引起中断的事件 外中断(硬中断): 外设的 I/O 请求 —— 可屏蔽中断 电源掉电 / 奇偶错 —— 非屏蔽中断 内中断(软中断): INT 指令 / CPU 错(除法错、溢出) / 为调试程序设置的中断 3. 中断传送方式
80x86中断源: 非屏蔽中断请求 8259AIRQ0-6系统定时器 2 NMI 可R1键盘 编R2彩色/图形接口 ENTR 程 CPU 中断逻辑 3保留 断IR4串行通讯口 控 保留 制 IR6软盘 INT n INTO除法错单步 器 (PC)R7打印机
9 非屏蔽中断请求 中断逻辑 INT n INTO 除法错 单步 n 4 0 1 CPU 2 NMI 8259A 可 编 程 中 断 控 制 器 ( PIC ) IR0 系统定时器 IR1 键盘 IR2 彩色/图形接口 IR3 保留 IR4 串行通讯口 IR5 保留 IR6 软盘 IR7 打印机 INTR 08 09 0A 0B 0C 0D 0E 0F 80x86 中断源:
CPU响应外设中断请求的条件: 设置CPU中断允许位 PSW中的IF位=1允许中断(ST) 0禁止中断(CL) 设置中断屏蔽位 中断屏蔽奇存器的中断屏蔽位=0允许中断 1禁止中断 8259A 32 中断屏蔽寄存器21H 时 机 中断命令寄存器20H[Eo MOV AL 20H OUT 20H,A 10
10 设置CPU中断允许位: PSW 中的 IF 位 = 1 允许中断 ( STI ) = 0 禁止中断 ( CLI ) 设置中断屏蔽位: 中断屏蔽寄存器的中断屏蔽位 = 0 允许中断 = 1 禁止中断 7 6 5 4 3 2 1 0 定 时 器 键 盘 打 印 机 中断屏蔽寄存器21H 7 6 5 4 3 2 1 0 中断命令寄存器20H EOI MOV AL, 20H OUT 20H, AL 8259A CPU响应外设中断请求的条件: