鱼C论坛

 找回密码
 立即注册
查看: 2971|回复: 3

王爽书里十五章新9号例程中出入栈的疑问

[复制链接]
发表于 2011-9-14 16:38:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
书上新例程的结构大致如下(列出主要涉及栈操作的代码):
{
push ax
push bx
push es
...
pushf
call dword ptr...    (这步是结合检测点15.1之后做的精简)
...
pop es
pop bx
pop ax
iret
}

首先,CPU检测到中断后,取中断类型码,然后:
pushf  (TF=IF=0)
push cs
push ip
接着转到中断例程入口地址;中断例程通过iret返回,iret相当于:
pop ip
pop cs
popf
这个顺序应该没有问题吧。那结合开始提到的新例程,举个例子,如果CPU检测并转到新例程去执行,那完整的出入栈是否应该如下:
{
pushf  (TF=IF=0)
push cs
push ip      (以上是CPU检测到中断取类型码之后进行的操作,下面转入新例程)

push ax
push bx
push es
...
pushf
(call dword ptr...    这步调用原中断例程,其中出入栈指令为iret,这步对栈的操作即等同于:)
pop ip
pop cs
popf
...
pop es
pop bx
pop ax
iret
}

可这样看下来整个出入栈顺序不就都乱了么?我知道一定是我哪里搞错了,恳请各位帮忙解释一下,多谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-14 21:35:00 | 显示全部楼层
书上新例程的结构大致如下(列出主要涉及栈操作的代码):
{
push ax
push bx
push es
--------------------
pushf
call dword ptr...    (这步是结合检测点15.1之后做的精简)
-----------------------
pop es
pop bx
pop ax
iret
}

首先,CPU检测到中断后,取中断类型码,然后:
pushf  (TF=IF=0)
push cs
push ip
------------------------------
接着转到中断例程入口地址;中断例程通过iret返回,iret相当于:
pop ip
pop cs
popf
这个顺序应该没有问题吧。那结合开始提到的新例程,举个例子,如果CPU检测并转到新例程去执行,那完整的出入栈是否应该如下:
{
pushf  (TF=IF=0)
push cs
push ip      (以上是CPU检测到中断取类型码之后进行的操作,下面转入新例程)
----------------------

push ax
push bx
push es
--------------------------
...
pushf
(call dword ptr...    这步调用原中断例程,其中出入栈指令为iret,这步对栈的操作即等同于:)
pop ip
pop cs
popf
--------------------------------
...
pop es
pop bx
pop ax
iret
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-15 09:07:19 | 显示全部楼层
楼上的嘛意思?:L
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-15 18:23:40 | 显示全部楼层
还没学到这里。。。。。看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 06:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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