7汇编语言程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2019/12/5
单片机原理及其应用
19
7.2 算术运算程序的设计
开始
被除数的高八位大于除数 Y
置溢出标志
N 除法(移位)次数
结束
余数左移一位
保留余数移出的最高位
余数的高八位减去除数
Y
够减否?
差为余数的高八位
N
商0 商1
图7.5 除法程序流程图
除法完?
N
Y 四舍五入处理
清溢出标志
结束
2019/12/5
目前,基于MCS-51单片机的程序开发设计有采 用汇编语言和高级语言2种形式,高级语言有采用C 语言、BASIC语言、PLM语言等,大多数集成开发环 境(Integrated Development Environment,IDE) 软件都支持这2种形式。
2019/12/5
单片机原理及其应用
2
第7章 汇编语言程序设计
汇编程序设计的步骤: (1)分析题目或课题的要求,正确理解解决什么问 题,如何解决问题、有哪些可利用的资源、对计算 精度的要求等;另外,了解应用系统硬件的结构和 功能与课题任务的关联。 (2)确定解决问题的方案,画出程序流程框图; (2)根据解决方案,确定变量及其数据存储格式, 给各个变量分配存储空间; (3)根据程序流程图,选用合适的指令编写程序, 完成源程序的设计; (4)在集成开发环境上调试,完成设计要求的功能。
7.2 算术运算程序的设计
例5 多字节数二进制乘法 2个多字节二进制数乘法的算法与按位进行十进
制数乘法相似。把它转换为几个多字节与单字节的 乘法运算,先分别计算出它们的部分积,然后按照 规则把部分积累加计算出乘积。
图7.4为2个16位二进制数相乘的算法原理图。 图中被乘数为X,其高八位和低八位分别存储在XH 和XL单元,乘数为Y,YH和YL分别高八位和低八位 存储单元。
2019/12/5
单片机原理及其应用
3
7.1 伪指令
伪指令(Pseudo Instruction)是汇编语言中起 解释说明的命令,它不是单片机的指令。
在单片机的集成开发环境中,向汇编系统说明 程序存储在程序存储器的哪个区域、本汇编语言程 序到何处结束、变量代号对应的单元地址或所代表 的数值等。在汇编时,伪指令不会产生目标代码, 不影响程序的执行。
2019/12/5
单片机原理及其应用
13
7.2 算术运算程序的设计
(1)2位十进制数减法子程序: 入口条件:R0指出被减数所在单元的地址;R1指出减数
所在单元的地址; 出口条件:R0指出差所在单元的地址,进位在Cy中;
SH_SUB:
MOV A, #9AH SUBB A, R1 ADD A, R0 DA A MOV R0, A INC R0 INC R1 CPL C RET
图7.8 多个数据求总和的流程图
2019/12/5
单片机原理及其应用
24
7.3 循环程序的设计
例8 设有一个字符串以回车符(ASCII码为0DH)为 结束标志,并存放在内部RAM的40H单元开始的连 续存储单元中,编写测试字符串长度的程序。
这是一个循环次数未知的循环程序设计例题。 为了测试字符串的长度,字符串中的每个字符依次 与回车符(0DH)比较,如果比较不相等,则字符 串长度计数器加1,继续测试;如果比较相等,表示 该字符为回车符,则字符串结束,长度计数器的值 就是字符串的长度。程序流程框图如图7.9所示。
例7 设单片机系统采集的8个单字节数据存储在单片机内
部RAM的30H开始的连续单元中,求它们的均值。 N 计算一组数据平均值的公式为:x xi N,其中,x i 为第i个
数据,N为数据的个数。因此,要计算i出1 平均值需要进行2种
运算:求数据的总和、数据总和除以数据个数。
(1)求数据的总和
29
7.4 查表程序的设计
查表程序是一种在单片机应用系统中常用的程 序,例如,显示输出时,利用查表程序提取字型编 码,数值运算时,利用它可以避免进行复杂的程序 运算或转换运算,可以完成数据插补、修正、计算、 转换等功能 。
2019/12/5
单片机原理及其应用
30
7.4 查表程序的设计
例10 设字符0~9、A~F的ASCII码已作为常数存储在 程序存储器中,编写子程序由给定x(0xF)查找 其对应的ASCII码。
示,图中一个方框代表一个单元。Cy表示进位。当 最低字节(低8位)运算时,如果令Cy为0,那么, 完成3个字节的加法运算进行了3次相同的单字节加 法操作,可以采用循环结构实现2个3字节数据的加 法运算。
+
Cy
Cy
Cy
Cy 0
图7.1 二进制数加法算法
2019/12/5
单片机原理及其应用
9
7.2 算术运算程序的设计
汇编语言程序设计中常见的典型循环结构如图
7.7所示。
开始
初始化
开始
循环处理
初始化
修改变量
N
循环结束?
Y 结束部分
修改变量
循环结束? N
处理部分
Y 结束部分
结束
结束
(1)先处理后判断的结构
(2)先判断后处理的结构
图7.7 典型循环结构
2019/12/5
单片机原理及其应用
22
7.3 循环程序的设计
(二)循环程序设计举例
2019/12/5
单片机原理及其应用
14
7.2 算术运算程序的设计
(2)6位十进制数加法程序: MOV R0, #20H MOV R1, #30H MOV R5, #03H CLR C
DOSUB: ACALL SH_SUB DJNZ R5, DOSUB RET
2019/12/5
单片机原理及其应用
15
为4F8BH
2019/12/5
单片机原理及其应用
5
7.1 伪指令
(3)定义字节数据伪指令DB [xxxxH] DB data
如: 2000H DB 30H ; 伪指令DB也可用来定义多个连续单元为常数,
即用来定义一组单字节数据组成的常数表。 如: ORG 1000H
DB 30H,31H,32H,33H,34H,35H,36H, 37H,38H,39H, 2EH,0DH
第7章 汇编语言程序设计
7.1 伪指令
主
7.2 算术运算程序的设计
要
7.3 循环程序的设计 7.4 查表程序的设计
内
7.5 检索程序的设计
7.6 分支程序的设计
容
7.7 码制转换程序的设计
7.8 逻辑操作程序
第7章 汇编语言程序设计
程序设计是为了解决某一个问题,把指令(或 语句)按照一定的意图有序地组合在一起。
设S为数据的总和,在计算机中求多个数据总和的算法如下:
S 0
i 0
SSxi i1 ,2, ,N
该算法的程序流程框图见图7.8
2019/12/5
单片机原理及其应用
23
7.3 循环程序的设计
开始 存放数据的首地址
数据个数 总和S清零
取数据xi
S=S+xi 修改存储单元地址
N
累加结束?
Y 结束
2019/12/5
单片机原理及其应用
28
7.3 循环程序的设计
开始
关闭所有LED
设置显示控制码初值: 00000011
设置闪烁次数
闪烁 N
3次完否?
移位产生下一组显示控制码
N
8个LED全部点亮1遍?
点亮所有LED
关闭所有LED
图7.11 循环闪烁系统的程序流程图
2019/12/5
单片机原理及其应用
2019/12/5
单片机原理及其应用
16
7.2 算术运算程序的设计
算法分2步进行:首先,分别用乘数的高八位和 低八位与被乘数相乘,计算部分积,分别存储在 (XYH3),(XYH2),(XYH1)和 (XYL3),(XYL2)(XYL1)单 元;在编写程序时,乘法运算可以用子程序调用的 方法实现(第3章例33)。第二步,采用加法运算求 出乘积存储在(XY4)(XY3)(XY2)(XY1)单 元。
单片机原理及其应用
18
7.2 算术运算程序的设计
例6 多字节二进制除法 2个多字节无符号二进制数的除法是采用移位和
减法运算实现的,实现过程与我们进行十进制数乘 法形似,每次进行除法运算时,如果余数大于减数 (构件)则商1,否则,商0。图7.5为16位二进制数 除以8位二进制数的程序流程图。该算法要求被除数 的高八位数据必须小于除数,否则,作为溢出处 理,子程序把标志位OV的状态置为1,从子程序返 回。
+5V
L0
R0
L1
R1
L2
R2
L3
R3
L4
R4
L5
R5
L6Βιβλιοθήκη R6L7R7(1)硬件电路原理图
L7 L6
L5
L0 L1 L2
L3 L4
(2)发光二极管布置示意图
图7.10 循环闪烁系统原理与布置示意图
2019/12/5
单片机原理及其应用
27
7.3 循环程序的设计
例9循环闪烁系统原理与布置示意图如图7.10所 示,MCS-51单片机的P1口控制8个发光二极管。编 制一个循环闪烁的程序,要求每次相邻的2个发光二 极管为1组闪烁点亮3次后,转移到下一组,8个发光 二极管显示1遍后,全部点亮,然后熄灭,又以每组 2个灯的方式闪烁显示,如此不断循环。
单片机原理及其应用
20
7.3 循环程序的设计
(一)循环结构的组成
循环结构由4部分组成:初始化部分、循环处理
部分、循环控制部分和循环结束部分。循环结构组
成图见图7.6。
开始
初始化
循环处理 修改控制变量
循环结束? 结束部分
结束
图7.6 循环结构组成
2019/12/5
单片机原理及其应用
21
7.3 循环程序的设计
2019/12/5
单片机原理及其应用
17
7.2 算术运算程序的设计
XH
XL
×
YH
YL
×
XYH3
XH XYH2
XL YH XYH1
×
XYL3
XH XYL2
XL YL XYL1
XYH3
XYL3 XYH2
XYL2 XYH1
XYL1
XY4
XY3
XY2
XY1
图7.4 2个16位二进制数乘法算法
2019/12/5
例2 多字节二进制减法。 多字节二进制减法与多字节二进制加法相似,图
7.2为3字节二进制减法的算法。
-
Cy
Cy
Cy 0
图7.2 减法算法
2019/12/5
单片机原理及其应用
10
7.2 算术运算程序的设计
例3 多位十进制数加法。 十进制数在计算机中可以采用BCD码的形式存
放。采用紧凑形式(或压缩式)BCD码存放十进制数 时,一个存储单元可以存储2位。MCS-51单片机仅 支持二进制加法运算,采用ADD和ADDC指令的结果 是二进制数,因此,2个以BCD码形式存储的数据, 在用ADD和ADDC运算之后,必须对其运算结果进行 调整。多位十进制数加法的算法与多字节二进制数 算法相似,如图7.3所示。
2019/12/5
单片机原理及其应用
11
7.2 算术运算程序的设计
+
DA A
DA A
DA A
图7.3 多位十进制加法算法
2019/12/5
单片机原理及其应用
12
7.2 算术运算程序的设计
例4 多位十进制减法 在第3章的例30中,我们介绍了2位十进制数减
法算法:X-Y=X+100-Y X+9AH-Y,把十进 制减法变换成二进制减法(求十进制减数的补码) 和十进制加法2步进行。多位十进制数减法也采用了 同样的算法。设被减数存放在20H开始的内部RAM 存储单元,减数存放在30H开始的存储单元,6位十 进制数减法的程序如下
(6) 汇编结束伪指令END
END
2019/12/5
单片机原理及其应用
7
7.2 算术运算程序的设计
在MCS-51单片机指令系统中,算术运算指令仅 支持2个无符号的8位二进制数的运算,二进制数算 术运算是按字节的方式进行的。
2019/12/5
单片机原理及其应用
8
7.2 算术运算程序的设计
例1 多字节二进制加法。 以三字节无符号二进制数为例,算法如图7.1所
2019/12/5
单片机原理及其应用
6
7.1 伪指令
(4) 定义双字节数据伪指令DW
[xxxxH] DW data16
如: 1000H DW 0FDE1H
1100H DW 1345, 2241, 34556
(5) 位地址赋值伪指令BIT
变量代号 BIT 位地址
如: CS
BIT P2.0
FLAG
BIT 20H.6
2019/12/5
单片机原理及其应用
25
7.3 循环程序的设计
开始 字符串存储首地址
长度计数器清0
取字符
是0DH(回车)? N
长度计数器加1
存储单元地址+1
Y 结束
图7.9 测试字符串长度的程序流程框图
2019/12/5
单片机原理及其应用
26
7.3 循环程序的设计
MCS-51
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
2019/12/5
单片机原理及其应用
4
7.1 伪指令
常用的有以下几种伪指令:
(1)设置起始地址伪指令ORG
ORG xxxxH
如:
ORG 0100H
SUB: MOV R0, #30H
……
(2)赋值伪指令EQU
变量代号 EQU 数值
如: LEN EQU 20; 在程序中变量LEN的值为20H
Xdata EQU 4F8BH;在程序中变量Xdata的值