当前课程知识点:微机原理与接口技术 >  第4周 数据传送指令 >  第13讲 指令概述 >  指令概述

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

指令概述在线视频

指令概述

下一节:寻址方式

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

指令概述课程教案、知识点、字幕

这一讲 我们先来学习指令系统的基本概念

它包括什么是指令 以及什么是指令系统

还有指令的一般格式 以及指令的操作数

最后我们简单说一下有关指令字长和机器字长

所谓指令

是指我们人向计算机所发出的

并且能够被计算机所识别的一种命令

它用来控制(要求)计算机做一些具体的事情

从指令的定义上我们可以感觉到

指令中有两层含义

一个是我们人要

人发出的一种命令

也就说指令要能够被我们人类所识别

另外呢

这个指令要控制计算机去完成

所以这个指令也要被计算机所识别

那么这就意味着

这个指令要和计算机紧密相关

所以我们现在所说的指令

和我们在高级语言中所学到的程序语句

还是不完全一样

这里的指令 我们指的是在机器级别上的

也就说用0和1来表示的指令

虽然我们后边要学习的指令

并不是有0和1来表示

而是用一种助记符语言来描述

但是在某一个层面上他们是平等(对等)的

他们是完全一一对应的

所以我们这里说的指令是面向机器的指令

它和具体的CPU是密切相关的

那么也就意味着不同的CPU

能够认识/识别的指令是不完全一样的

一个CPU能够识别的指令是有限的

那么我们把

一种CPU能够识别的所有指令集合称为指令系统

我们现在学的是8086/8088指令集

当然你会说今天用的CPU全都是

i5 i7这样型号的CPU

8088相对于他们来讲已经相当的遥远

但是呢 他们是一个祖先这样过来的

也就说一脉相传过来的 一步步发展上去的

这种一步步发展

我们称为他是 自底向上 这样兼容的

那么也就说 它们具有完全同样的体系结构

其实就像人在小时候是两只眼睛 一个鼻子

那么长大了还是两个眼睛一个鼻子

其实还是你

但是你的行为力气都和小时候不一样

所以 CPU一样的

8086和今天的CPU

虽然功能 性能上都完全没有办法比

但是他们是一个体系结构发展起来的

所以他们是兼容的

那么兼容就意味着

我们用8086指令集编写的指令

或者用8086指令集所编写的程序

在今天的计算机上照样可以运行

但是请大家注意 可以运行有一个前提

是今天计算机中的CPU

一样是和Intel兼容的CPU

因为只有兼容了 他们的体系结构才是一样的

否则他们是没有办法用的

比如 用我们今天学到的这些指令系统

里面的指令编写程序

放在 单片机上运行

那么肯定是没办法运行的

因为他们互相不认识

所以 下边我们说 我们所学到的指令

是面向机器的指令

更具体的来讲 是面向CPU的指令

不同的CPU 他能够认识的指令是不一样的

他认识的指令是有限的

这两个点 大家现在首先要注意到

我们回到指令的概念上

我们说 一条指令既然是控制计算机

完成某一项工作的命令

那么这条指令中就一定包含着两个层面的含义

一个是这个指令是干什么的

其次是 他的运算对象/执行对象是什么

那么更细一点来讲

就是表示指令有什么样的操作

以及它操作的对象从哪里来

他们运算的结果到哪里去

这就是一条指令一定要包含的三点信息

由此我们就可以得出指令的一般格式是这样的

在这个格式里大家会看到 第一个词叫操作码

他也叫 指令码

他的外边没有方括号

而他后边 叫操作数的 都加了方括号

请大家一定要注意

我们这里所看到的方括号

和我们未来指令中的方括号完全不一样

这里的方括号表示可以有可以没有的意思

也就说 可选的意思

下面我们来看操作码的含义

表示这条指令的功能

即这条指令是做什么操作的

他到底是加法还是减法等等

那么 指令的操作对象在指令中叫做操作数

在有些教材中叫 地址码

我个人觉得 这个操作数本身

当然 在很多时候表示的是运算数据存放的地址

所以叫地址码似乎也很有道理

但是在有一种情况下 这个操作数就表示数据本身

也就是运算对象自己 而不是运算对象的存放处

所以我们这里一律把他叫做 操作数

操作数就表示运算的对象

也就说他的执行的对象是谁

或者说运算的数据

这个操作数 完整的看 先不考虑方括号 有两个

我们把靠近操作码近的这个叫做目标操作数

里操作码远的叫源操作数

在这里

源操作数从字面意思可以看出 是来源的意思

所以 源操作数只有一个含义

就是操作数的来源 或者说运算对象的来源

或者说运算数据

那么目标操作数呢

它有两个含义

有可能有两个含义 也有可能只有一个含义

他肯定有的一个含义 就是运算结果的去向

那么 他有可能同时还有另外一个含义

就是另外一个运算数据的来源

比如我们做加法运算5+8

那么 5是一个数据 8是一个数据 他一定要有两个数

所以5可能来自一个地方 8来自一个地方

但是他们运算的结果一定要放在目标操作数里

所以 目标操作数一定是一个地址

因为如果没有一个地方

我们的运算结果就不可能存进去

所以这一点 大家先建立这样一个概念

所以 整个操作数表示参加运算的数据

或者存放数据的地址

从这个格式上我们已经看出来

操作数 可以

操作数外面都加了方括号

意味着他们可以有 可以没有

那么 他们有或没有

由此就带来了三种更进一步划分的指令格式

一种是两个操作数都没有

那么这种指令叫零操作数格式的指令

只有操作码本身

实际上你可能会有一个疑问 就说 我们

指令的执行肯定有执行的对象的 对吧?

那么 这里一个对象都没有 那对谁执行呢?

实际上这个对象是有的

只不过在这种情况下 执行的对象是固定的

或者说 规定的对A或者对B

那么一旦规定了 就没有必要再说出来了

所以这种时候

就把这个指令 不显式样的给出操作对象

既然不显式 意味着隐含的给出了操作对象

所以在这种零操作数格式的指令中

他的操作对象 是隐含掉了的

不是没有 是有

但是他是隐含掉了 这种隐含掉了的操作对象

这种指令 实际上会比较麻烦

所以 大家一定要记住他的操作对象是谁

由此我们也一样可以看出来

当有一个操作对象规定的情况下

我们只需要显式的给出一个操作对象

另外一个被隐含掉 这就是单操作数格式指令

更多的时候

我们两个操作对象都要显示的给出

这就是双操作数格式的指令

这三种格式就是今天微机系统中 指令的全部格式了

不同的指令 可能会采用其中的一种格式

在大型机里

我们还有三个操作数 或者以上的格式指令

即多操作数格式指令

当然这种指令在微机里面没有 我们也不多讲

下面我们谈一下 有关指令中的操作数

指令中的操作数总体有三种变现形式

我们先不看这一行语句

我们首先来想

我们在编写程序时 程序都放在硬盘里

编译 链接 然后存放

那么程序在运行时一定要放在内存里

这个大家去 如果不清楚原理的话

大家可以看一下有关操作系统方面的书

只有到了内存里 程序才能被执行

所以当程序导入内存的时候

它包括了程序中的指令 以及指令的运算数据

都到内存里头

所有的数据和指令

在内存里一定要有存放的地方

我们在上一章的内容里已经学过

内存是按单元来组织的

所以我们每一条指令 以及运算的数据

他都有一个单元地址

为了要找到这个运算的数据

我们就必须找到这个数据在内存中的存放地址

所以内存也就成为了指令操作数的一种表现形式

除了内存可以用来存放数据之外

在计算机主机里面

还有一个地方可以存放数据

就是我们上一章讲过的CPU的寄存器

在CPU中 通用CPU的主要作用

就是用来暂存中间运算结果

所以在指令中间

也把他作为操作数的一种表现形式

因此在指令中的操作数呢

我们说三种形式

一种是现在看到的立即数的形式

这个立即数 表示运算数据本身

也就说他的数据是自己

所以他没有任何地址的含义

他就是运算的数据

而这个寄存器 或者说存储器

它是用来表示运算数据的存放处

也就说他们是真正有地址含义的

我们现在应该已经知道

寄存器呢 我们虽然不知道他的地址是0还是1

但是他都有名字

面向程序员 比如有AX BX等等

这就是他的地址

具体AX是01还是21 这由系统决定

而内存的每个单元都有地址

所以不管是寄存器操作数也好

存储器操作数也好

在指令中间

他一旦出现就表示运算数据存放的地址

或者说运算数据的存放处

这就是我们三种主要操作数的形式

下边我们进一步的对这三种操作数

做一个简单的描述

请大家注意

8086也好 8088也好 他们都属于16位的CPU

因此在指令中 他们的操作数/操作对象

都可是8位 也可以是16位 但不能是更长

这一点跟我们今天32位指令系统是不一样的

立即数 我们刚才已经反复强调

他是运算数据本身 他没有运算地址的含义

而根据我们前面对目标操作数和源操作数的定义

我们已经知道

因为目标操作数一定表示操作结果的去向

也就说 目标操作数一定要有地址的含义

所以 立即数呢

它就不能作为目标操作数 而只能作为源

下面我们来看两条指令的例子

这两条指令

虽然他的指令助记符我们都还没有学过

但是为了后面描述的方便

我们先把它拿出来给大家作为示例

这里的MOV 我们念作move

它和英文的移动就差了一个字母 少了一个e

那么从字面意思 大家可以马上想象来

他就是传送的意思

所以这条指令MOV

他就实现的是数据传输

它的功能是将源操作数送到目标地址里面

在这里

第一条指令里的源操作数是一个常数1234H

目标是一个寄存器AX

这条指令的执行

就是把常数1234H送给目标寄存器AX

第二条指令呢 源操作数也是一个常数22H

而目标操作数是一个寄存器BL

是个8位寄存器

这条指令的执行结果

就是将常数22H送给目标寄存器BL

通过着两条指令 大家就可以看出看来

目标操作数 因为一定表示运算结果的去向

所以他一定是地址 就不可能是常数

所以立即数在指令中 只能作为源操作数存在

这一点请大家务必注意

立即数可以是无符号数 也可以是有符号数

可以是8位的无符号或者有符号数

也可以是16位的无符号或者有符号数

但是请大家注意

因为这是由指令直接给出的数

所以给出的数据一定要符合字长的要求

寄存器操作数表示

运算数据存放在某个寄存器中

它可以是16位的寄存器

也可以是8位的寄存器

比如这样子的一条指令

也就说第一条指令表示

将BX中的内容送给AX

第二条指令表示将CH寄存器(的数据)送给DL寄存器

这个是寄存器操作数

因为寄存器本身在CPU的内部

所以作为操作数来讲 它的速度是最快的

其实最复杂/最麻烦的操作数是存储器操作数

因为内存很大

每个数据在内存中一定要存放在某个单元里

存放在哪个单元里 这种表现形式会很多

这也是我们后面要学寻址方式

大家感觉最麻烦的一种

存储器操作数在这一会

请大家一定要注意他的表现形式

在指令中间 只要看到方括号

心里就要明确 这就表示存储器操作数的意思

也就说这个时候指令运算的对象

在内存的某个地方

在内存的哪一个地方?

他在内存的地址 就在方括号里

所以放括号里边 就是存放数据的地址

什么地址呢?是偏移地址

我们未来会知道 在真正编程序的时候

绝对不考虑物理地址 也不可能考虑到物理地址

我们也基本不会考虑段地址

因为我们无法直接设置段地址

我们只能够设置或者操作偏移地址

这种理由

如果大家希望更深一步了解的话

可以看一下有关操作系统方面的知识

下面我们看一条存储器操作数的例子

比如这条指令

他的源操作数是存储器操作数

目标是寄存器操作数

在这条指令里 方括号里是一个常数1200H

这个1200H不再是前面的立即数

讲立即数时看到 他虽然是一个常数

但是因为放在方括号里头了

这个常数的含义就被固定了

也就说他不再是运算的数据 而是地址了

其实这个也很容易理解 就像门牌号码一样

比如你家的门牌号码是1200

这个1200放在你家的门上 这表示你家的地址

但是放在你的存折上 他就是1200块钱

就这样一个同样的数字 放在不同的地方含义是不一样的

那么在这里 1200H放在了方括号里头

它就代表着这个地址

所以这条指令的执行是这样的

就是把内存中

偏移地址叫1200H的单元的内容

拿出来送给累加器AL

它的执行过程就是这样的

我们在看一条指令 如果是下面这条指令呢?

源操作数还是存储器操作数

存储器操作数里的地址依然是1200H

但是因为目标操作数变成了AX

也就说 变成了一个16位的寄存器

那么它意味着什么呢?意味着做了这样一个操作

也就说 将1200H单元的内容 拿出来送给了AL

而将1201H单元的内容送给了AH

合起来就是AX

所以这个时候 AX等于1122H

这个例子我希望

传达给大家这样一个信息

就说存储器操作数 我们知道内存很大

那么现在存储器操作数到底是一个单元?

还是两个单元?还是更多单元?

那么实际上他是一个不确定的字长

那么他到底传送了一个字节单元 还是两个字节单元

完全取决于另外一个操作数的字长

在我们这两条指令中

第一条指令的目标操作数是AL 是一个8位寄存器

那么就意味着

他的源操作数/存储器操作数是一个字节单元

第二条指令呢?

因为他的目标是AX 是16位寄存器

那么也就意味着

他的源操作数虽然还是那个样子

但是(目标操作数)是16位的字长了

也就说两个单元了 所以这时会传送两个单元

请大家通过这个图理解一下

他传送的是哪两个单元

在这个里头

源操作数1200H实际上给出的是

这16位数的低8位的地址

所以传送的是1200H和1201H两个单元的数

下边把这三种操作数做一个简单的小结

首先我们说

立即数就是代表运算对象 或者说运算本身

是由指令直接给出来的

很多时候 他都是常数形式表示的

或者说 未来大家会看到 可能会是一个字符

但是本质上 还是可以理解成一个常数

请大家一定要注意 立即数是运算数据本身

他没有地址的含义

所以他绝不能作为目标操作数出现在指令里

寄存器跟存储器 这两种类型的操作数

都表示运算数据存放的地址

在多数情况下

我们说的寄存器操作数 指的是通用寄存器

控制寄存器 不会在指令中直接出现

而一些段寄存器呢 在使用上也会受到一些限制

所以更多的时候 是指通用寄存器

在三种操作数中

寄存器操作数所用时间是最短的

也就说 它的速度是最快的

理由很简单 他就在CPU肚子里

存储器操作数 表示运算的数据在内存里

在指令中 存储器操作数是用方括号描述的

所以有时候我会说一句很简单的话

就说 在指令中 看到方括号 马上就要想到

你要找的数 在内存里

在内存的什么地方? 接着就看方括号里面

他就给出了这个数的地址

记住了这样两点

那么下边再学寻址方式的时候 就容易知道

在这三种操作数里

存储器操作数的速度是最慢的

因为它不仅牵扯到各种寻址方式的转换

还有就是 他和指令代码不在同一个存放区域里

所以相对来讲 花的时间就比较多

有关这一部分的内容就介绍到这里

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

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

--结束语

指令概述笔记与讨论

也许你还感兴趣的课程:

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