【汇编语言/底层开发】9、转移指令的原理
可以修改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、转移指令的原理相关推荐
- 转移指令的原理03 - 零基础入门学习汇编语言45
第九章:转移指令的原理03 让编程改变世界 Change the world by program jcxz指令 jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移 ...
- 王爽 汇编语言第三版 第9章 转移指令的原理
第九章 转移指令的原理 汇编代码: assume cs:codesgcodesg segments: mov ax,bx ; mov ax,bx 的机器码占两个字节mov si, offset sm ...
- 转移指令的原理01 - 零基础入门学习汇编语言43
第九章:转移指令的原理01 让编程改变世界 Change the world by program 引言 8086CPU的转移指令分为以下几类: 无条件转移指令 (如:jmp) 条件转移指令 循环指令 ...
- 后端底层开发人员必须要彻底搞懂的redis存储原理丨redis跳表与B+树详细对比
后端底层开发人员必须要彻底搞懂的redis存储原理 1. redis存储原理分析 2. redis源码学习分享 3. redis跳表与B+树详细对比分析 视频讲解如下,点击观看: 后端底层开发人员必须 ...
- linux内核epub,Android底层开发技术实战详解——内核、移植和驱动(第2版)[EPUB][MOBI][AZW3][42.33MB]...
内容简介 本书从底层原理开始讲起,结合真实的案例向读者详细介绍了Android内核.移植和驱动开发的整个流程.全书分为21章,依次讲解驱动移植的必要性, Goldfish.OMAP内核和驱动解析,显示 ...
- 转移指令的原理---汇编学习笔记
转移指令的原理 可以修改IP,或同时修改CS和IP的指令统称为转移指令. 8086CPU的转移行为有以下几类. 只修改IP时,称为段内转移,比如:jmp ax. 同时修改CS和IP时,称为段间转移,比 ...
- 安卓学习底层开发学习方法?
学习安卓底层开发的方法如下: 了解安卓操作系统的工作原理,包括安卓的体系结构.内存管理.进程和线程.文件系统等. 学习Java语言,作为安卓开发的主要语言. 了解安卓开发框架,如 Android Fr ...
- 安全底层开发工程师需要学习哪些内容
网络协议 网络安全底层开发工程师需要对网络知识有深入了解,以便更好地理解网络安全领域的挑战和开发相应的解决方案.对于TCP.UDP.ICMP和ARP等协议,您需要了解以下方面的内容: TCP(传输控制 ...
- 汇编 第九章 转移指令的原理
第九章 转移指令的原理 8086CPU的转移指令分为以下几类: 1.无条件跳转指令(如:jmp) 2.条件跳转指令 3.循环指令(如:loop) 4.过程,就像C语言中的函数 5.中断 9.1 操作符 ...
最新文章
- java boxplot_Matlab Boxplots
- 存储当时android,Android之外部存储(SD卡)
- SpringBoot2.0之八 多数据源配置
- 机器视觉:工业镜头专业词汇中英文详解
- pcb只开窗不镀锡_只因为把高速PCB旋转了一下,结果地覆天翻……
- jenkins 手动执行_Win下Jenkins-2.138源码编译及填坑笔记
- android图片资源加密,手机游戏加密之2d资源加密
- 爱奇艺技术分享:轻松诙谐,讲解视频编解码技术的过去,android项目开发实战入门明日科技
- 皮尔森 统计学相关性分析_【R语言】读懂Pearson相关分析结果
- uilabel 自行撑开高度_textarea高度随内容自适应增高撑开
- Excel怎样恢复科学计数法显示的数据
- QImage 如何设置图片的透明度
- 面试官最爱提的问题TOP10来自:北京人才市场报
- CS5216DP转HDMI1080P方案|CS5216:DP++to HDMI(1080P)
- 无线通信中比bit更小的“”数据单位”码片(也叫码元 ,chip) 什么是符号速率
- MYSQL的删除和重装
- JavaMail发送邮件手机客户端图片无法显示
- 一步一步实现一个完整的围棋游戏
- 了解网络工程的基础知识与工程收尾
- yes minister 豆瓣9.8分,BBC的巅峰之作!
热门文章
- Asp.net中Application Session Cookie ViewState Cache
- 算法(一):二分查找法
- svn 在windows下创建仓库子目录失败解决办法
- Django工作笔记001---Django简介
- java零碎要点013---JAVA执行js_java执行JavaScript_java执行js引擎不能识别document浏览器内置对象解决办法
- sytlengan2 代码解析
- 2016年1月28日报
- android开发之多线程实现方法概述
- android开发之AsyncTask的用法
- html搜索框如何加下拉框,js实现带搜索功能的下拉框