codefish123 发表于 2011-5-25 20:33:56

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

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

为什么jmp short 不用加ptr 而jmp near ptr要加ptr 为什么? ptr到底是什么意思?它怎么用?举例说下.

asd82937121 发表于 2011-5-25 21:32:16

没用是给编译器看的同学要理解“性记忆”啊

liuhui88126 发表于 2011-5-25 22:56:57

因为jmp short 不用加ptr,所以jmp short不用加ptr
因为jmp near ptr 要加ptr ,所以jmp near ptr 要加ptr


规定的。没发解释

嗜血丨灵异狂 发表于 2011-5-26 05:41:20

编程不是我们中国人发明的所以要按人家规定来的不然不给你用就这么简单;P

困惑灵魂 发表于 2011-5-26 13:47:45

我来说下我的见解!!

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

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

小甲鱼 发表于 2011-5-26 13:54:33

其实虽说是规定,到既然需要规定,它必将多少有意义。
我猜测是这样的〈没开官方证明〉:ptr 本身的意义是指定内存单元的长度,例如mov word ptr ds:,1 告诉编译器把这个内存单元当字型数据的长度看待。
回来,那我们jmp short 是短转移,前后偏移加起来是八位,也就是一个字节刚好可以表示,那我们内存中默认又是以字节为单位,所以不需要强调!
但是jmp near ptr 的跳转偏移有十六位那么多,要一个字型数据才能存放偏移,因此你要告诉编译器,这个存放偏移的内存单元要把它当字型数据哦……其实,jmp far ptr 也是同样道理哈。

pcwww 发表于 2019-11-23 14:24:03

小甲鱼 发表于 2011-5-26 13:54
其实虽说是规定,到既然需要规定,它必将多少有意义。
我猜测是这样的〈没开官方证明〉:ptr 本身的意义是 ...

说的有道理!这个说法,我理解了,哈哈,谢谢!
页: [1]
查看完整版本: 为什么jmp short 不用加ptr 而jmp near ptr要加ptr 为什么?