鱼C论坛

 找回密码
 立即注册
查看: 3190|回复: 5

关于call 和 ret指令。

[复制链接]
发表于 2011-10-8 11:32:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 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形式跳转??这样会不会太麻烦了??
楞是想不明白。还望高手赐教!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-8 18:21:51 | 显示全部楼层
我觉得,这个是CPU硬件指令封装,书上的将call和retf来详细说明执行步骤,是为了让我们理解这个指令做了哪些动作,从而理解具体含义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-9 18:20:50 | 显示全部楼层
本帖最后由 topcookie 于 2011-10-9 18:29 编辑

微指令都是保密的,你想研究的东西已经在微指令的范围了,如果你搞清楚了就可以生产CPU了,说的是“相当于”,只是分解来说让你理解它作了什么,并不是说就是这么作的,学习不要钻牛角尖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-10 21:04:18 | 显示全部楼层
你继续想,我相信你,想通了给我说一声!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-13 11:36:47 | 显示全部楼层
:L我记得书上好像有一个 搬书进盒子的比喻吧,,已经很形象了!先进后出,但是补充一下,出来的是数据,出道哪里就POP到哪里!打个比方:
push eax
push ebx
....
pop ebx
pop eax
和
.
.
.
...
pop eax
pop ebx
这两个是不一样的哦,前面的是保护eax,ebx寄存器,后面的可以理解成为对换eax,ebx寄存器的内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-13 17:03:43 | 显示全部楼层
大家好,我也是刚学汇编,看了这位同学的一问,我觉得call指令 是用汇编语法来解释汇编,其实却不存在这样的指令。也许他们就是定义好了,cs和ip就是一起的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 22:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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