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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言

[2010-09-26 22:59] 检测点15.1

(1)仔细分析一下上面的int 9中断例程(即p269-p271),看看是否可以精简一下?
pushf
pushf
pop ax
and ah,11111100B
push ax
popf
call dword ptr ds:[0]

因为进入int 9中断例程后,IF和TF都置零,所以前面的代码中的置零代码
pushf
pop ax
and ah,11111100B
push ax
popf 可以去掉

所以以上代码段可以精简为:
pushf
call dword ptr ds:[0]

(2)仔细分析上面程序中的主程序,看看有什么潜在的问题?
在主程序中,如果在执行设置int 9中断例程的段地址和偏移地址的指令之间发生了键盘中断,则CPU将转去一个错误的地址执行,将发生错误。提示:注意sti和cli指令的用法。
改写方法:在pop ds:[2]指令后加入一条cli指令,并在mov es:[9*4+2],cs指令后加入一条sti指令即可。
评论次数(0)  |  浏览次数(718)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码