资源预览内容
第1页 / 共37页
第2页 / 共37页
第3页 / 共37页
第4页 / 共37页
第5页 / 共37页
第6页 / 共37页
第7页 / 共37页
第8页 / 共37页
第9页 / 共37页
第10页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
汇编语言程序设计 Assembly Language Programming,第七章 输入/输出与中断,汇编语言程序设计 Assembly Language Programming,输入/输出,端口,接口端口 端口地址0000HFFFFH 独立编址方式:与Memory地址独立 都是8位端口 端口分类:数据端口,状态端口,控制端口,IN/OUT指令,分类: 长格式:端口号00HFFH可直接在指令中指定 短格式:如果端口号 256,端口号 DX 字节方式:IN AL, 25 字方式:IN AX, 25,输入指令IN,格式:IN AL/AX, PORT/DX 举例 IN AL,25 ; AL25号端口的内容 IN AX,25 ; AX 25和26端口的内容 IN AL,DX ; AL (DX)所指端口的内容 IN AX,DX ; AX (DX)、(DX)+1所指端口的内容,输出指令,格式:OUT PORT/DX, AL/AX 举例: OUT 25,AL ; (AL) 25号端口 OUT 25,AX ; (AX) 25号端口和26号端口 OUT DX,AL; AL (DX)所指端口 OUT DX,AX; (AX) (DX)和(DX)+1二个端口,举例-发声程序,61H端口的次低位控制扬声器的开关 最低位为定时器,置为1,则由8253的2号计数器来驱动;置为0,则手工驱动。,61H,放大器,IN AL, 61H AND AL, 11111100B OUT 61H, AL MOV CX,1000H AGAIN: XOR AL,2 OUT 61H, AL CALL DELAY LOOP AGAIN,DELAY PROCPUSH CXMOV CX,0FFFFHCONTINUE:NOPLOOP CONTINUEPOP CXRET DELAY ENDP,举例:查询式输入输出,26Hinput register 27Houtput register 28Hstatus register(0-input ready,1-output ready) 读入一个byte,取反后再输出,Waitinput:IN AL, 28hTEST AL, 1 Jz waitinput IN AL,26H NOT AL MOV BL,AL,Waitoutput:IN AL,28HTEST AL, 2 JZ Waitoutput MOV AL,BL OUT 27H,AL,汇编语言程序设计 Assembly Language Programming,中断,查询式I/O方式,没问题,没问题,没问题,没问题,没问题,没问题,有没有问题,中断(Interrupt),老师,我有问题!,中断相关概念,中断: 计算机暂停现行程序的运行,转去执行另一程序以处理发生的事件,处理完毕后又自动返回原来的程序继续运行 中断功能: CPU与I/O设备数据传送方式 提供系统服务方式:DOS,BIOS,中 断 屏 蔽,中 断 嵌 套,老师,中断是什么?,中断是一种数据传送方式.,老师,数据传送方式有哪些?,数据传送方式有四种!,.中断方式的特点是效率高。,中 断 源,中断逻辑,陷入中断 INT指令,可屏蔽 硬件中断,非屏蔽 中断,异常中断,INTR,NMI,中断源:引起中断的事件,中断向量与中断类型码,中断服务子程序 每种中断都有与之对应的处理程序 中断向量 中断服务子程序的入口地址(16位偏移地址,16位段地址) 中断向量表 存放中断向量的表格。 256个,00000H-003FFH, 1KB 中断类型码 表格的编号 n,4*0,4*0+2,4*1,4*1+2,4*n,4*n+2,中断向量表,C:debug -d 0000:0000 0000:0000 68 10 A7 00 8B 01 70 00-16 00 A9 03 8B 01 70 00 0000:0010 8B 01 70 00 B9 06 12 02-40 07 12 02 FF 03 12 02 0000:0020 46 07 12 02 0A 04 12 02-3A 00 A9 03 54 00 A9 03 0000:0030 6E 00 A9 03 88 00 A9 03-A2 00 A9 03 FF 03 12 02 0000:0040 A9 08 12 02 A4 09 12 02-AA 09 12 02 5D 04 12 02 0000:0050 B0 09 12 02 0D 02 E1 02-C4 09 12 02 8B 05 12 02 0000:0060 0E 0C 12 02 14 0C 12 02-1F 0C 12 02 AD 06 12 02 0000:0070 AD 06 12 02 A4 F0 00 F0-37 05 12 02 18 3B 00 C0 0000:0080 72 10 A7 00 7C 10 A7 00-4F 03 E2 05 8A 03 E2 05 0000:0090 17 03 E2 05 86 10 A7 00-90 10 A7 00 9A 10 A7 00 0000:00A0 B8 10 A7 00 54 02 70 00-F2 04 47 D7 B8 10 A7 00 0000:00B0 B8 10 A7 00 B8 10 A7 00-40 01 27 04 50 09 7E DF 0000:00C0 EA AE 10 A7 00 E8 00 F0-B8 10 A7 00 A6 24 02 D4 0000:00D0 B8 10 A7 00 B8 10 A7 00-B8 10 A7 00 B8 10 A7 00 ., ISR PROC FAR PUSH AX STI POP AX IRET ISR ENDP ,中 断 过 程,获取n、 PUSHF 、IF=0、CS/IP入栈,POPF CS/IP入栈,中断服务子程序,与一般子程序的差别: 中断服务子程序应为FAR 中断响应时IF=0,子程序里一般应IF1 硬件中断处理程序,最后发中断结束EOI命令 返回为IRET而非RET 由系统进行调用,中断服务子程序的编写,ISR PROC FARPUSH AX STI ;便于中断嵌套CLIEOI (End Of Interrupt)POP AX IRET ;中断返回 ISR ENDP,保护现场,开中断,处理中断,关中断,发中断结束命令,恢复现场,中断返回,原中断,新中断,完整中断程序的编写,设置新中断向量,执行新中断处理,保存原中断向量,N号中断向量,新中断,完整中断程序的编写,设置新中断向量,执行新中断处理,调用原中断处理,保存原中断向量,恢复原中断处理,原中断,N号中断向量,新中断,完整中断程序的编写,设置新中断向量,执行新中断处理,调用原中断处理,保存原中断向量,恢复原中断向量,原中断,N号中断向量,OLDISR DW ?,?; ES = 0 MOV AX, ES:N*4 MOV OLDISR0, AX MOV AX, ES:N*4+2 MOV OLDISR2, AX,设置新中断向量,执行新中断处理,调用原中断处理,保存原中断向量,恢复原中断向量,保存原中断向量,; ES = 0 MOV ES:N*4, OFFSET ISR MOV ES:N*4+2, SEG ISR,设置新中断向量,执行新中断处理,调用原中断处理,保存原中断向量,恢复原中断向量,设置新中断向量,设置新中断向量,执行新中断处理,调用原中断处理,保存原中断向量,恢复原中断向量,执行新中断处理,OLDISR DW ?,?PUSHF CALL DWORD PTR OLDISR,设置新中断向量,执行新中断处理,调用原中断处理,保存原中断向量,恢复原中断向量,中断过程: PUSHF 保护断点:PUSH CS; PUSH IP 取中断向量,并执行,调用原中断处理,OLDISR DW ?,?; ES = 0 MOV AX, OLDISR0 MOV ES:N*4, AX MOV AX, OLDISR2 MOV ES:N*4+2, AX,设置新中断向量,执行新中断处理,调用原中断处理,保存原中断向量,恢复原中断向量,恢复原中断处理,通过DOS中断修改中断,AH=25H设置MOV AX, SEG ISRMOV DS,AXMOV DX, OFFSET ISRMOV AL, INTNOMOV AH, 25HINT 21H AH=35H获取MOV AL, INTNOMOV AH,35HINT 21H ;ES:BX,举例:定时器实现,定时中断 BIOS INT 08H系统加电初始化后,定时器每隔约55毫秒发出一次中断请求。 INT 1CH :BIOS提供的8H号中断处理程序中有一条中断指令INT 1CH,所以每秒要调用到约18.2次1CH号中断处理程序。 例子 挂接INT 1CH,显示10次字符串 挂接INT 1CH,从30倒计时到0,挂接新中断,主程序,运 行 结 果,倒计时程序,Timer.asm,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号