软件――汇编语言程序设计7

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

汇编语言程序设计AssemblyLanguageProgramming第七章输入/输出与中断汇编语言程序设计AssemblyLanguageProgramming——输入/输出端口接口端口端口地址——0000H~FFFFH独立编址方式:与Memory地址独立都是8位端口端口分类:数据端口,状态端口,控制端口中央处理机CPU总线控制逻辑接口接口存储器大容量存储器I/O设备I/O子系统系统总线IN/OUT指令分类:长格式:端口号00H~FFH可直接在指令中指定短格式:如果端口号256,端口号DX字节方式:INAL,25字方式:INAX,25输入指令IN格式:INAL/AX,PORT/DX举例INAL,25;AL25号端口的内容INAX,25;AX25和26端口的内容INAL,DX;AL(DX)所指端口的内容INAX,DX;AX(DX)、(DX)+1所指端口的内容01H02H252602H01H输出指令格式:OUTPORT/DX,AL/AX举例:OUT25,AL;(AL)25号端口OUT25,AX;(AX)25号端口和26号端口OUTDX,AL;AL(DX)所指端口OUTDX,AX;(AX)(DX)和(DX)+1二个端口举例-发声程序61H端口的次低位控制扬声器的开关最低位为定时器,置为1,则由8253的2号计数器来驱动;置为0,则手工驱动。1/061H放大器INAL,61HANDAL,11111100BOUT61H,ALMOVCX,1000HAGAIN:XORAL,2OUT61H,ALCALLDELAYLOOPAGAINDELAYPROCPUSHCXMOVCX,0FFFFHCONTINUE:NOPLOOPCONTINUEPOPCXRETDELAYENDP举例:查询式输入输出26H——inputregister27H——outputregister28H——statusregister(0-inputready,1-outputready)读入一个byte,取反后再输出Waitinput:INAL,28hTESTAL,1JzwaitinputINAL,26HNOTALMOVBL,ALWaitoutput:INAL,28HTESTAL,2JZWaitoutputMOVAL,BLOUT27H,AL汇编语言程序设计AssemblyLanguageProgramming——中断查询式I/O方式没问题没问题没问题没问题没问题没问题有没有问题中断(Interrupt)老师,我有问题!中断相关概念中断:计算机暂停现行程序的运行,转去执行另一程序以处理发生的事件,处理完毕后又自动返回原来的程序继续运行中断功能:CPU与I/O设备数据传送方式提供系统服务方式:DOS,BIOS上课上课提问回答问题中断屏蔽请勿提问IF中断嵌套老师,中断是什么?中断是一种数据传送方式…...老师,数据传送方式有哪些?数据传送方式有……四种!…...中断方式的特点是效率高。中断源中断逻辑陷入中断INT指令可屏蔽硬件中断非屏蔽中断异常中断0除数01单步3断点4溢出INTRNMI中断源:引起中断的事件中断向量与中断类型码中断服务子程序每种中断都有与之对应的处理程序中断向量中断服务子程序的入口地址(16位偏移地址,16位段地址)中断向量表存放中断向量的表格。256个,00000H-003FFH,1KB中断类型码表格的编号n6810A7008B017000…………E3480200……00000H00001H00002H00003H00004H00005H00006H00007H0号中断中断向量偏移地址段地址4*04*0+24*14*1+21号中断中断向量偏移地址段地址n号中断中断向量偏移地址段地址4*n4*n+2中断向量表C:\debug-d0000:00000000:00006810A7008B017000-1600A9038B0170000000:00108B017000B9061202-40071202FF0312020000:0020460712020A041202-3A00A9035400A9030000:00306E00A9038800A903-A200A903FF0312020000:0040A9081202A4091202-AA0912025D0412020000:0050B00912020D02E102-C40912028B0512020000:00600E0C1202140C1202-1F0C1202AD0612020000:0070AD061202A4F000F0-37051202183B00C00000:00807210A7007C10A700-4F03E2058A03E2050000:00901703E2058610A700-9010A7009A10A7000000:00A0B810A70054027000-F20447D7B810A7000000:00B0B810A700B810A700-4001270450097EDF0000:00C0EAAE10A700E800F0-B810A700A62402D40000:00D0B810A700B810A700-B810A700B810A700.........……8B017000………………ISRPROCFARPUSHAXSTI......…..…..…..POPAXIRETISRENDP…………主程序主程序中断请求准备响应n中断过程中断返回获取n、PUSHF、IF=0、CS/IP入栈POPFCS/IP入栈中断服务子程序与一般子程序的差别:中断服务子程序应为FAR中断响应时IF=0,子程序里一般应IF1硬件中断处理程序,最后发中断结束EOI命令返回为IRET而非RET由系统进行调用中断服务子程序的编写ISRPROCFARPUSHAX……STI;便于中断嵌套……CLIEOI(EndOfInterrupt)POPAX……IRET;中断返回ISRENDP保护现场开中断处理中断关中断发中断结束命令恢复现场中断返回原中断新中断完整中断程序的编写设置新中断向量执行新中断处理保存原中断向量N号中断向量新中断完整中断程序的编写设置新中断向量执行新中断处理调用原中断处理保存原中断向量恢复原中断处理原中断N号中断向量新中断完整中断程序的编写设置新中断向量执行新中断处理调用原中断处理保存原中断向量恢复原中断向量原中断N号中断向量OLDISRDW?,?;ES=0MOVAX,ES:[N*4]MOVOLDISR[0],AXMOVAX,ES:[N*4+2]MOVOLDISR[2],AX设置新中断向量执行新中断处理调用原中断处理保存原中断向量恢复原中断向量保存原中断向量;ES=0MOVES:[N*4],OFFSETISRMOVES:[N*4+2],SEGISR设置新中断向量执行新中断处理调用原中断处理保存原中断向量恢复原中断向量设置新中断向量设置新中断向量执行新中断处理调用原中断处理保存原中断向量恢复原中断向量………………执行新中断处理OLDISRDW?,?PUSHFCALLDWORDPTROLDISR设置新中断向量执行新中断处理调用原中断处理保存原中断向量恢复原中断向量中断过程:……PUSHF保护断点:PUSHCS;PUSHIP取中断向量,并执行调用原中断处理OLDISRDW?,?;ES=0MOVAX,OLDISR[0]MOVES:[N*4],AXMOVAX,OLDISR[2]MOVES:[N*4+2],AX设置新中断向量执行新中断处理调用原中断处理保存原中断向量恢复原中断向量恢复原中断处理通过DOS中断修改中断AH=25H——设置MOVAX,SEGISRMOVDS,AXMOVDX,OFFSETISRMOVAL,INTNOMOVAH,25HINT21HAH=35H——获取MOVAL,INTNOMOVAH,35HINT21H;ES:BX举例:定时器实现定时中断—BIOSINT08H系统加电初始化后,定时器每隔约55毫秒发出一次中断请求。INT1CH:BIOS提供的8H号中断处理程序中有一条中断指令INT1CH,所以每秒要调用到约18.2次1CH号中断处理程序。例子挂接INT1CH,显示10次字符串挂接INT1CH,从30倒计时到0……INT1CH中断向量…….显示字符串调用原中断计数中断服务子程序挂接新中断计数器=10?是否开始恢复原中断结束主程序DATASEGMENTSTRINGDB‘INT1CHISHOOKED!',0DH,0AH,'$'OLDISRDW?,?TIMERDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,0MOVES,AXMOVAX,ES:[1CH*4]MOVOLDISR[0],AXMOVAX,ES:[1CH*4+2]MOVOLDISR[2],AXMOVWORDPTRES:[1CH*4],OFFSETISRMOVWORDPTRES:[1CH*4+2],SEGISR;COUNTHEREAGAIN:CMPTIMER,10JAEEXITJMPAGAINEXIT:MOVAX,OLDISR[0]MOVES:[1CH*4],AXMOVAX,OLDISR[2]MOVES:[1CH*4+2],AXMOVAX,4C00HINT21HISRPROCFARPUSHDXPUSHAXSTI;便于中断嵌套LEADX,STRINGMOVAH,9INT21HINCTIMERPUSHFCALLDWORDPTROLDISRPOPAXPOPDXIRET;中断返回ISRENDPCODEENDSENDSTART设置新中断向量执行新中断处理调用原中断处理保存原中断向量恢复原中断向量运行结果倒计时程序Timer.asm

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功