文档介绍:2017年11月12日
牡丹江师范学院计算机科学与技术系
1
本章重点
1. 熟练掌握MCS-51的指令系统,掌握MCS-51汇编语言程序设计的基本步骤;
2. 掌握MCS-51汇编语言的顺序程序设计、分支程序设计、循环程序设计方法;
3. 掌握MCS-51汇编语言的散转程序设计方法;
4. 掌握MCS-51汇编语言的子程序设计和参数传递方法;
5. 掌握MCS-51汇编语言的查表程序设计和数制转换程序设计方法;
2017年11月12日
牡丹江师范学院计算机科学与技术系
2
MCS-51汇编语言程序设计步骤
★了解应用系统的硬件配置、性能指标(单片机系统往往是非标准系统);
★建立数学模型,确定算法和操作步骤;
★画出程序流程图;
★编制源程序。尤其注意:
合理分配存储器单元和I/O接口地址;
采用模块化结构;
加以必要的注释。
2017年11月12日
牡丹江师范学院计算机科学与技术系
3
简单程序设计
例4-1 两个无符号双字节数相加。被加数存于内部RAM的40H(高位)、41H,加数存放于50H(高位),51H,和数存入40H和41H单元中。
分析:
★多字节加法,低位字节:ADD指令;高位字节:ADDC指令;
★均采用ADDC指令,但低位字节相加前,先对进位位清0—CLR C;
★数据存放在连续单元中,应采用寄存器间接寻址方式访问数据。
2017年11月12日
牡丹江师范学院计算机科学与技术系
4
两个无符号双字节数相加源程序
START:CLR C
MOV R0, #41H
MOV R1, #51H
AD1: MOV A, ***@R0
ADDC A, ***@R1 ;也可ADD
MOV ***@R0, A
DEC R0
DEC R1
MOV A, ***@R0
ADDC A, ***@R1
MOV ***@R0, A
RET
2017年11月12日
牡丹江师范学院计算机科学与技术系
5
简单程序设计
例4-2 将2个半字节数合并成1个1字节数。设内部RAM 40H、41H单元中分别存放8位二进制数。要求取出两个单元中的低半字节合并成一个字节后存入50H单元中。
分析:
★获得低半字节—ANL指令将其与#0FH相与;
★低半字节移到高半字节—SWAP A;
★两个半字节组合—ORL指令实现;
★连续存储单元中的数据操作—寄存器间址。
2017年11月12日
牡丹江师范学院计算机科学与技术系
6
2个半字节数合并成1个1字节数源程序
START: MOV R1, #40H
MOV A, ***@R1
ANL A, #0FH
SWAP A
INC R1
XCH A, ***@R1
ANL A, #0FH
ORL A, ***@R1
MOV 50H, A
RET
2017年11月12日
牡丹江师范学院计算机科学与技术系
7
分支程序设计
例4-3 比较两个无符号数的大小。设外部RAM单元ST1和ST2中有两个无符号二进制数,找出其中的大数存入外部RAM的ST3单元中。
分析:
★只给定单元符号地址—EQU定义符号地址;
★外部RAM单元—DPTR间址、MOVX指令;
★无符号数比较—减法指令SBBC、CLR C。
程序流程图如右:
2017年11月12日
牡丹江师范学院计算机科学与技术系
8
分支程序设计
ORG 8000H
ST1 EQU 2000H
ST2 EQU 2100H
ST3 EQU 2200H
START: MOV DPTR, #ST1
MOVX A, ***@DPTR
MOV R2, A
MOV DPTR, #ST2
MOVX A, ***@DPTR
CLR C
SUBB A, R2
JNC BIG1
XCH A, R2
BIG0: MOV DPTR, #ST3
MOVX ***@DPTR, A
RET
BIG1: MOVX A, ***@DPTR
SJMP BIG0
END
2017年11月12日
牡丹江师范学院计算机科学与技术系
9
分支程序设计
例4-4 按下面的公式编写程序。其中x为无符号数,存在20H单元,y存放在21h单元。
分析:
★只涉及一个操作数,可采用直接寻址方式访问;
★x和20、40比较,可采用比较不相等则转移指令进行。
2017年11月12日
牡丹江师范学院计算机科学与技术系
10
分支程序设计
ORG 0030H
MOV A, 20H
CJNE A, #20, LOOP1
LOOP1: JC NEXT1 ;x≤20时
CJNE A, #40H, LOOP2
LOOP2: JNC NEXT2