IBM-PC汇编语言程序设计第二版第8章

上传人:杰猫 文档编号:122978206 上传时间:2020-03-08 格式:PPT 页数:32 大小:235.50KB
返回 下载 相关 举报
IBM-PC汇编语言程序设计第二版第8章_第1页
第1页 / 共32页
IBM-PC汇编语言程序设计第二版第8章_第2页
第2页 / 共32页
IBM-PC汇编语言程序设计第二版第8章_第3页
第3页 / 共32页
IBM-PC汇编语言程序设计第二版第8章_第4页
第4页 / 共32页
IBM-PC汇编语言程序设计第二版第8章_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《IBM-PC汇编语言程序设计第二版第8章》由会员分享,可在线阅读,更多相关《IBM-PC汇编语言程序设计第二版第8章(32页珍藏版)》请在金锄头文库上搜索。

1、第八章 输入输出程序设计 CPUMEM I O设备 总线 I O接口 1 查询方式 程序控制方式 中断方式 DMA方式 直接存储储器存取方式 成组传组传 送方式 1 I O 设备的数据传送方式 2 I O 指令是主机与外设进设进 行通信的最基本途 径 DOS 功能调调用和BIOS例行程序中的输输入 输输 出功能也是由IN和OUT指令完成的 例 循环测试某状态寄存器的第2位是否为1 AGAIN IN AL STATUS PORT TEST AL 00000100B JZ AGAIN 2 程序直接控制 I O 方式 读I O状态 准备好 传送数据 N Y IN AL DATA PORT 3 I O

2、 指令是主机与外设进设进 行通信的最基本途 径 DOS 功能调调用和BIOS例行程序中的输输入 输输 出功能也是由IN和OUT指令完成的 例 循环测试某状态寄存器的第2位是否为1 AGAIN IN AL STATUS PORT TEST AL 00000100B JZ AGAIN 2 程序直接控制 I O 方式 读I O状态 准备好 传送数据 N Y MOV AL DATA OUT DATA PORT AL 4 轮流查询几种I O设备 DEV1 INAL STAT1 TESTAL STAT1 BIT JZDEV2 CALLFAR PTR PROC1 DEV2 INAL STAT2 TESTAL

3、 STAT2 BIT JZDEV3 CALLFAR PTR PROC2 DEV3 INAL STAT3 TESTAL STAT3 BIT JZDEV1 CALLFAR PTR PROC3 优 程序安排或修改 设备的优先次序 缺 查询等待浪费 CPU大量有效时间 5 设备设备 控制寄存器 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 so

4、und 6 model tiny code startup call speaker on mov ah 1 int 21h call speaker off exit 0 speaker on proc push ax in al 61h or al 3 out 61h al pop ax ret speaker on endp speaker off proc push ax in al 61h and al 0fch out 61h al pop ax ret speaker off endp end 例 Sound 程序2 7 print proc near push ax push

5、dx mov dx 378h 数据寄存器 out dx al mov dx 379h 状态态寄存器 again in al dx test al 80h dx 7 busy je again 0 打印机忙 mov dx 37ah 控制寄存器 mov al 0dh out dx al 送选选通信号 jmp 2 展宽选宽选 通信号 mov al 0ch out dx al pop dx pop ax ret print endp 例 打印机查询输出子程序 0 0 0 0 1 1 0 1 选通位 自动换行初 始 化 选 择 位 中 断 位 37AH 8 中断源 引起中断的事件 外中断 硬中断 外设设

6、的 I O 请请求 可屏蔽中断 电电源掉电电 奇偶错错 非屏蔽中断 内中断 软软中断 INT 指令 CPU 错错 除法错错 溢出 为调试为调试 程序设设置的中断 3 中断传送方式 9 非屏蔽中断请求 中断逻辑 INT nINTO除法错单步 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 80 x86 中断源 10 设置CPU中断允许位 FLAGS 中的 IF 位 1 允许中断

7、STI 0 禁止中断 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 EOI MOV AL 20H OUT 20H AL 8259A 中断的条件 IN AL 21H AND AL 0FDH OUT 21H AL 11 类类型0的 IP 类类型0的 CS 类类型1的 IP 类类型1的 CS 类类型N的 IP 类类型N的 CS 类类型255的 IP 类类型255的 CS 00000 00004 4 N 003

8、FC 中断向量 中断处处理程序的入口 地址 段址 偏址 中断向量表 用户户可利用保留的中断类类型号 扩扩充自己需要的中断功能 12 CPU中断过程 1 取中断类型 CPU type N 2 保护现场 FLAGS CS IP入栈 3 IF 0 TF 0 4 取中断向量 4 N IP 4 N 2 CS 5 转中断处理程序 13 例 为中断类型 N 设置中断向量 MOV AX 0 MOV ES AX MOV BX N 4 MOV AX OFFSET INTHAND MOV ES WORD PTR BX AX 偏移地址 N 4 MOV AX SEG INTHAND MOV ES WORD PTR BX

9、 2 AX 段地址 N 4 2 INTHAND 中断处理程序 IRET 14 DOS 功能调用 21H 存取中断向量 设置中断向量 AH 25H AL 中断类型号 DS DX 中断向量 INT 21H 取中断向量 AH 35H AL 中断类型号 INT 21H 返回时送 ES BX 中断向量 15 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 设设置新

10、的中断向量 POP DS POP DX POP DS MOV AL N MOV AH 25H INT 21H 恢复原中断向量 INTHAND 中断处处理程序 IRET 例 用 DOS 功能调用存取中断向量 16 中断程序的编写步骤 主程序 1 设设置中断向量 2 设设置 CPU 的中断允许许位 IF 3 设设置设备设备 的中断屏蔽位 中断处理子程序 1 保存寄存器内容 2 如允许许中断嵌套 则则开中断 STI 3 中断处处理功能 4 关中断 5 送中断结结束命令 EOI 给给中断命令寄存 器 6 恢复寄存器内容 7 IRET中断返回 17 例 编写一个中断处理程序 要求在主程序运行期间 每隔

11、10秒响铃一次 同时显示 bell 定时器 中断 18 2次 SEC INT TIMER INT 1CH IRET INT 1CH PROC IRET INT ICH ENDP RING PROC 1 计数182 10秒 2 显示字符串 IRET RING ENDP 18 例 编写一个中断处理程序 要求在主程序运行期间 每隔 10 秒响铃一次 并显示 bell model small stack data cnt dw 1 mes db bell 0ah 0dh code main proc far start mov ax data mov ds ax mov al 1ch mov ah 3

12、5h 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 21h pop ds in al 21h and al 11111110b out 21h al sti 19 mov di 30000 dly mov si 60000 dly1 dec si jnz dly1 dec di jnz dly 主程序 pop dx pop ds mov al 1ch mov ah 25h int 21h mov ax 4c00h int 21h mai

13、n endp ring proc near 保存寄存器 mov ax data mov ds ax sti 开中断 dec cnt jnz exit mov dx offset mes mov ah 09 int 21h call sound mov cnt 182 exit cli 关中断 恢复寄存器 iret ring endp end start 20 例 键盘模拟程序 字符码码 采用ASCII 码表示字母 数字 专用字符和一些 非打印字符 键盘 上的控制键和功能键的ASCII 码为 0 必须用扫描码来识别 扫扫描码码 键盘 上的每个键都对应 一个扫描码 扫描码是按 键的位置来排列的 d

14、ata segment scatab db 0 0 1234567890 8 0 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 0 data ends 21 main proc far lea bx scatab key 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 复位应答

15、位 pop ax cmp al 01 jz exit 按Esc退出 xlatb cmp al 0 jz no disp call disp char no disp jmp key in exit main endp disp char proc near mov ah 2 mov dl al int 21h ret disp char endp 7 6 5 4 3 2 1 0 设备控制寄存器 61H 键盘 22 例 从键盘接收字符 同时对32字节的输入缓冲区进行 测试 如缓冲区已满 将键盘挂起 由打印机输出 一个提示信息 MAIN BUFFER满 CALL CALL IRET N KBD 中

16、断 32次 TYP 中断 17次 KBINT IRET PRINT RET DISP RET INTIP 23 例 从键盘接收字符 同时对32字节的输入缓冲区进行 测试 如缓冲区已满 将键盘挂起 由打印机输出 一个提示信息 程序包括以下几个部分 main 初始化部分 kbint 键盘键盘 中断处处理程序 intip 初始化打印机 prtint 打印机中断处处理程序 disp 用十六进进制显显示al中的内容 24 dseg segment addr dw 缓冲区指针 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 ends main proc far mov addr offset buffer mov count 0 25 mov al 09 键盘 mov ah 35h int 21h mov save ip9 bx mov save cs9 e

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号