多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
本博文是对原书8.3.10的内容的总结。 ### 一、相对短转移 指令格式是: ~~~ jmp short 标号 ~~~ 标号也可以替换成具体的数值(标号和数值是等价的),例如 ~~~ jmp short 0x2000 ~~~ 说明: (1)该指令属于段内转移指令,而且只允许转移到距离当前指令-128~127字节的地方。 (2)指令的功能是:(IP) = (IP)+8位位移量(范围是-127~128,用补码表示) (3)short指明此处的位移为8位 (4)8位位移=标号处的地址-jmp指令后的第一个字节的地址;8位位移由编译器在编译时算出; ### 二、16位相对近转移 指令格式是: ~~~ jmp near 标号 ~~~ 同理,标号也可以是具体的数值,如 ~~~ jmp near 0x3200 ~~~ 说明: (1)该指令属于段内转移,转移范围是-32768~32767 (2)指令的功能是:(IP)= (IP)+16位位移量(范围是-32768~32767,用补码表示) (3)near指明此处的位移为16位 (4)16位位移=标号处的地址-jmp指令后的第一个字节的地址;16位位移由编译器在编译时算出;   注意:如果没有指定关键字是near或者short,那么NASM编译器会根据目标位置距离当前指令的位移量自动选择near(范围在-127~128内)或者short(范围在-127~128外,但是在-32768~32767内)。   ### 三、16位间接绝对近转移 指令格式为: ~~~ jmp (near) r16/m16 ~~~ 说明: (1)这种转移也是段内转移,但是转移的目标不是在指令中直接给出,而是由一个16位的通用寄存器或者内存地址间接给出 (2)near关键字可以省略 (3)执行时,处理器将用16位通用寄存器的值或内存中的那个字取代IP寄存器的内容。 ### 四、16位直接绝对远转移 指令格式为: ~~~ jmp 段地址:偏移地址 ~~~ 说明: (1)属于段间转移 (2)执行时,处理器用段地址的内容取代CS的值,用偏移地址(也可以是标号)取代IP的值 ### 五、16位直接绝对远转移 指令格式为: ~~~ jmp far m32 ~~~ 说明: (1)关键字far是必须的 (2)操作数是一个内存地址,内存地址处存放着2个字,低字是偏移地址,高字是段地址 (3)执行时,处理器根据内存地址找到偏移地址和段地址,分别用来代替IP和CS的内容 (完)