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

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

条件转移指令在线视频

条件转移指令

下一节:循环控制指令

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

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

条件转移指令是在满足一定条件下

才能够实现程序转移到目标地址

无条件转移指令我们已经知道

它可以实现段内的转移也可以实现段间的转移

也就是说它的转移范围是非常的大的

但是条件转移指令

请大家学习的时候一定要注意

它的转移范围是非常非常小的

它甚至不能实现在一个逻辑段内的转移

它的转移范围只有±128个字节

也就是说以当前这条指令为中心的话

可以-128到+127这样一个范围内

所以这种转移我们通常也称为段内的短转移

这个是8086指令集中全部的条件转移指令的一个列表

从这个列表里大家可以看出来

除了第一条指令JCXZ

它的转移是基于CS的状态实现转移的之外

其他所有的转移指令都是基于标志位的状态

有一些是基于一个标志位的状态

有一些是基于两个标志位的状态

这里有一些指令 我们看到中间有斜杠

比如大于或者不小于等于

那么这个斜杠前和斜杠后

大家去仔细看这个文字的描述

你们会感觉到它是一个意思

也就是说它的含义是相同的

但是它的助记符表示不一样

对于这一类指令请大家一定要认识

它的不同的这种助记符

但是真正自己使用的时候

当然你可以去选择你最熟悉的一个助记符也行

下边我们把这些条件转移指令

简单的跟大家介绍一下

因为从这个表里头我们已经能够看出来

每一条条件转移指令的含义以及指令的助记符

还有它后边的一些说明

像我们现在用圆框括起来的这两组指令

大家可以看到有一组是针对有符号数的比大小

有一组是针对无符号数的比大小

请大家这个在使用的时候注意一下

好 下边我们来分别介绍这些条件转移指令

这是基于一个标志位的状态实现转移的指令

它们有基于CF状态确定转移的指令

ZF的状态 基于OF的状态

基于PF的状态以及基于SF的状态

和刚才的不一样

这里的斜杠前和斜杠后

可是完全不一样的两个助记符

也是完全不一样的两个意思

比如JC是当CF等于1的时候就控制程序转移

JNC则是CF等于0的时候来实现转移

JZ是ZF等于1转移 JNZ那么是ZF等于0转移

只有后边这是JP JPE是一个意思

JNP和JPO是一个意思

就是JP是PF等于1转移 JPE还是PF等于1转移

这是基于2个或3个状态标志位实现转移的指令

这里的上面这一组

针对的是无符号数比大小的时候使用的指令

下面这一组是常用于有符号数大小比较的指令

除了这些基于状态标志位转移的指令之外

只有一条是基于CX内容来转移的指令

这条指令JCXZ

是当CX等于0的时候就实现程序的转移

好 下边我们来看一个条件转移指令的应用例

这个题目是

统计内存数据段中以TABLE为首地址的100个

8位带符号数中正数 负数和零元数的个数

大家看到这样一个题目我们首先要想到

肯定有两件事是一定要先做的

第一件事就是要确定这个整个数据串的首地址

也就是TABLE

第二件事就是我们要确定它的比较的次数

也就是它的长度值 这里是100

除了这两个初始化的工作之外

对于这个具体的题目来讲

因为它要去做一个统计

并且要把统计值要保存起来

所以我们一定要有3个地方来存放这个统计值

这里的数的个数总共只有100个

所以它的统计值 每一种统计值都不可能超过100

因此我们需要有3个8位的寄存器来放统计值

我们也可以用3个字节单元来放统计值

因此 这个题目的设计思路是

除了刚才我们说的取首地址

和设置它的数据的长度之外

我们首先需要做的事情

就是要将存放统计值的单元或者是寄存器清0

如果不清0

因为它原来的单元或者寄存器里

如果是个随机值的话

那有可能一开始就出现错误了

第二件事情呢就是我们要读取一个数

并且通过标志位的状态来判断数的性质

当最高位是1的时候是负数

最高位是0就是正数或者是0

那么问题是这个题目只要求统计这个数的性质

并没有要求允许你改变这个数值本身

因此我们要做的一件事情就是

既要影响标志位又不能改变数据自己

那么这件事情该怎么完成呢?

我们回忆一下我们前面讲逻辑运算指令的时候

我们曾经讲到与运算指令或运算指令

它们各自在程序中的三种应用方向的时候我们讲过

当一个数自己跟自己按位相与

或者自己跟自己按位相或的时候

不会影响这个数值本身

但是会影响状态标志位

因此 这样子的方法我们就可以

既不改变数据又可以获得标志位的信息了

因此我们就可以得到程序的控制流程是这样

首先我们来把存放统计值的这个各个单元

或者各个寄存器清0

假设现在我们要把统计值放在内存单元里

那么我们就要把3个内存单元清0

然后取它的整个数据的首地址和串的长度值

这就是初始化的工作

之后我们就可以读取一个数据了

然后我们去判断一下这个数是不是负的

如果它是负数

那么这个负元素的个数就加1

然后数等于就是已经

它的性质就已经确定了

我们下边要做的应该就是去取第二个数了 对吧?

那么如果这个数不是负数呢?

那么我们去看一下它是不是0

如果它是0 那么就是0元素的个数加1

如果它不是0 那么因为已经判断它不是负数了

现在又判断它不是0 那它肯定是正元素了

所以直接将正数个数加1就好了

那么不管它是正数也好 是0也好 是负数也好

总之一旦判断完这个数的性质

那么这个数就算是统计结束了

也就是说如果是一共100个数的话

我们等于现在第一个数的性质已经决定了

我们现在要去看剩下的99个

所以 他们一定要回到一个共同的点

从这里继续往下走

这个共同的点是
什么?

就是指针修改指向下一个元素

然后去取下一个元素再去判断那个元素的性质

因为这个篇幅的原因

这个流程图后边的部分我们就没有在这里画出来了

下面我们来看具体的代码

这4行指令就是将

我们要存放统计值的这3个单元分别清0

然后就是取它的首地址和串的长度值

之后我们可以用MOV指令来读取第一个字节的数

我们也可以用串操作指令来读取

这个是串装入

这条指令我们前面串操作的时候学过

这条指令的执行将原数据串的

一个单元的内容写到AL里头

然后因为它前面没有加前缀

所以它写完以后它自动实现SI加1

然后就停下来了

那么下边我们就对读到AL值去看一下它的性质

怎么看呢?我们可以自己跟自己按位相或

当然我们这里OR指令也可以选AND

自己跟自己按位相与 这都是一样的

与完了或者或完了

像现在这是或运算完了这个数据并没有改变

但是 除了AF以外

其他的5个状态标志位都会发生相应的变化

当然我们知道 或运算指令不论运算结果如何

CF和OF都会清0

但是ZF SF和PF它还是会发生相应的变化

我们这个时候不关心其他状态位的状态

我们只关心SF的状态

所以下边我们用JS指令来看一下它到底是1还是0

如果是1

那么这个JS指令就会控制程序

转向X1这个地方去执行

也就是说MINUS单元会加1

那么就说MINUS单元里放的是负元素的个数

那么如果SF不等于1 那么就不会转向X1

那么它就会继续向下执行

向下执行这条指令是什么?是JZ

JZ指令就是说当ZF等于1的时候它会转向X2

如果ZF不等于1呢?

显然这个数就已经是正数了

所以这个时候把存放正元素个数的单元的值加1

这3个不管是哪一个分支走下去

它等于相当于把第一个数的性质都已经统计过了

那么下边我们实际上是要看第二个数的性质了

刚才我们说LODSB这条指令本身

会实现把一个单元的内容读到AL里

同时实现SI加1

也就是说它自己本身实现了程序的修改

那么我们在程序中要干什么呢?

实际上就是要修改CX的值

然后判断CX为不为0 也就是说统计完了没有

如果没有统计完就继续回去了

所一下边我们不管是正元素个数加了1

还是走向了X1使负元素个数加1

或者走向了X2使0元素个数加1

总而言之 都要回到一个共同的地方

就是使CX减1

剩下的工作我们就已经很熟悉了

这就是条件转移指令在程序中的应用

我们逐渐的通过这些指令的学习来熟悉汇编程序

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

第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讲 结束语

--结束语

条件转移指令笔记与讨论

也许你还感兴趣的课程:

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