到底什么是短转移 什么是近转移 有什么含义呢?
JMP指令是从程序当前执行的地方无条件转移到另一个地方执行。这种转移可以是一个短(short)转移(偏移量在[-128, 127]范围内),近(near)转移(偏移量在[-32K, 32K]范围内)或远(far)转移(在不同的代码段之间转移)。
短和近转移是段内转移,JMP指令只把目标指令位置的偏移量赋值指令指针寄存器IP,从而实现转移功能。但远转移是段间转移,JMP指令不仅会改变指令指针寄存器IP的值,而且还会改变代码段寄存器CS的值。
该转移指令的执行不影响任何标志位。
例如:
…
next1: …
JMP next1 ;向前转移,偏移量之差为负数
…
JMP next2 ;向后转移,偏移量之差为正数
…
next2: …
在目前流行的汇编系统中,当段内转移时,有些软件把该转移指令默认为近转移,从而使指令的偏移量用一个字来表示,于是生成3个字节的指令代码,但如果程序员自己清楚转移的幅度在一个短转移的范围之内,那么,可用前置short的办法来告诉汇编程序,让它产生2个字节的指令代码。
比如:如果程序员知道在上例中的标号next2离“JMP next2”指令的偏移量不会超过127,那么,可用下面的转移方式来省掉一个字节的指令代码。
next2: …
JMP short next2 ;生成2个字节的转移指令,从而节省一个字节
…
书上这么写的 也就是说 短转移可以用近转移来代替 按理说 这算是"包含"罢 只不过 这个包含是以浪费为代价的 也就是 本来可以用1字节解决的问题 非用两字节来实现 浪费
看到这你应该想到了这样一点 反正我想到了 也就是 两者的区别 或 实质 其实是用多大的空间来存放地址
假设 jmp进行偏移量跳转时的机器码是eb 那 这两者的样子大概是 eb XX
和 eb XX XX (都是16进制数 下同) XX就是偏移量 这也是为什么 两者跳转的范围不同的缘故 呵呵
看出来了么 你应该明白了、、、