内容正文:
1
第3章 MCS-51汇编语言
教学提示:
本章重点难点在于理解单片机MCS-51指令系统的寻址方式,以及数据传送类指令、算术运算类指令、逻辑操作类指令、位操作类指令和控制转移类指令操作的含义及具体的使用,掌握单片机MCS-51汇编语言程序的三种基本结构形式、常用汇编语言程序设计。
教学目标:
掌握指令系统的寻址方式。
掌握汇编语言指令的格式。
掌握汇编语言指令的功能及应用。
掌握伪指令的格式及应用。
掌握汇编语言程序的基本结构。
掌握程序设计的步骤和方法。
学会具体程序的应用。
2
3.1 指 令 系 统
1. 单字节指令
(1) 8位全表示操作码。
(2) 8位编码中包含操作码和寄存器编码。
2. 双字节指令
3. 三字节指令
3
3.1.1 指令格式
用二进制编码表示的机器语言指令由于不便于阅读理解和记忆,因此在微机控制系统中采用汇编语言(用助记符和专门的语言规则表示指令的功能和特征)指令来编写程序。
一条汇编语言指令中最多包含4个区段,如下所示:
[标号:] 操作码助记符 [目的操作数] [,源操作数] [;注释]
(1) 标号区段是由用户定义的符号组成的,最好用英文大写字母开始。
(2) 操作码区段是指令要操作的功能,由助记符表示。
(3) 操作数
(4) 注释区段可缺省,对程序功能无任何影响,只用来对指令或程序段做简要的说明,便于他人阅读,在调试程序时也会带来很多方便。
4
3.1.2 寻址方式
3.1.2 寻址方式
MCS-51指令系统的寻址方式有下列几种。
直接寻址。
立即数寻址。
寄存器寻址。
寄存器间接寻址。
变址寻址。
位寻址。
相对寻址。
5
3.1.2 寻址方式
1. 直接寻址
(1) 内部数据存储器的低128个字节单元(00H~7FH)。
(2) 位地址空间。
(3) 功能寄存器。
2. 立即数寻址
3. 寄存器寻址
4. 寄存间接寻址
5. 变址寻址
6. 位寻址
(1) 用一个DATA类型地址规定一个含有该位的字节,并用位选择符号“.”,尾随一个位的识别符(0~7)单独指出该字节中特定的位。
(2) 明确规定位地址。
7. 相对寻址
6
3.1.3 指令类型
1. 指令分类
数据传送类。
算术运算类。
逻辑操作类。
位操作类。
控制转移类。
7
3.1.3 指令类型
2. 数据传送类指令
(1) 以直接地址为目的操作数和源操作数的传送指令
(2) 累加器与外部数据存储器之间的数据传送指令。
① 由DPTR内容指示外部数据存储器地址
(a) 外部数据存储器内容送累加器
(b) 累加器内容送外部数据存储器
② 由Ri内容指示外部数据存储器地址
(a) 外部数据存储器内容送累加器
(b) 累加器内容送外部数据存储器
(3) 程序存储器内容送累加器。
(4) 堆栈操作指令。
① 进栈指令
② 出栈指令
(5) 字节交换指令。
(6) 半字节交换指令:
8
3.1.3 指令类型
3. 算术运算类指令
(1) 加法指令
(2) 带进位加法指令
(3) 带进位减法指令
(4) 加1指令
(5) 十进制调整指令
(6) 减1指令
(7) 乘法指令
(8) 除法指令
9
3.1.3 指令类型
4. 逻辑操作类指令
(1) 单逻辑操作指令
① 累加器清零
② 累加器内容按位取反
③ 左循环移位指令。
(a) 累加器的内容循环左移
(b) 累加器带进位左循环移位指令
④ 右循环移位指令。
(a) 累加器内容循环右移指令
(b) 累加器带进位右循环移位指令
⑤ 累加器半字节交换指令
(2) 逻辑与指令
(3) 逻辑或指令
(4) 逻辑异或指令
10
3.1.3 指令类型
5. 位操作类指令
(1) 数据位传送指令
(2) 位变量修改指令
(3) 位变量逻辑与指令
(4) 位变量逻辑或指令
(5) 位变量条件转移指令
11
3.1.3 指令类型
6. 控制转移类指令
(1) 无条件转移指令。
① 绝对转移指令
② 相对转移(短跳转)指令
③ 长跳转指令
④ 散转指令
(2) 条件转移指令。
(3) 比较不相等转移指令
(4) 减1不为0转移指令
(5) 调用指令。
① 绝对调用指令
② 长调用指令
(6) 返回指令。
① 子程序返回指令
② 中断返回指令
(7) 空操作指令
12
3.1.4 伪指令
1. ORG(Origin——起点)
2. DB(Define Byte——定义字节)
3. DW(Define Word——定义一个字)
4. EQU(Equate——等值)
5. END(汇编结束)
13
3.2 汇编语言程序设计
本节重难点在于单片机MCS-51汇编语言程序的三种基本结构形式、常用汇编语言程序设计。
14
3.2.1 三种基本程序结构
程序设计是为了解决某一个问题,将指令有序地组合在一起。程序有简有繁,有些复杂程序往往是由简单的基本程序所构成的。这里将通过一些基本程序,介绍部分常用程序设计方法。
程序设计的过程大致可以分为以下几个步骤。
(1) 编制说明要解决问题的程序框图。
(2) 确定数据结构、算法、工作单元、变量设定。
(3) 根据所用计算机的指令系统,按照已编制的程序框图,用汇编语言编制出源程序。
(4) 将编制出的程序在计算机上调试,直至实现预定的功能。
15
3.2.1 三种基本程序结构
1. 顺序程序
2.分支程序
3.循环程序
(1) 置循环初值,即确立循环开始时的状态。
(2) 循环体(工作部分),要求重复执行的部分。
(3) 循环修改,循环程序必须在一定条件下结束,否则就要变成死循环。
(4) 循环控制部分,根据循环结束条件,判断是否结束循环。
16
3.2.2 子程序和参数传递方法
调用子程序有几个优点:
可避免对相同程序段的重复编制。
可简化程序的逻辑结构,同时也便于子程序调试。
可节省存储器空间。
在MCS-51指令系统中,提供了两条调用子程序指令ACALL及LCALL,和一条返回主程序的指令RET。
子程序的调用,一般包含两个部分,保护现场和恢复现场。由于主程序每次调用子程序的工作是事先安排的,根据实际情况,有时可以省去保护现场的工作。
调用子程序时,主程序应先把有关的参数(入口参数)存放在约定的位置,子程序在执行时,可以从约定的位置取得参数,当子程序执行完,将得到的结果(出口参数)存入约定的位置,返回主程序后,主程序可以从这些约定的位置上取到需要的结果,这就是参数的传递。
17
3.2.2 子程序和参数传递方法
1. 通过工作寄存器或累加器传递参数
2.用指针寄存器来传递参数
3.用堆栈来传递参数
4. 程序段参数传递
18
3.2.3 查表程序设计
1. 用MOVC A, @A+PC查表指令编程
2. 用MOVC A, @A+DPTR查表指令编程
19
3.2.4 散转程序设计
散转程序是分支程序的一种。它由输入条件或运算结果来确定转入各自的处理程序。有多种方法能实现散转程序,但通常用逐次比较法,即把所有各个情况逐一进行比较,若有符合的,便转向对应的处理程序。
由于每一个情况都有判断和转移,如对n个情况,需要n个判断和转移,因此它的缺点是程序比较长。
MCS-51指令系统中有一条跳转指令是JMP @A+DPTR,用它可以很容易地实现散转功能。该指令是把累加器A的8位无符号数(作为地址的低8位)与16位数据指针的内容相加,其和送入程序计数器,作为转移指令的地址。执行JMP @A+DPTR指令后,累加器和16位数据指针的内容均不受影响。
20
3.2.4 散转程序设计
1. 用转移指令表实现散转
(1) 例如处理程序LOP0、LOP3比较长,要把两个程序转至其他区域,分别把它们的入口地址用符号LLOP0,LLOP3表示,以实现程序的转移。
(2) 可以直接用LJMP指令组成转移表
2. 用转移地址表实现散转
21
3.3 实 践 训 练
3.3.1 任务1 指令的熟悉及使用
1.任务目标
(1) 熟悉指令格式。
(2) 掌握汇编指令的使用方法。
(3) 熟练掌握应用Keil软件调试汇编语言程序的方法。
2.知识点分析
(1) 指令的寻址方式。
(2) 数据在片内外的传送。
(3) 堆栈指令的应用。
(4) 算术运算指令。
22
3.3.1 任务1 指令的熟悉及使用
3.实施过程
(1) 将R0~R7、A、PSW、B和SP都送入十六进制数FFH,并观察结果,试采用不同的寻址方式完成数据传送。
(2) 学习片外RAM的传送指令和交换指令
(3) 学习堆栈指令
(4) 学习加法指令的功能。
4.思考
23
3.3.2 任务2 指令的分析及应用
1.任务目标
(1) 掌握指令格式及表示方法。
(2) 了解人工汇编与机器汇编的方法。
(3) 了解寻址方式的概念。
(4) 掌握常用指令的功能及应用。
2.知识点分析
(1) 助记符表示和机器码表示方法。
(2) 数据传送指令。
(3) 逻辑运算指令。
3.实施过程
4.思考总结
(1) 指令形式
(2) 指令分析
(3) 思考
24
3.3.3 任务3 进行20个数的从小到大排序
1.任务目标
(1) 掌握汇编语言程序的基本结构。
(2) 掌握程序设计的步骤和方法。
(3) 学会按要求来设计程序。
2.知识点分析
(1) 冒泡法的含义。
(2) 数据排序的设计方法。
(3) 程序的拓展应用。
25
3.3.3 任务3 进行20个数的从小到大排序
3.实施过程
(1) 编程要求
(2) 知识准备
(3) 流程图
(4) 编写程序
26
3.3.4 任务4 数码管显示程序设计
1.任务目标
(1) 了解汇编语言程序结构。
(2) 掌握程序设计的步骤和方法。
(3) 学会按要求来设计程序。
2.知识点分析
(1) 数码管显示原理。
(2) 数码显示的程序设计。
(3) 程序的拓展应用。
27
3.3.4 任务4 数码管显示程序设计
3.实施过程
(1) 编程要求
(2) 知识准备
(3) 连接电路
(4) 编写程序
28
习题与思考题
参见教材P96
$$