PDF 292页面 检测点15.1
(1)可以精简为:
pushf
call dword ptr ds:[0]
理由:默认的IF状态=EI 则int9中断触发的时候 pushf,IF=0,TF=0都
由硬件自动完成了,所以我们要模拟int指令 调用原int9中断例程的时
候 只需要 pushf 然后call dword ptr ds:[0]就可以了
(2)仔细分析上面程序中的主程序,看看有什么潜在问题?
在主程序中,如果执行设置int9中断例程的段地址和偏移地址的指令之间
发生键盘中断,则cpu将转去一个错误的地址执行,将发生错误.
答:题目看的不是很懂,键盘中断我猜测就是在 设置入口地址的时候 刚
设置完 ip地址, 这时 发生键盘 输入 引发 键盘中断 导致错误的中断
程序甚至无法正常返回。
这个其实还蛮简单的因为默认的 IF状态为1,我们只要在设置入口地址时
候把if设置为0,设置完后再还原为1就可以.
程序如下
cli
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti
据本人观察,原int9中断,似乎在程序运行时默认的不响应键盘输入但程
序运行完会在提示符后输入 键盘输入的值.所以只要在 设置新的人口地
址前后分别 置0和置1 IF即可.
- [springaccount] 请问下我虚拟机安装完毕后怎么还不行调试哦 能否请大虾给个完整的调试过程呢 谢拉 03/31 20:25
- [michael1947] 一个软盘怎么分的A和B,我知道0面为A,1面为B,可是怎么让DOS系统知道啊,我这里输入B:,就提示 03/05 17:13
- [游客] 我按照你说的帖子用bochs模拟了dos,然后就不知道该干什么了。。。。。。到底应该如何验证啊?怎么 12/24 15:36
- [游客] 花了8天60+小时,中间的曲折和艰辛实在是。。。不过还好我挺过来了,一直一直没有放弃,我坚信付出总会 07/14 13:39
- [游客] 因为nochar 就表示非ASCII键 即没有对应ASCII的键盘输入 所以我用扫描码来判断 06/30 14:19
- [游客] 我觉得你的程序没有什么逻辑上的问题啊。出现了你的错误提示,说明这个输入的字符ascii码小于20H, 06/30 11:53
- [游客] 嗯。我觉得,不能in 16H等待键盘输入,别的就不能运行了不是,所以,肯定应该开中断的。 06/23 15:32
- [zhenglxd] 回楼上的这个 out of range是我自己设计的,如果当ah>3 或者al>7 就会提示out 06/23 09:47
- [游客] 功能设计的不错。不过在运行过程中,设置完背景色后,就会出错退出。博主自己在检查一下。在command 06/20 12:05
- [游客] 苍天弄人,亦成人 支持博主 06/19 20:59