当前课程知识点:微机原理与接口技术 > 第7周 程序与处理器控制 > 第25讲 程序控制指令说明 > 程序控制类指令说明
大家好
这一讲开始我们来学习8086指令集中
从原理的角度来讲最复杂的一大类指令
就是程序控制类指令
这个是整个8086指令系统的第五大类指令
程序控制类指令因为它在原理上的复杂性
所以我们在正式学习这类指令之前
我们先要做一些说明
从这一大类指令的名字上我们就可以感觉到
这一类指令是在控制程序走向
所以这一大类指令它的本质就是控制程序
不要按照正常的顺序去执行
而是要改变程序的执行方向
而我们程序的执行方向
是由谁来决定的呢?
我们来回忆一下我们讲冯·诺依曼结构的时候
我们看到的这张图
我们说过在程序进入到内存里头成为进程的时候
当然它都是以机器语言的形式在存放的
为什么程序能从这个地方开始呢?
是因为我们有一个
计算机内部有一个程序计数器
这是一个寄存器
它的值就是我们程序第一条指令在初始情况下
PC的值就是我们第一条指令
在内存中的存放地址
因为它指向了这样第一条指令
所以CPU在取指令的时候就会从这个地方去取
取完了第一条指令 程序计数器PC就加1
然后 因为它加1所以就指向了第二条指令
所以下一次取指令就从第二条指令去取了
这是我们前面讲冯·诺依曼基本原理的时候
给大家看见 看到过的这个图
也就是说介绍过的这样一个CPU的基本工作过程
那么如果每一次取完一条指令PC都加1
加1加1这样下去
那么我们整个的程序结构就是一个顺序的结构
也就是从头到尾一条一条的顺序执行下去
那么如果
第一条指令取完PC的值不是加1
比如是加了n呢?
那么这是时候程序第一条指令执行完
它肯定就去执行第二 第n条了
那么就说改变了整个程序的控制结构
这就相当于我们第一条执行完后
跑到那个地方去执行了
这可能是一个分支结构 对吧?
在因特尔CPU里头 PC我们也叫IP
所以 通过改变IP的值实际上就改变了程序的走向
但是我们同时也说过
我们整个的程序代码是在代码段里存放
因此 影响程序执行方向的因素
就是这两个寄存器的值
如果仅仅是改变了IP的值
那么程序会在这样 当前这个代码段里
不是按照顺序这样执行下去
而是可能执行完这条
跳到这个代码段的另外一个地方执行
这就是有时候我说的在这一层楼上
我们从这个房间突然搬到另外一个房间
但是如果说连这两个寄存器的值都改变的话
那么就相当于我们下楼或者上楼 改变楼层了
那么有程序会从这个代码段
会跳到另外一个代码段去执行
这两个寄存器的值
在我们前面所学到的所有的指令中间
我们从来没有发现这两个寄存器
会出现在指令的操作数中
特别是 所有的指令
都不允许这两个操作数作为目标操作数存在
虽然理论上它们可以作为原操作数 对吧?
就是因为什么呢?
这两个寄存器的值是不能够随便去修改的
一旦修改我们程序的走向就不改变
但是程序控制类指令呢 恰恰相反
它就是要改变这两个寄存器的值
来控制程序的走向
所以 它是通过隐式的方式
来改变这两个寄存器的值的
所以这一类指令 不论是转移还是调用
它们都是通过改变IP或者改变CS和IP
来改变程序的执行方向
从而就实现了我们三种基本的程序结构
顺序 分支和循环
就是说如果我们不改变它
就每一次都使得IP加1加1
这样就构成了顺序结构
如果我们每一次都修改了IP或者同时修改了CS
程序就有可能出现了一个分支转移的结构
那么如果我们一般情况下改变IP的值的话
我们一般会实现程序的循环
因此我们在学习这一类指令的时候
大家一定要关注指令是如何实现对IP
或者实现对CS和IP来进行修改的
这个是大家学习这类指令
只要关注到这一点就没什么了
这类指令一共有四个小类
分别是转移类 循环类和调用类以及中断指令
下边来我们来分别来学习这四个小类指令
-第1讲 关于本课程
--关于本课程
-第2讲 微型计算机系统
--微机系统_01
--微机系统_02
-第3讲 微型计算机一般工作过程
-第4讲 数制与编码
--计算机中的编码
-第5讲 计算机中数的表示与运算
--数的表示
--符号数的表示
--数的表示与运算
-第6讲 基本逻辑运算与逻辑电路
-第7讲 本周小结
--本周小结
-第1周 微型计算机基础概论--第一周单元测验
-第8讲 8088微处理器
-第9讲 8088 CPU主要引线及机构
-第2周 8088微处理器--第二周单元测验
-第10讲 实模式存储器寻址
-第11讲 8088系统总线
--8088系统总线
-第12讲 微处理器小结
--微处理器小结
-单元测验--作业
-第13讲 指令概述
--指令概述
-第14讲 寻址方式
--寻址方式
-第15讲 通用数据传送指令
-第16讲 地址传送指令
--地址传送指令
-第17讲 输入输出指令
--输入输出指令
-第4周 数据传送指令--第四周单元测验
-第18讲 算术运算指令
--加法运算指令
--减法指令
--乘除运算指令
-第19讲 逻辑运算指令
-第20讲 移位操作指令
--移位操作指令
-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验
-第21讲 关于串操作指令的说明
--串操作指令说明
-第22讲 串传送与串比较
--串传送与串比较
-第23讲 串扫描指令
--串扫描指令
-第24讲 串装入与串存储指令
-第六周单元测验--作业
-第25讲 程序控制指令说明
-第26讲 转移类指令
--无条件转移指令
--条件转移指令
-第27讲 循环控制指令
--循环控制指令
-第28讲 过程调用指令
--过程调用指令
-第29讲 中断指令
--中断指令
-第30讲 处理器控制指令
--处理器控制指令
-第31讲 指令系统小结
--指令系统小结
-第7周 程序与处理器控制--第七周单元测验
-第7周 程序与处理器控制--第七周作业
-第32讲 汇编语言源程序
-- 汇编语言源程序_01
-- 汇编语言源程序_02
-第33讲 伪指令
--数据定义伪指令
--其它伪指令
-第34讲 系统功能调用
-第35讲 汇编语言程序设计示例详解
--程序设计示例1
-第36讲 汇编语言程序设计小结
-第8周 汇编语言程序设计--第八周单元测验
-第8周 汇编语言程序设计--第八周作业
-第37讲 半导体存储器概述
--半导体存储器概述
-第38讲 内存单元编址
--存储单元编址
-第39讲 随机存取存储器RAM
-- RAM_01
--RAM_02
-第40讲 只读存储器ROM
--ROM_01
--ROM_02
-第九周单元测验--作业
-第41讲 半导体存储器扩展
--存储器扩展_2
-第42讲 半导体存储器小结
--半导体存储器小结
-第十周单元测验--作业
-第十周作业--作业
-第43讲 基本I/O接口
-第44讲 简单接口芯片
--简单接口芯片
-第45讲 基本输入输出方法
--基本I/O方法
-第46讲 简单I/O控制系统设计
-第47讲 中断技术
--中断技术1
--中断技术2
-第48讲 输入输出与中断技术小结
--本周小结
-第十一周单元测验--作业
-第49讲 可编程定时计数器
-第50讲 可编程并行接口
-第51讲 可编程接口小结
--本周小结_01
--本周小结_02
-第十二周单元测验
-第52讲 模拟量的输入输出
--模拟量的输入输出
-第53讲 D/A转换器
-第54讲 A/D转换器
-- A/D转换器_01
-第十三周单元测验--作业
-第55讲 I/O接口系统综合设计示例详解I
-第56讲 综合设计示例详解II
-第57讲 结束语
--结束语