汇编语言之转移指令和原理
1、引言
可以修改IP,或同时修改CS和IP的指令统称为转移指令。概括地讲,转移指令就是可以控制CPU执行内存
中某处代码的指令。
8086CPU的转移行为有以下几类:
1. 同时修改CS和IP时,称为段间转移,比如:jmp 100:2a7。
2. 只修改IP时,称为段内转移,比如:jmp ax。
由于转移指令对IP的修改范围不同,段内转移又分为“短转移”和“近转移”。
3. 段内短转移IP的修改范围为-128~127。
4. 段内近转移IP的修改范围为-32768~32767。
8086CPU的转移指令分为以下几类:
1. 无条件转移指令(比如:jmp)
2. 条件转移指令
3. 循环指令
4. 过程
5. 中断
这些转移指令转移的前提条件可能不同,但转移的基本原理是相同的,我们在这一章主要通过深入学习无条件
转移指令jmp来理解CPU执行转移指令的基本原理。
2、 jmp指令
Jmp为无条件转移指令,可以只修改IP,也可以同时修改CS和IP。
Jmp指令要给出两种信息:
1. 转移的目的地址。
2. 转移的距离(段间转移、段内短转移、段内近转移)。
不同的给出目的地址的方法,和不同的转移位置,对应有不同格式的jmp指令,下面的几节内容中,我们以
给出目的地址的不同方法为主线,讲解jmp指令的主要应用格式和CPU执行转移指令的基本原理。
3、 依据位移进行转移的jmp指令
Jmp short 标号(转到标号处执行指令)。
这种格式的jmp指令,实现的是段内短转移,它对IP的修改范围为-128~127,也就是说,它向前转移时可以
最多越过128个字节,向后转移可以最多越过127个字节。Jmp指令中的“short”符号,说明指令进行的是短
转移,jmp指令中的“标号”是代码段中的标号,指明了指令要转移的目的地,转移指令执行结束后,CS:IP应该
指向标号处的指令。
请看下面一段代码:
Mov ax, 0
Jmp short s
Add ax, 1
S:add ax, 2
最下面那条指令中的S就是标号,jmp short s指令执行后,CS:IP指向s:add ax, 2,上面那条指令add ax,
1已被跳过,没有被CPU执行。
在“jmp short 标号”指令所对应的机器码中,不包含转移的目的地址,而包含的是转移的位移,这个位移是
编译器根据汇编指令中的“标号”计算出来的,具体的计算方法如下图所示:
上图中,标号处的指令s0:inc bx的偏移地址为6,指令jmp s0后的第一个字节的偏移地址为3,位移量就是
6-3=3。
标号处的指令s:inc ax的偏移地址为0,指令jmp s下的第一个字节的偏移地址为9,位移量就是0-9=﹣9。
“Jmp short 标号”的功能为:IP=IP+8位位移:
1.8位位移=标号处的地址-jmp指令后的第一个字节的地址。
2.short指明此处的位移为8位位移。
3.8位位移的范围为﹣128~127,用补码表示(本教程不讲解补码,若你想了解,请看相关书籍)。
4.8位位移由编译程序在编译时算出。
还有一种和“jmp short 标号”功能相近的指令格式:“jmp near ptr 标号”,它实现的是段内近转移。
“jmp near ptr 标号”的功能为:IP=IP+16位位移。
1.16位位移=标号处的地址-jmp指令后的第一个字节的地址。
2.near ptr指明此处的位移为16位位移,进行的是段内近转移。
3.16位位移的范围为﹣32768~32767,用补码表示。
4.16位位移由编译程序在编译时算出。
4、 转移地址在指令中或寄存器中的jmp指令
5、转移地址在内存中的jmp指令
6 、CALL指令
7、 子程序
汇编语言之转移指令和原理相关推荐
- 汇编语言学习--转移指令的原理
1.可以修改IP,或同时修改CS和IP的指令统称为转移指令 转载于:https://www.cnblogs.com/ComputerG/archive/2010/04/05/1704845.html
- 转移指令的原理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) 条件转移指令 循环指令 ...
- 转移指令的原理---汇编学习笔记
转移指令的原理 可以修改IP,或同时修改CS和IP的指令统称为转移指令. 8086CPU的转移行为有以下几类. 只修改IP时,称为段内转移,比如:jmp ax. 同时修改CS和IP时,称为段间转移,比 ...
- 汇编 第九章 转移指令的原理
第九章 转移指令的原理 8086CPU的转移指令分为以下几类: 1.无条件跳转指令(如:jmp) 2.条件跳转指令 3.循环指令(如:loop) 4.过程,就像C语言中的函数 5.中断 9.1 操作符 ...
- 计算机原理转移指令题,转移指令计算机原理.pdf
转移指令计算机原理.pdf 3.3.5 程序控制指令程序控制指令 程序控制指令又称为控制转移指令,包括转移指令.循环控制指令.过程调用指令和 中断指令 4 类.转移指令又分为无条件转移指令和条件转移指 ...
- 16位汇编语言第二讲系统调用原理,以及各个寄存器详解
16位汇编语言第二讲系统调用原理,以及各个寄存器详解 昨天已将简单的写了一下汇编代码,并且执行了第一个显示到屏幕的helloworld 问题? helloworld怎么显示出来了. 一丶显卡,显存的概 ...
- 【汇编语言/底层开发】9、转移指令的原理
可以修改IP或者同时修改CS和IP的指令统称为转移指令.转移指令控制CPU执行内存中某处的代码,其作用相当于C语言中的GOTO.在C语言中并不鼓励使用goto语句,但是在汇编语言中由于没有复杂的流程控 ...
最新文章
- A 'return' expression required in a function with a block body ('{...}')
- 程序员编码时都戴耳机?到底在听什么?
- r语言和python-R语言和Python一块学习会弄混吗
- ssh命令、ping命令、traceroute 命令所使用的协议
- [dp]leetcode 746. Min Cost Climbing Stairs
- 美团DB数据同步到数据仓库的架构与实践
- python中格式化_python的format格式化
- java map排序_探索Java常用集合
- project.management.cattle.io not found
- 珞珈老师PPT教学-笔记
- rtl8111gr服务器系统,6款主板板载网卡对比
- ArcGIS Server Image 扩展模块
- matlab如何打开word文档,matlab操作word
- 船舶导航软件测试,北斗卫星船舶定位及信息通信应用
- 投资人不投了、撤资了,创业者怎么办?
- 如何写好一个2Take1 Lua - 初步认识Lua
- 阿里云搭建JAVA环境详解(jdk+mysql+tomcat)
- 报表模块-report
- [android] 多媒体播放api简介
- 一体化联合作战指挥系统软件平台