汇编语言程序设计电子教案-白小明主编 ch6

上传人:E**** 文档编号:89442268 上传时间:2019-05-25 格式:PPT 页数:35 大小:214KB
返回 下载 相关 举报
汇编语言程序设计电子教案-白小明主编 ch6_第1页
第1页 / 共35页
汇编语言程序设计电子教案-白小明主编 ch6_第2页
第2页 / 共35页
汇编语言程序设计电子教案-白小明主编 ch6_第3页
第3页 / 共35页
汇编语言程序设计电子教案-白小明主编 ch6_第4页
第4页 / 共35页
汇编语言程序设计电子教案-白小明主编 ch6_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《汇编语言程序设计电子教案-白小明主编 ch6》由会员分享,可在线阅读,更多相关《汇编语言程序设计电子教案-白小明主编 ch6(35页珍藏版)》请在金锄头文库上搜索。

1、1,第6章 输入输出与中断,汇编语言程序设计,2,第6章 输入输出与中断,6.1 输入输出的基本概念 6.2 查询方式数据传送 6.3 80X86的中断系统 6.4 中断处理程序设计,3,本章教学要求,1.掌握输入输出指令,熟悉数据传送控制方式; 2.掌握中断的基本概念; 3.掌握用汇编语言编写输入输出程序和中断处理程序。,4,6.1 输入输出的基本概念,1、输入输出指令,5,查询方式 (程序控制方式) 中断方式 DMA方式 (直接存储器存取方式/成组传送方式),2 、数据传送控制方式,6,6.2 查询方式数据传送,I/O 指令是主机与外设进行通信的最基本途径。DOS 功能调用和BIOS例行程

2、序中的输入/输出功能也是由IN和OUT指令完成的。 例:循环测试某状态寄存器的第2位是否为1 AGAIN: IN AL, STATUS_PORT TEST AL, 00000100B JZ AGAIN IN AL,DATA_PORT,读I/O状态,准备好?,传送数据,N,Y,7,I/O 指令是主机与外设进行通信的最基本途径。DOS 功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。 例:循环测试某状态寄存器的第2位是否为1 AGAIN: IN AL, STATUS_PORT TEST AL, 00000100B JZ AGAIN,程序查询控制 I/O 方式,读I/O状态

3、,准备好?,传送数据,N,Y,MOV AL, DATA OUT DATA_PORT, AL,8,轮流查询几种I/O设备: DEV1: IN AL, STAT1 TEST AL, STAT1_BIT JZ DEV2 CALL FAR PTR PROC1 DEV2: IN AL, STAT2 TEST AL, STAT2_BIT JZ DEV3 CALL FAR PTR PROC2 DEV3: IN AL, STAT3 TEST AL, STAT3_BIT JZ DEV1 CALL FAR PTR PROC3,优:程序安排或修改 设备的优先次序 缺:查询等待浪费CPU大量有效时间,9,例:Soun

4、d 程序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 ,10,.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 sp

5、eaker_off proc push ax in al, 61h and al, 0fch out 61h, al pop ax ret speaker_off endp end,例:Sound 程序2,11,print proc near push ax push 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 ;

6、 送选通信号 jmp $+2 ; 展宽选通信号 mov al, 0ch out dx, al pop dx pop ax ret print endp,例:打印机查询输出子程序,0 0 0 0 1 1 0 1,选通位,自动换行,初始化,选择位,中断位,37AH,12,6.3 80X86的中断系统,中断源:引起中断的事件 外中断(硬中断): 外设的 I/O 请求 可屏蔽中断 电源掉电 / 奇偶错 非屏蔽中断 内中断(软中断): INT 指令 / CPU 错(除法错、溢出)/ 为调试程序设置的中断,13,80x86 中断源,14,设置CPU中断允许位: FLAGS 中的 IF 位 = 1 允许中断

7、 ( STI ) = 0 禁止中断 ( CLI ) 设置中断屏蔽位: 中断屏蔽寄存器的中断屏蔽位 = 0 允许I/O设备请求中断 = 1 禁止I/O设备请求中断,中断的条件:,IN AL, 21H AND AL,0FDH OUT 21H,AL,15,类型0的(IP),类型0的(CS),类型1的(IP),类型1的(CS),类型N的(IP),类型N的(CS),类型255的(IP),类型255的(CS),00000,00004,4*N,003FC,中断向量中断处理程序的入口 地址(段址):(偏址),中断向量表,用户可利用保留的中断类型号 扩充自己需要的中断功能。,16,CPU中断过程: (1)取中断

8、类型:CPU type N (2)保护现场:FLAGS、CS、IP入栈 (3)IF=0, TF=0 (4)取中断向量:(4N) IP (4N2) CS (5)转中断处理程序,17,例:为中断类型 N 设置中断向量 MOV AX, 0 MOV ES, AX MOV BX, N*4 MOV AX, OFFSET INTHAND MOV ES: WORD PTRBX, AX ;偏移地址(N*4) MOV AX, SEG INTHAND MOV ES: WORD PTRBX+2,AX ;段地址(N*4+2) INTHAND: ;中断处理程序 IRET,18,DOS 功能调用(21H)存取中断向量: 设

9、置中断向量: AH = 25H AL = 中断类型号 DS : DX = 中断向量 INT 21H 取中断向量: AH = 35H AL = 中断类型号 INT 21H 返回时送 ES : BX = 中断向量,19,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 ; 设置新的中断向量 POP DS POP DX POP DS MOV

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

11、EC,; INT_TIMER INT 1CH IRET,INT_1CH PROC IRET INT_ICH ENDP,RING PROC 1.计数182(10秒) 2.显示字符串 IRET RING ENDP,22,例:编写一个中断处理程序,要求在主程序运行期间, 每隔 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, 35h int 21h push e

12、s 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,23,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 main

13、 endp,24,例:键盘模拟程序,字符码:采用ASCII 码表示字母、数字、专用字符和一些 非打印字符,键盘上的控制键和功能键的ASCII 码为0,必须用扫描码来识别。 扫描码:键盘上的每个键都对应一个扫描码,扫描码是按 键的位置来排列的。 data 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,25,26,例:从键盘接收字

14、符,同时对32字节的输入缓冲区进行 测试;如缓冲区已满,将键盘挂起,由打印机输出 一个提示信息,MAIN,BUFFER满 CALL CALL IRET,N,KBD中断32次,TYP中断17次,KBINT,IRET,PRINT,RET,DISP,RET,INTIP,27,例:从键盘接收字符,同时对32字节的输入缓冲区进行 测试;如缓冲区已满,将键盘挂起,由打印机输出 一个提示信息 程序包括以下几个部分: main 初始化部分 kbint 键盘中断处理程序 intip 初始化打印机 prtint 打印机中断处理程序 disp 用十六进制显示al中的内容,28,dseg segment addr d

15、w ? ;缓冲区指针 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,29,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, 09 mov ah, 25h int 21h pop ds in al, 21h and al, 0fdh out

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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