鱼C论坛

 找回密码
 立即注册
查看: 1838|回复: 4

关于转移地址在寄存器中的call指令疑问!

[复制链接]
发表于 2012-8-17 13:09:36 | 显示全部楼层 |阅读模式

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

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

x
转移地址在寄存器的call指令这章中,call的机器指令中是位移还是转移地址么,是位移怎么感觉不对,谢谢大大们~!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 13:37:16 | 显示全部楼层
           <1> 段内直接调用: CALL NEAR类型的过程名
              每一个过程在定义时,应指定它是近类型(NEAR),还是远类型(FAR).本指令是段内直接调用,因而过程与调用指令同处在一个代码段内.在执行该调用指令时,首先将IP的内容入栈保护,然后由指令代码给出的目的地址段内偏移量送入IP,从而实现过程调用,将程序转至过程入口.

          <2> 段内间接调用: CALL OPRD
              其中OPRD为16位通用寄存器或存储器数.
              本指令执行时,首先将IP的内容入栈保护,然后将目的地址在段内偏移量由指定的16位寄存器或存储器字中取至IP中,从而实现过程调用.
              例如: CALL BX
                    CALL WORD PTR [BX+SI+20]
              注意: 寄存器间接调用时,寄存器不用方括号括起来.如果用方括号,则为存储器操作数间接调用.

          <3> 段间直接调用: CALL FAR 类型的过程名
              由于是段间调用,在指令执行时,应同是时将当前的CS及IP的值入栈保护,然后将FAR类型的过程名所在的段基址和段内偏移值送CS及IP, 从而实现过程 调用.


按照你的说法直接一点讲就是:转移地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 14:16:57 | 显示全部楼层
有标号的就是偏移。没标号的就是地址。你看对不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-17 14:29:38 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-17 14:41:31 | 显示全部楼层
zhenglibob 发表于 2012-8-17 14:29
额,不对额,比如call far ptr 标号,机器码里就是地址

你说的对。那就只有call 标号是偏移了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-27 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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