quchuan 发表于 2011-10-8 11:32:14

关于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:}

cyousui 发表于 2011-10-8 18:21:51

我觉得,这个是CPU硬件指令封装,书上的将call和retf来详细说明执行步骤,是为了让我们理解这个指令做了哪些动作,从而理解具体含义。

topcookie 发表于 2011-10-9 18:20:50

本帖最后由 topcookie 于 2011-10-9 18:29 编辑

微指令都是保密的,你想研究的东西已经在微指令的范围了,如果你搞清楚了就可以生产CPU了,说的是“相当于”,只是分解来说让你理解它作了什么,并不是说就是这么作的,学习不要钻牛角尖

gongheng 发表于 2011-10-10 21:04:18

你继续想,我相信你,想通了给我说一声!!!

BinGu 发表于 2011-10-13 11:36:47

:L我记得书上好像有一个 搬书进盒子的比喻吧,,已经很形象了!先进后出,但是补充一下,出来的是数据,出道哪里就POP到哪里!打个比方:push eax
push ebx
....
pop ebx
pop eax

.
.
.
...
pop eax
pop ebx
这两个是不一样的哦,前面的是保护eax,ebx寄存器,后面的可以理解成为对换eax,ebx寄存器的内容

徐缘 发表于 2011-10-13 17:03:43

大家好,我也是刚学汇编,看了这位同学的一问,我觉得call指令 是用汇编语法来解释汇编,其实却不存在这样的指令。也许他们就是定义好了,cs和ip就是一起的。
页: [1]
查看完整版本: 关于call 和 ret指令。