关于call 和 ret指令。
本帖最后由 quchuan 于 2011-10-8 11:42 编辑关于 call 和 retf 指令的结合使用,有个地方我楞是没搞清楚。
call 将 CS 和 IP 分别入栈,然后 跳转。
相当于 PUSH CS
PUSH IP
JUMP s1;
实现调用。
retf 将 CS 和 IP 分别出栈,
相当于 POP IP
POP CS
实现返回。
那么问题就来了,如果 POP IP 后,按道理IP改变,那么下一条指令 就不是 POP CS了,这样,就没办法返回,程序不就应该乱套了么? 为什么 POP IP后,还能继续 POP CS 呢?
如果不是单纯的POP IP 和 POP CS 那么又什么用什么办法把IP 和 CS 同时改变的呢?
难不成先把 IP 和 CS 放到 ax和bx中, 然后直接CS:IP形式跳转??这样会不会太麻烦了??
楞是想不明白。还望高手赐教!!{:5_111:}
我觉得,这个是CPU硬件指令封装,书上的将call和retf来详细说明执行步骤,是为了让我们理解这个指令做了哪些动作,从而理解具体含义。 本帖最后由 topcookie 于 2011-10-9 18:29 编辑
微指令都是保密的,你想研究的东西已经在微指令的范围了,如果你搞清楚了就可以生产CPU了,说的是“相当于”,只是分解来说让你理解它作了什么,并不是说就是这么作的,学习不要钻牛角尖 你继续想,我相信你,想通了给我说一声!!! :L我记得书上好像有一个 搬书进盒子的比喻吧,,已经很形象了!先进后出,但是补充一下,出来的是数据,出道哪里就POP到哪里!打个比方:push eax
push ebx
....
pop ebx
pop eax
和
.
.
.
...
pop eax
pop ebx
这两个是不一样的哦,前面的是保护eax,ebx寄存器,后面的可以理解成为对换eax,ebx寄存器的内容 大家好,我也是刚学汇编,看了这位同学的一问,我觉得call指令 是用汇编语法来解释汇编,其实却不存在这样的指令。也许他们就是定义好了,cs和ip就是一起的。
页:
[1]