可以修改IP或者同时修改CS和IP的指令统称为转移指令。转移指令控制CPU执行内存中某处的代码,其作用相当于C语言中的GOTO。在C语言中并不鼓励使用goto语句,但是在汇编语言中由于没有复杂的流程控制运算符,使用转移指令称为必然。在8086中,转移指令可分为以下几类:(1)无条件转移指令;(2)条件转移指令;(3)循环指令;(4)过程;(5)中断。

1、操作符Offset;

操作符offset是由编译器处理的符号,功能是取得标号所在的偏移地址。

2、jmp指令:

jmp为无条件跳转指令,可以修改IP或同时修改CS和IP。使用jmp指令需要给出的信息有:转移的目的地址;转移的距离(段间转移、段内短转移、段内近转移);

jmp指令有四种使用方式:

(1)依据位移进行转移的jmp指令

以下指令:

jmp short mark ;mark是某条指令的标号

该指令实现段内短转移,ip的变化范围为-128~127。转移指令结束后,CS:IP指向mark处所标识的指令位置。

同mov、push等指令不同的是,jmp指令的机器码中并不包含将要跳转的目标地址,而前两者的机器码都明确包含了将要操作的立即数值。这是因为CPU执行jmp指令时并不需要转移的目的地址,而采用的是标号所在地的地址同jmp指令的偏移。也就是说,jmp中其实也是包含了目标地址的,只是采用的是以当前地址为基准的相对地址。

与上述指令相似的还有:

jmp near ptr mark

该指令实现是段内近转移,其转移的位移为16为,范围为-32768~32767。near同short的主要区别在于jmp的范围更大些。

(2)转移目的地址在指令中的jmp指令

与(1)描述的段内短转移和近转移不同,以下指令:

jmp far ptr mark

实现的是段间转移或远转移。这个指令中的far ptr表示将使用mark所在的段地址和偏移地址分别修改cs和ip,处理的场合是当前指令位置同目标指令位置距离较远,超过短转移和近转移,或者二者在不同的段中的情况。

(3)目标地址在寄存器中的jmp指令

以下指令:

jmp ax

目标的ip地址存放在ax中。功能同近转移指令类似。

(4)转移目标地址在内存中的jmp指令

通过内存单元获取转移地址有字和双字两种方式。通过字获取的格式为:jmp word ptr 内存地址;通过双字获取的格式为:jmp dword ptr 内存地址。前者只改变ip,新的ip值来自于给定的内存地址;后者同时改变cs和ip,双字的高位表示段地址,低位表示偏移地址。

以下指令:

mov ax, 0123H
mov ds, ax
jmp word ptr ds:[0]

其作用为修改ip为0123h。

以下指令:

mov ax, 0123H
mov bx, 0
mov ds:[0], ax
mov word ptr ds:[2], bx
jmp dword ptr ds:[0]

其作用为将cs修改为0,ip修改为0123h。

3、条件转移指令和循环指令

实现二者的指令分别为jcxz和loop指令,二者都是短转移指令。

(1)jcxz指令:

该指令的构成为:j(jmp)cx(寄存器cx)z(zero),即当cx中的值为0时跳转,非零时继续向下执行;使用格式为:

jcxz mark

(2)loop指令:

使用格式为:

loop mark

每次运行后,cx会自减1,当cx为0时,不进行跳转,向下执行。该指令的最大作用是实现一个循环的功能,使用cx计算循环的次数。

【汇编语言/底层开发】9、转移指令的原理相关推荐

  1. 转移指令的原理03 - 零基础入门学习汇编语言45

    第九章:转移指令的原理03 让编程改变世界 Change the world by program jcxz指令 jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移 ...

  2. 王爽 汇编语言第三版 第9章 转移指令的原理

    第九章  转移指令的原理 汇编代码: assume cs:codesgcodesg segments: mov ax,bx ; mov ax,bx 的机器码占两个字节mov si, offset sm ...

  3. 转移指令的原理01 - 零基础入门学习汇编语言43

    第九章:转移指令的原理01 让编程改变世界 Change the world by program 引言 8086CPU的转移指令分为以下几类: 无条件转移指令 (如:jmp) 条件转移指令 循环指令 ...

  4. 后端底层开发人员必须要彻底搞懂的redis存储原理丨redis跳表与B+树详细对比

    后端底层开发人员必须要彻底搞懂的redis存储原理 1. redis存储原理分析 2. redis源码学习分享 3. redis跳表与B+树详细对比分析 视频讲解如下,点击观看: 后端底层开发人员必须 ...

  5. linux内核epub,Android底层开发技术实战详解——内核、移植和驱动(第2版)[EPUB][MOBI][AZW3][42.33MB]...

    内容简介 本书从底层原理开始讲起,结合真实的案例向读者详细介绍了Android内核.移植和驱动开发的整个流程.全书分为21章,依次讲解驱动移植的必要性, Goldfish.OMAP内核和驱动解析,显示 ...

  6. 转移指令的原理---汇编学习笔记

    转移指令的原理 可以修改IP,或同时修改CS和IP的指令统称为转移指令. 8086CPU的转移行为有以下几类. 只修改IP时,称为段内转移,比如:jmp ax. 同时修改CS和IP时,称为段间转移,比 ...

  7. 安卓学习底层开发学习方法?

    学习安卓底层开发的方法如下: 了解安卓操作系统的工作原理,包括安卓的体系结构.内存管理.进程和线程.文件系统等. 学习Java语言,作为安卓开发的主要语言. 了解安卓开发框架,如 Android Fr ...

  8. 安全底层开发工程师需要学习哪些内容

    网络协议 网络安全底层开发工程师需要对网络知识有深入了解,以便更好地理解网络安全领域的挑战和开发相应的解决方案.对于TCP.UDP.ICMP和ARP等协议,您需要了解以下方面的内容: TCP(传输控制 ...

  9. 汇编 第九章 转移指令的原理

    第九章 转移指令的原理 8086CPU的转移指令分为以下几类: 1.无条件跳转指令(如:jmp) 2.条件跳转指令 3.循环指令(如:loop) 4.过程,就像C语言中的函数 5.中断 9.1 操作符 ...

最新文章

  1. java boxplot_Matlab Boxplots
  2. 存储当时android,Android之外部存储(SD卡)
  3. SpringBoot2.0之八 多数据源配置
  4. 机器视觉:工业镜头专业词汇中英文详解
  5. pcb只开窗不镀锡_只因为把高速PCB旋转了一下,结果地覆天翻……
  6. jenkins 手动执行_Win下Jenkins-2.138源码编译及填坑笔记
  7. android图片资源加密,手机游戏加密之2d资源加密
  8. 爱奇艺技术分享:轻松诙谐,讲解视频编解码技术的过去,android项目开发实战入门明日科技
  9. 皮尔森 统计学相关性分析_【R语言】读懂Pearson相关分析结果
  10. uilabel 自行撑开高度_textarea高度随内容自适应增高撑开
  11. Excel怎样恢复科学计数法显示的数据
  12. QImage 如何设置图片的透明度
  13. 面试官最爱提的问题TOP10来自:北京人才市场报
  14. CS5216DP转HDMI1080P方案|CS5216:DP++to HDMI(1080P)
  15. 无线通信中比bit更小的“”数据单位”码片(也叫码元 ,chip) 什么是符号速率
  16. MYSQL的删除和重装
  17. JavaMail发送邮件手机客户端图片无法显示
  18. 一步一步实现一个完整的围棋游戏
  19. 了解网络工程的基础知识与工程收尾
  20. yes minister 豆瓣9.8分,BBC的巅峰之作!

热门文章

  1. Asp.net中Application Session Cookie ViewState Cache
  2. 算法(一):二分查找法
  3. svn 在windows下创建仓库子目录失败解决办法
  4. Django工作笔记001---Django简介
  5. java零碎要点013---JAVA执行js_java执行JavaScript_java执行js引擎不能识别document浏览器内置对象解决办法
  6. sytlengan2 代码解析
  7. 2016年1月28日报
  8. android开发之多线程实现方法概述
  9. android开发之AsyncTask的用法
  10. html搜索框如何加下拉框,js实现带搜索功能的下拉框