《汇编语言(第3版)》王爽 第十五章实验
2016-12-26 21:25
323 查看
编写这个程序遇到一些问题:
因为我是在虚拟机XP中运行,但是不知道为什么一改掉原来int9中断的入口,程序就崩溃。一开始以为是程序出错,但是把书中例子和网友的程序试了一下,还是同样的问题。
后来我重新装了MS-DOS,发现问题更加严重,因为这个系统全是命令行操作,只能读取键盘输入,改变原来int9入口地址后,整个键盘就变砖头了,后面的操作也没法进行。
最后我装了一个dosbox,发现可以使用,本程序最终在这个模拟软件上调试成功。
因为我是在虚拟机XP中运行,但是不知道为什么一改掉原来int9中断的入口,程序就崩溃。一开始以为是程序出错,但是把书中例子和网友的程序试了一下,还是同样的问题。
后来我重新装了MS-DOS,发现问题更加严重,因为这个系统全是命令行操作,只能读取键盘输入,改变原来int9入口地址后,整个键盘就变砖头了,后面的操作也没法进行。
最后我装了一个dosbox,发现可以使用,本程序最终在这个模拟软件上调试成功。
;功能:在DOS下,按下A键后,除非不再松开,如果松开, ; 就满屏幕显示A,其他键照常处理 ;思路:按下键后如果是A就不停扫键码,如果扫到A弹起, ; 就满屏显示A assume cs:code stack segment db 128 dup (0) stack ends code segment start: mov ax,stack ;设置栈 mov ss,ax mov sp,128 push cs ;相对用ax传值,用栈更简洁 pop ds mov ax,0 mov es,ax mov si,offset int9 mov di,204h mov cx,offset int9end - offset int9 cld rep movsb push es:[9*4] ;保存原先int9中断地址到0:200 pop es:[200h] push es:[9*4+2] pop es:[202h] cli ;TF清零,在设地址时屏蔽中断 mov word ptr es:[9*4],204h mov word ptr es:[9*4+2],0 sti ;TF置1,重新接受可屏蔽中断 mov ax,4c00h int 21h int9: push ax push bx push cx push es mov ax,0b800h mov es,ax mov bx,0 mov cx,25*80 s1: in al,60h ;从60h端口读数据 ;送入原来int9处理得到键值 pushf ;模拟进入中断时状态寄存器保存 call dword ptr cs:[200h] ;跳转到原来in9中断处理地址 cmp al,1eh ;判断是否为A, je s1 ;如果是A就循环扫键值 cmp al,9eh ;判断是否松开A键 jne s2 ;如果已松开就满屏显示A s3: mov byte ptr es:[bx],'A' mov byte ptr es:[bx+1],2 add bx,2 loop s3 s2: pop es pop cx pop bx pop ax iret int9end: nop code ends end start
相关文章推荐
- 《汇编语言(第3版)》王爽 第十六章实验
- 《汇编语言(第3版)》王爽 第十七章实验
- 《汇编语言(第3版)》王爽 第十三章实验
- 《汇编语言(第3版)》王爽 第十二章实验
- 《汇编语言(第3版)》王爽 第十四章实验
- 《汇编语言(第3版)》王爽 第十一章实验
- 《汇编语言(第3版)》王爽 第十章实验
- 王爽《汇编语言》(第3版) 实验七
- 《汇编语言》(第三版)王爽第十三章实验13.1个人方法记录
- 王爽 《汇编语言》 实验16 将含有直接定址表的程序,安装到中断上
- 王爽《汇编语言》第8章 实验7 不使用栈的解法
- [汇编语言]《汇编语言 第3版》P121 实验4(3)自己的写法
- 王爽《汇编语言》实验12:编写0号中断的处理程序 解答
- 王爽《汇编语言》实验7
- 汇编语言(王爽)-实验9
- 《汇编语言(王爽)》(第八章、实验7寻址方式在结构化数据访问中的应用)学习笔记
- 《汇编语言(第3版)》王爽 课程设计1
- 王爽 《汇编语言》 实验14 利用CMOS RAM 显示时间
- 王爽《汇编语言》实验10:编写子程序show_str 解答
- 王爽《汇编语言》实验13:编写、应用中断例程 - 打印字符串 解答