汇编网首页登录博客注册
zhenglxd的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  浮躁10次=fool 浮躁20次=fathead 浮躁30次=stupid 浮躁40次=pig
  • 『姓名』:small liu
  • 『性别』:男『发送消息
  • 个人说明:我现在浮躁 指数4
  • 详细信息『加为好友』
学习动态
友情链接

[2009-06-15 12:23] 检测点 15.1

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即可.
评论次数(1)  |  浏览次数(1194)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2009-06-15 15:18  ]

第二题,在恢复的时候同样也要设置。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码