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

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

通用数据传送指令_02在线视频

通用数据传送指令_02

下一节:通用数据传送指令_03

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

通用数据传送指令_02课程教案、知识点、字幕

在数据段区的最左边这一列没有给出

DS具体等于几

DS的值在未来里寄存器区大家可以看得到

那么在这里用DS冒号来表示

就表示现在这个区是数据段区

我们看第一行的第二列

DS冒号后边是1000

这个就是现在偏移地址

那么这个同样地是用十六进制来表示

所以写完之后我们一直从1001开始到1063H结束

全部都是2AH

这就是我们这段程序编写完代码段区的情况

及执行完数据段区的情况大概就是这样

先大家一个感性的认识

有关MOV指令的学习我们就讲到这里

MOV指令在程序中间的使用频率地相当高

每一段程序肯定都会涉及到数据的传送

所以MOV指令会出现在未来每一段程序中

当然这条指令大家是一定要熟练掌握的

下边我们来学习通用数据传送中的第二小类

就是堆栈操作指令

堆栈操作指令是专门针对堆栈操作的指令

在讲具体的指令之前我们先来

一下堆栈操作的原则

堆栈操作的基本原则是这样

首先是先进后出

这是所有栈的基本的原理或者要求

第二条是我们汇编指令对堆栈指令的基本要求

就是它的每一次操作都是以字为单位的

在十六位计算机系统中间

一个字的长度就是两个字节

以堆栈指令的操作数一定是十六为的操作数

绝不可能是八位操作数

堆栈操作指令一共有两条

一条是压栈指令 一条是出栈指令

它们的指令助记符都非常形象

入栈指令的助记符是一个PUSH

它后边是单操作数 出栈指令的助记符是POP

后边也是单操作数

它们两者后边显示给出的操作数可以是

十六位的寄存器或者是内存两个单元

PUSH指令的执行是将一个十六位的数押入堆栈

我们在前面的课程里已经介绍过

堆栈可以形象的认为像箱子一样

我们向箱子放东西

有两个特点 第一箱子里要有空间

第二肯定是先放进去的在最底下

所以PUSH指令就相当于我们在箱子里放东西一样

所以它的执行过程是这样

首先我们要确定堆栈是有地方的

堆栈有没有空间是取决于栈顶的位置

如果栈顶现在和栈首是重合了

那么我们这个堆栈就满了

如果栈顶和栈底是重合的

那么我们这个栈就是空的

那么如果我们要向堆栈放东西

那么我们就相当于要首先腾出一个空间一样

怎么个腾出法呢 它的执行过程是这样子

首先我们将SP减二

堆栈的操作我们知道是从底下往上上

假如我们底下是高地址

上面是低地址,那么我们就把它减二

相当于腾出了两个字节的空间

然后我们就向里压入一个十六位数

当然高字节就是高八位压入到高地址

然后低八位压入到低地址

这样子我们一次PUSH操作就结束了

这就是PUSH指令的一个操作的基本过程

我们用一个事例来描述一下

设我们有一个这样的条件 AX=1234H

SP=1200H 我们来执行PUSH AX指令

看一下它的执行过程

我们用图来描述

就是在执行这条PUSH指令之前

SP是1200H 这就是当前的栈顶的位置

假设我们在前面还有空间 那么在执行之后

首先SP要减二

1200H减二等于多少呢?

就是11FEH 然后把AS压入堆栈

其中 AH就是12H压入到新的栈顶地址加一的位置

然后把AL压入到新的栈顶指针所指向的位置

执行结束之后

现在新的堆栈的情况是这样

栈顶指针等于11FE

栈顶指针里边所指向的字单元的内容是1234H

这是PUSH指令 那么我们来看看POP

POP是将栈顶的位置弹出到POP指令

所指向的那个目标里去

所以 在POP 指令的执行过程就是这样

首先它将栈顶地址里边的一个单元的内容弹出来

然后SP加一 向下移动一个

再把下边一个单元字节的内容弹出来

一个字的内容弹出之后

我们SP再加一 这就是新的栈顶

所以POP指令就是将当前栈顶的内容弹出

然后 弹出相当于对它做了一个读操作

把它读出来了 我们说过 读是一个非破坏性的

也就相当一个COPY粘贴的工作

所以实际上读完以后

最初SP所指向的字单元还是原来的值

但是POP执行完SP加二了

所以新的SP在下边这个地方

就是从栈操作这个角度来讲

刚才那两个字节单元的内容我们就视而不见了

就认为不存在了

下边我们在做压栈操作的时候

我们说 实际上SP减二往上走 然后新的数据下去

这样子就把刚才那两个数覆盖了

这个就是我们堆栈操作

PUSH和POP的基本执行原理

POP我们也来用一个例子来看一下

假设我们执行一条POP AX

如果刚才假设我们已经做了一个PUSH 的操作

AX等于11FE的话

那么POP以后

就把这两个字节单元的内容弹出来给AX

那么新的栈顶就是11FE加2

就等于1200H

这就是POP指令的执行

从刚才这两个例子以及我们的描述中

大家应该能够感觉到 堆栈操作要注意的几点

一个 堆栈操作指令 不论是PUSH指令还是POP指令

它的操作数都必须是十六位的操作数

这个十六位的操作数可以是十六位的寄存器

或者是内存两个单元

当然寄存器没有问题 它的字长CPU非常清楚

AX是十六位 BX也是十六位

但是存储器我们知道内存很大

所以存储器操作数的字长实际上是不确定的

虽然你可能认为PUSH和POP指令规定

存储器操作数必须是十六位

但是作为编译器来讲它不能确定

所以所有的存储器操作数

我们必须要说明一下它的字长到底是多长

这个说明的办法我们到后边再来给大家解释

这里我们先给大家一个约定

就是我们所有的单操作数格式的指令

对操作数有两点共同的要求

第一如果它是存储器操作数

必须要申明它的字长

第二显示给出的单操作数不能是立即数

为什么 我们来简单的讨论一下

我们回忆我们刚才讲的PUSH和POP

我们说PUSH指令后面显示给出一个操作对象

POP指令后面也显示给出一个操作数

那么这两个操作数的性质是什么呢

我们来看 PUSH是将一个数压入到栈顶的位置

所以在PUSH指令里边

我们显示给出的那个操作数是原操作数

我们的目标就是当前的栈顶的位置

像刚才那个例子 PUSH AX

所以就是将AX值压入到当前栈顶位置

因为栈顶地址已经是一个规定的地方

所以我们就不再显示地给出来而采用隐含的方式

所以我们只显示给出来源

那么POP指令呢 POP指令是一个弹出

就是从栈顶地址弹出数据的一个指令

所以它的原操作数是栈顶

那么目标就POP后边显示给出的操作数

所以在这两条指令里头

它所显示给出的单操作数一个是源一个是目标

我们已经讲过立即数它只是一个常数

它没有地址的含义

所以它绝对不能作为目标操作数

所以POP指令的目标操作数肯定不能是立即数

POP指令后边的那个操作数 因为它是原操作数

好像可以用立即数来表示

但是实际上也不行

在8086指令系统里

所有单操作数格式的指令

它对操作数有这样两个共同的要求

第一绝对不能是立即数

第二如果是存储器操作数必须申明它的字长

这是所有单操作数指令有这样一个共同的要求

后边我们不在强调这一点

因为CS是代码段的段地址

实际上直接决定着程序代码的走向

所以我们不能从栈顶里面弹出一个字

给CS 也就是说

不能有POP CS这样的指令

理论上PUSH CS 是可以的

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

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

--结束语

通用数据传送指令_02笔记与讨论

也许你还感兴趣的课程:

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