首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

能帮忙解释一下jmp near ptr标号 这个格式吗?解决方法

2012-03-31 
能帮忙解释一下jmp near ptr标号 这个格式吗?还是王爽的书,只是针对这个指令没有实际的例子,没理解能不能

能帮忙解释一下jmp near ptr标号 这个格式吗?
还是王爽的书,只是针对这个指令没有实际的例子,没理解
能不能帮忙写个小例子理解一下,多谢啦

原文如下:
jmp near ptr 标号,它实现的是段内近转移。

其功能是:(ip)=(ip)+16位位移 //关键这个16位位移没能理解
1)16位位移=指令“标记”处的地址 - jmp指令后的第一个字节的地址;

我的理解是不是这样:
比如,
jmp near ptr s
mov ax,[0]
s:...
...
...

那么指令“标记”处的地址是指的s:...这句话的地址吧?
jmp指令后的第一个字节的地址,是说的mov ax,[0]这句话的第一个字节吧?
我这样理解对吗?

如果对的话,那么这个指令是什么作用啊?还是没明白。。。




[解决办法]
是标号S的地址,例子:
code segment 
assume cs:code
start:
jmp near ptr s
mov ah,11h
s:mov dl,48h
mov ah,2
int 21h
mov ax,4c00h
int 21h
code ends
end start
[解决办法]
反正就是跳转指令, 加上NEAR PTR 就是限制了它的跳转距离
[解决办法]
段内转移指的是源地址和目的地址都在同一段内,变化的只是偏移地址


18CF:0000 B83412 MOV AX,1234
18CF:0003 E90300 JMP 0009
18CF:0006 BB3412 MOV BX,1234
18CF:0009 8BC3 MOV AX,BX
18CF:000B B44C MOV AH,4C
18CF:000D CD21 INT 21

16位位移=指令“标记”处的地址 - jmp指令后的第一个字节的地址;
这里标记地址为0009H,jmp地址为0003H,那么jmp指令的位移字节是0006H(此处地址的指令未执行)
这个位移,是编译器计算出来的。 我们无法估算。


Assembly code
源程序:assume  cs:codecode    segmentstart:        mov ax,1234h        jmp near ptr s        mov bx,1234hs:        mov ax,bx        mov ah,4ch        int 21hcode    endsend     start
[解决办法]
段内近转移,这种说法是不确切的。
你说的这种情况,确切地说,是16位相对近转移,其机器指令操作码为E9,后面跟着一个16位的操作数,该操作数是相对于目标位置处的偏移量,所以称为“相对”近转移。
你的理解倒是没有错。至于为什么处理器要搞得这么麻烦,我也不知道。有人说是为了方便程序在内存中重定位,个人表示这很荒谬。程序执行时,段已经重定位过了。
[解决办法]
探讨
啊,谢谢各位这么详细的解答

我可不可以这么理解
就是jmp s 和jmp near ptr s
其内容除了范围上有些限制外,跳转的目标是一样的?

热点排行