当前课程知识点:微机原理与接口技术 >  第7周 程序与处理器控制 >  第26讲 转移类指令 >  无条件转移指令

返回《微机原理与接口技术》慕课在线视频课程列表

无条件转移指令在线视频

无条件转移指令

下一节:条件转移指令

返回《微机原理与接口技术》慕课在线视频列表

无条件转移指令课程教案、知识点、字幕

好 现在我们来学习转移类指令

转移类指令是通过修改指令的偏移地址

或者是指令的段基地址加偏移地址

来实现程序的转移

转移类指令一共有两个小小类

一类称为无条件转移指令

还有一类称为条件转移指令

那么 顾名思义

所谓无条件转移指令

就是在不设定任何条件的情况下

就控制程序转移到目标地址

而条件转移指令

那是需要在一定条件满足的情况下

才能实现程序的转移

在这里 这里的一定条件我们通常是指状态标志位

因此 状态标志位它的不同状态的含义

就是它是0还是1它的含义

是希望大家一定要记住的

我们先来看无条件转移指令

无条件转移指令的格式是这样的

这是一条单操作数格式的指令

在指令助记符JMP后边

是下一条要执行的那条指令在内存中的地址

所以我们也称它为程序转移的目标地址

这个目标地址有可能和JMP指令在同一个代码段中

也就是说JMP指令执行完以后

下边要执行的那条指令

跟JMP在同一个代码段

这种转移我们叫段内转移

另外 就是说它的目标地址可能在另外一个逻辑段里

这就是段间的转移

因此 无条件转移指令

它可以实现在同一个代码段内的转移

它也可以实现从一个代码段转移到另外一个代码段

也就是说 段间的转移

段内的转移就像我们在一层楼上

从这样一个房间转到另外一个房间一样

也就是说楼层地址并没有变

这样它的转移范围是比较短 比较近的

那么这种情况下我们并不需要改变楼层号

而只是需要改变这个楼上的等于是不同房间的编号

而段间转移就相当于

我们从这一层楼搬到其他的楼层上了

这样不仅是改变了房间的编号

而且还改变了楼层号

下面我们先来看无条件的段内转移

因为段内转移刚才我们说

相当于在一层楼上房间的调整

所以这个时候它转移的目标地址

不再涉及段基地址而仅仅涉及了偏移地址

偏移地址我们已经知道它是个16位的

因此在这里转移的目标地址就只是16位的地址了

这种时候转移的目标地址可以由指令中直接给出

这种转移方式我们称为段内的直接转移

我们也可以将这个转移的目标地址

事先存放在某个16位的寄存器

或者内存两个单元里

由它们来给出转移的目标

这种转移的方式称为段间转移

下边我们先来看段内直接转移的指令格式

所谓段内的直接转移

就是转移的目标地址由指令直接给出来

这个时候指令的格式是这样

JMP指令后边是一个标号

这个标号的起名规则我们在第四章中

会再给大家介绍

通常情况下就是不要超过32个字符

首字母不能是数字等等

但是建议大家这个标号最好能有一个具体的含义

在这里这个标号和助记符JMP之间

没有给出任何的说明

表示这个Label也就是这个标号

是一个近地址标号

近地址标号的意思就是段内直接转移的意思

如果用这个图来表示的话

就是说这个时候执行完JMP之后

程序不会转移到其他的代码段

而是在当前代码段中

编译器在看到这条指令之后

它一看到这个Label是近地址标号

它就会在JMP指令当前的代码段中去找这个Label

找到这个Label以后

它计算Label到JMP之间的距离 也就是位移量

然后把这个位移量

和JMP所在的这个单元的偏移地址

也就是说IP的值

相加 然后再结果送给IP

这样的话等于就算是修改了IP寄存器的内容

我们说一旦修改了IP的值

那就意味着下边一条指令不再会是加1了

而是会转到新的IP这个地方去执行

这样也就实现了程序的转移

而段内间接转移

是将转移的目标地址放在某个16位的寄存器中

或者存储器的某两个单元中

我们用一个例子来说明一下

假设这两条指令的执行

第一条指令执行完BX等于1200H

下边这条指令 JMP指令的后边请大家永远记住

就是下一条要取的那条指令的地址

现在JMP后边是个BX

表示下边要取的那条指令

它的偏移地址是BX的值

因此 这条指令执行完以后IP就会等于1200H

也就是相当于把BX的值赋给了IP

那么我们程序就实现转移了

下边我们来看段内间接转移的另外一种表现形式

大家看这个时候这条JMP指令的后边

是一个存储器操作数

而这个存储器操作数

采用的寻址方式是寄存器间接寻址

间指寄存器用的是BX

说明什么呢?

说明我们要找的那个数据在内存数据段中

我们说过JMP指令后边不论是什么样的表现形式

总而言之它是转移的目标地址

因此现在也就是说

我们这个目标地址是放在当前数据段

偏移地址为BX所指向的这个地方

BX等于多少?等于1200

请大家注意这个1200后面没有H 这是十进制数

所以就1200和1201号单元中的内容

就是转移的目标地址

因为这个时候这个存储器操作数的前面是WORD

用PTR说明了它的字长只有一个16位字长

说明这是段内转移

因此这条JMP指令执行完之后

1200和1201这两个单元中的内容

会被拿出来送给IP寄存器

因为IP被修改了

所以下边执行完JMP指令之后

就会走向新的这个地方去执行这条指令

这就是两种不同的段内转移

相对于段内转移

无条件的段间转移它的转移范围会比较大

或者说它的转移的目标地址比较远

这个时候不仅修改了目标的偏移地址

还要修改转移的段基地址

因此这个时候的目标地址

就是一个32位的目标地址了

其中16位是段基地址 16位是偏移地址

跟段内转移一样

无条件段间转移这个目标地址

也同样有两种方式可以给出

一种就是由指令直接给出的方式

这种方式我们称为段间的直接转移

另外一种就是通过间接地方式来给出

当然这个时候因为目标地址是32位了

不可能由一个寄存器来描述

所以这个时候作为段间转移

这个32位的目标地址只能存放在内存中

由四个单元来表示

下边我们先来看无条件段间直接转移的转移方式

和段内直接转移一样

段间转移的目标地址也是由指令直接给出的

这个时候指令的格式是这样

在助记符JMP和它后边Label中间

有了一个修饰符FAR

一旦有了这个FAR表示这个Label是一个远地址标号

也就是说这个时候

程序在执行完JMP指令之后

会转向另外一个代码段

Label所指向的地方继续执行

那么段间间接转移呢?

因为这个时候转移的目标地址成了一个32位的地址

那么这个32位的地址就不可能在一个寄存器里放

而必须放在内存中了

这32位地址包括了16位的段基地址

和16位的偏移地址

比如我们来看这样一条指令

在这条指令中助记符JMP后边是一个存储器操作数

我们永远记住

请大家永远记住

JMP后边不论那个操作数是什么形式

它都是转移的目标地址

那么这个时候JMP后边是一个

寄存器间接寻址的存储器操作数

表示转移的目标地址在内存中

在内存的什么地方呢?

现在由PTR这个运算符

说明了这个存储器操作数

是一个DWORD类型的操作数

DWORD代表着DOUBLE WORD的意思

也就是说这个时候这个存储器操作数

是一个32位的存储器操作数

那么因为间指寄存器选择的是BX

所以这个转移的目标地址在数据段

BX所指向的地方

因为这里已经说明了这个存储器操作数是32位的

所以它占了四个字节

那么其中低地址单元的内容

就是转移目标的偏移地址

而高地址单元的内容就是转移目标的段基地址

CS和IP的值改变了

那么程序就会转向另外一个代码段

由CS和IP所指向的地方继续执行

好 我们下边来看一些无条件转移指令的例

比如这两行指令它们的段基地址都是2000

偏移地址 第一条指令的偏移地址是0100H

请大家注意这里的CS和IP的值

都默认是十六进制表示的

我们这里为了简单起见把H省略掉了

那么第二行指令执行完JMP NEXT之后

程序会转向标号为NEXT的地方

NEXT在哪里呢?假设就在这个地方

所以执行完第二行JMP指令之后

下边第三条程序要执行的指令

就是MOV BX,1200H

如果在这条MOV指令之后是一条JMP指令

那么这条JMP指令后边的转移目标地址在哪里呢?

在BX里头

因为BX是一个16位寄存器

说明它是一个段内转移

转移的目标地址就是BX的值也就是1200H

因此这条指令执行完程序会转向当前代码段

也就是说段基地址并不改变

但是偏移地址为1200的这个地方继续执行

好下面我们再来看一段无条件转移的例

这几行指令中第一行指令执行完SI等于1122H

第二行指令是将一个立即数0120H写入到内存中

内存的什么地方?

显然是在数据段偏移地址是1122所指向的单元

那么第三行是SI加2

第四行又将一个立即数写进了SI加2这个单元

也就是写进了1124这个单元 这个字单元

因此这四行指令执行完以后

内存数据段中会是现在这个图中这样的分布情况

那么如果继续执行一条JMP指令的话

我们来看这条JMP指令

因为它后边的操作对象是一个存储器操作数

并且是一个16位的存储器操作数

说明它是段内转移

转移的目标地址放在了内存中

所以这是段内间接转移

转移目标地址在哪呢?

在SI所指向的这个字单元里存放

因为SI现在是1124

所以现在这条指令执行完以后

IP的值就是0122H

好如果我们把这条指令换一下

换成这样一条指令

那么因为这个时候JMP后面的这个操作对象

已经变成了一个DWORD类型的存储器操作数

也就是说是一个四字节的存储器操作数

那么这个四字节的存储器操作数的偏移地址在哪呢?

在SI减2

因为SI现在是1124 所以减2又回到了1122

因此这个转移的目标地址

就是1122H所指向的这四个单元里头的内容

跟刚才我们分析的一样

低地址单元的内容是转移目标的偏移地址

高地址单元的内容是转移目标的段基地址

所以这一条JMP指令执行完CS就等于0122

IP等于0120

微机原理与接口技术课程列表:

第1周 微型计算机基础概论

-第1讲 关于本课程

--关于本课程

-第2讲 微型计算机系统

--微机系统_01

--微机系统_02

-第3讲 微型计算机一般工作过程

--微机的一般工作过程_01

--微机的一般工作过程_02

-第4讲 数制与编码

--常用计数制及其转换

--计算机中的编码

-第5讲 计算机中数的表示与运算

--数的表示

--符号数的表示

--数的表示与运算

-第6讲 基本逻辑运算与逻辑电路

--基本逻辑运算与逻辑门

--常用逻辑运算及电路

-第7讲 本周小结

--本周小结

-第1周 微型计算机基础概论--第一周单元测验

第2周 8088微处理器

-第8讲 8088微处理器

--8088 CPU_01

--8088 CPU_02

-第9讲 8088 CPU主要引线及机构

--8088 CPU主要引线

--8088 CPU内部结构

--8088 CPU内部寄存器

-第2周 8088微处理器--第二周单元测验

第3周 实模式存储器寻址与总线

-第10讲 实模式存储器寻址

--实模式存储器寻址_01

--实模式存储器寻址_02

--实模式存储器寻址_03

-第11讲 8088系统总线

--8088系统总线

-第12讲 微处理器小结

--微处理器小结

-单元测验--作业

第4周 数据传送指令

-第13讲 指令概述

--指令概述

-第14讲 寻址方式

--寻址方式

-第15讲 通用数据传送指令

--通用数据传送指令_01

--通用数据传送指令_02

--通用数据传送指令_03

-第16讲 地址传送指令

--地址传送指令

-第17讲 输入输出指令

--输入输出指令

-第4周 数据传送指令--第四周单元测验

第5周 算术运算、逻辑运算与移位操作指令

-第18讲 算术运算指令

--加法运算指令

--减法指令

--乘除运算指令

-第19讲 逻辑运算指令

--逻辑运算指令_01

--逻辑运算指令_02

-第20讲 移位操作指令

--移位操作指令

-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验

第6周 串操作指令

-第21讲 关于串操作指令的说明

--串操作指令说明

-第22讲 串传送与串比较

--串传送与串比较

-第23讲 串扫描指令

--串扫描指令

-第24讲 串装入与串存储指令

--串装入与串存储指令

-第六周单元测验--作业

第7周 程序与处理器控制

-第25讲 程序控制指令说明

--程序控制类指令说明

-第26讲 转移类指令

--无条件转移指令

--条件转移指令

-第27讲 循环控制指令

--循环控制指令

-第28讲 过程调用指令

--过程调用指令

-第29讲 中断指令

--中断指令

-第30讲 处理器控制指令

--处理器控制指令

-第31讲 指令系统小结

--指令系统小结

-第7周 程序与处理器控制--第七周单元测验

-第7周 程序与处理器控制--第七周作业

第8周 汇编语言程序设计

-第32讲 汇编语言源程序

-- 汇编语言源程序_01

-- 汇编语言源程序_02

-第33讲 伪指令

--数据定义伪指令

--符号与段定义伪指令

--汇编语言源程序结构例

--其它伪指令

-第34讲 系统功能调用

--系统功能调用_01

--系统功能调用_02

-第35讲 汇编语言程序设计示例详解

--程序设计示例1

--汇编语言程序设计示例_02

-第36讲 汇编语言程序设计小结

--汇编语言程序设计小结

-第8周 汇编语言程序设计--第八周单元测验

-第8周 汇编语言程序设计--第八周作业

第9周 半导体存储器

-第37讲 半导体存储器概述

--半导体存储器概述

-第38讲 内存单元编址

--存储单元编址

-第39讲 随机存取存储器RAM

-- RAM_01

--RAM_02

-第40讲 只读存储器ROM

--ROM_01

--ROM_02

-第九周单元测验--作业

第10周 半导体存储器扩展技术

-第41讲 半导体存储器扩展

--半导体存储器扩展_1

--存储器扩展_2

--半导体存储器扩展_3

-第42讲 半导体存储器小结

--半导体存储器小结

-第十周单元测验--作业

-第十周作业--作业

第11周 输入输出与中断技术

-第43讲 基本I/O接口

--I/O系统概述_01

--I/O系统概述_02

-第44讲 简单接口芯片

--简单接口芯片

-第45讲 基本输入输出方法

--基本I/O方法

-第46讲 简单I/O控制系统设计

--简单I/O控制系统设计1

--简单I/O控制系统设计2

-第47讲 中断技术

--中断技术1

--中断技术2

-第48讲 输入输出与中断技术小结

--本周小结

-第十一周单元测验--作业

第12周 可编程并行数字接口

-第49讲 可编程定时计数器

--可编程定时计数器8253_01

--可编程定时计数器8253_02

--可编程定时计数器8253_03

-第50讲 可编程并行接口

--可编程并接口8255_01

--可编程并行接口8255_02

--可编程并行接口8255_03

-第51讲 可编程接口小结

--本周小结_01

--本周小结_02

-第十二周单元测验

第13周 模拟量的输入输出

-第52讲 模拟量的输入输出

--模拟量的输入输出

-第53讲 D/A转换器

--D/A转换器_01

--D/A转换器_02

-第54讲 A/D转换器

-- A/D转换器_01

--A/D转换器_02

-第十三周单元测验--作业

第14周 系统综合设计示例详解

-第55讲 I/O接口系统综合设计示例详解I

--综合设计示例详解I_01

--综合设计示例详解I_02

-第56讲 综合设计示例详解II

--综合设计示例详解II_01

--综合设计示例详解II_02

-第57讲 结束语

--结束语

无条件转移指令笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。