Cmpt 发表于 2012-10-24 21:24:14

汇编语言的pop指令

   既然pop指令的操作数不能是CS,那么iret返回指令CS和IP是如何弹出的??

脾气不坏 发表于 2012-10-24 22:08:37

iret???是不是call和 ret我也是菜鸟

4绿竹漪漪4 发表于 2012-10-25 12:30:23

首先,pop cs不是80386中的指令,这是正确的。
iret只是一个操作,它的本质是物理的.
它相当于执行
pop IP
pop CS
popf
恢复了IP,CS,flag中的值。
但可惜的是,没有pop CS这个指令,它只是相当于这样子的操作。

你问这个问题本质上出自是逻辑上的概念混淆。
iret实现了这些,它是靠CPU内部机制的,CPU内部是物理的,它可以实现这些,CPU只要将先将栈顶的值放入IP,然后将栈顶第二个位置的值放入CS,再将栈顶第三个位置的值放入flag中。再把sp加上3就OK了。
这些为什么一定要用pop cs呢?

小猪把门窗关掉了,但大灰狼可以从烟囱里爬进去。
小猪死前还问:大灰狼不可能进来的啊,他不能从门里进来!
大灰狼说:不,兄弟,世界是物理的,我可以从烟囱里进来,你把概念中的世界当作真实的世界了,这就是马克思主义所谓的形而上学!

所以,你想想,没有这个操作和CPU不能执行这个是两个概念!

========并按=====
栈的设计是为了进行函数调用 ,在早期的指令集中是有pop cs这个指令的。但80386中将其拿掉了。
页: [1]
查看完整版本: 汇编语言的pop指令