本博文是对原书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的内容

(完)

最新文章

  1. Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
  2. iis配置js支持读取json文件配置
  3. linux系统的7种运行级别
  4. 特征的Attribute Only选项
  5. 数据库的索引和填充因子fillfactor
  6. 鼠标模拟点击a标签
  7. Qt源代码分析
  8. std中map
  9. 解题报告8VC Venture Cup 2017 - Elimination Round
  10. Flask实战第3天:url_for使用
  11. L2-010 排座位 (25 分) (最短路)
  12. 插播一则关于HTTP Headers详解~~~
  13. c# 破解谷歌翻译
  14. Java之String、StringBuilder、StringBuffer的区别
  15. 洛谷 P1361 小M的作物 解题报告
  16. vue中引入awesomeswiper的方法以及编写轮播组件
  17. POI2018
  18. Android-Sqlite-升级操作
  19. 一 Android Studio 打包Egret App
  20. (STM32F4) IAP程式碼實現

热门文章

  1. occal [问题解决]ORA-01427: 单行子查询返回多个行
  2. 小程序:如何在wxml页面中调用JavaScript函数
  3. 《Beginning Java 7》 - 2 - Cloning 克隆
  4. 选项卡tab2
  5. kvm虚拟机时间配置
  6. 洛谷P4254 [JSOI2008]Blue Mary开公司(李超线段树)
  7. jquery源码解析:proxy,access,swap,isArraylike详解
  8. [原创] 项目 watch EMFILE 报错处理过程
  9. BZOJ1688 Disease Manangement 疾病管理
  10. 2018-2019-2 网络对抗技术 20165314 Exp6 信息搜集与漏洞扫描