雨の印记 发表于 2012-2-22 17:47:28

关于检测点15.1的问题~~

本帖最后由 雨の印记 于 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:
但我觉得 只要一个精简为:call dword ptr ds: 就行了,可是运行出错~




rainymay 发表于 2012-2-22 17:47:29

本帖最后由 rainymay 于 2012-2-23 15:38 编辑

call dword ptr ds:是执行int9中断吧,里面是以iret返回的,返回的时候是要恢复标志寄存器的。
call只是将CS:IP压栈,并没有pushf
所以需要自己动手pushf

雨の印记 发表于 2012-2-24 12:59:01

rainymay 发表于 2012-2-23 15:37 static/image/common/back.gif
call dword ptr ds:是执行int9中断吧,里面是以iret返回的,返回的时候是要恢复标志寄存器的。
call只是 ...

我懂了 谢啦~~
页: [1]
查看完整版本: 关于检测点15.1的问题~~