鱼C论坛

 找回密码
 立即注册
查看: 3126|回复: 2

关于检测点15.1的问题~~

[复制链接]
发表于 2012-2-22 17:47:28 | 显示全部楼层 |阅读模式
2鱼币
本帖最后由 雨の印记 于 2012-2-22 19:24 编辑

题目是要精简一下int 9 中断例程,题目中提示说 在进入中断例程后IF和TF都已经置0了,没有必要再进行设置了。

是不是说 当我们按下一个键后 CPU开始执行int 9中断例程 书上说 int指令在执行的时候,cpu进行下面的工作。(1) 取中断类型码n;  (2) 标志寄存器入栈 (3) IF=0,TF=0 (4)cs、ip入栈 (5)(ip)=(n*4),(cs)=(n*4+2)
我理解为 在执行int9例程之前就已经做好了 标志寄存器入栈和将IF=0和TF=0
书上给了两个空 我在网上找了一下别人提供的答案为:pushf             call dowrd ptr ds:[0]
但我觉得 只要一个精简为:call dword ptr ds:[0] 就行了,可是运行出错~




最佳答案

查看完整内容

call dword ptr ds:[0]是执行int9中断吧,里面是以iret返回的,返回的时候是要恢复标志寄存器的。 call只是将CS:IP压栈,并没有pushf 所以需要自己动手pushf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-22 17:47:29 | 显示全部楼层
本帖最后由 rainymay 于 2012-2-23 15:38 编辑

call dword ptr ds:[0]是执行int9中断吧,里面是以iret返回的,返回的时候是要恢复标志寄存器的。
call只是将CS:IP压栈,并没有pushf
所以需要自己动手pushf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-2-24 12:59:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 09:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表