鱼C论坛

 找回密码
 立即注册
查看: 5109|回复: 6

为什么jmp short 不用加ptr 而jmp near ptr要加ptr 为什么?

[复制链接]
发表于 2011-5-25 20:33:56 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 loop 于 2011-5-29 23:26 编辑

为什么jmp short 不用加ptr 而jmp near ptr要加ptr 为什么? ptr到底是什么意思?它怎么用?举例说下.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-25 21:32:16 | 显示全部楼层
没用  是给编译器看的  同学要理解“性记忆”啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-25 22:56:57 | 显示全部楼层
因为jmp short 不用加ptr  ,所以jmp short不用加ptr
因为jmp near ptr 要加ptr ,所以jmp near ptr 要加ptr


规定的。没发解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-26 05:41:20 | 显示全部楼层
编程不是我们中国人发明的  所以要按人家规定来的  不然不给你用  就这么简单;P
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-26 13:47:45 | 显示全部楼层
我来说下我的见解!!

用操作符“ptr”,是没有使用寄存器情况下直接用内存单元或数值  用来规定长度的

mov  word ptr ds:[0],1    没用到寄存器  就要说明是什么单元
在没有寄存器参与的内存单元访问指令中,必须要显性地告诉CPU所要访问的单元是字单元,还是字节单元。
jmp short   ax    这个只能用寄存器, 寄存器就定了一个字单位   
jmp short   dx[0]      这是错误的 因为没定义长度
jmp near ptr  dx[0]   加上ptr 就可以这样用  一个字单位   偏移量嘛

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-26 13:54:33 From FishC Mobile | 显示全部楼层
其实虽说是规定,到既然需要规定,它必将多少有意义。
我猜测是这样的〈没开官方证明〉:ptr 本身的意义是指定内存单元的长度,例如mov word ptr ds:[0],1 告诉编译器把这个内存单元当字型数据的长度看待。
回来,那我们jmp short 是短转移,前后偏移加起来是八位,也就是一个字节刚好可以表示,那我们内存中默认又是以字节为单位,所以不需要强调!
但是jmp near ptr 的跳转偏移有十六位那么多,要一个字型数据才能存放偏移,因此你要告诉编译器,这个存放偏移的内存单元要把它当字型数据哦……其实,jmp far ptr 也是同样道理哈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2019-11-23 14:24:03 | 显示全部楼层
小甲鱼 发表于 2011-5-26 13:54
其实虽说是规定,到既然需要规定,它必将多少有意义。
我猜测是这样的〈没开官方证明〉:ptr 本身的意义是 ...

说的有道理!这个说法,我理解了,哈哈,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-5 12:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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