《单片机原理及应用:第4章 汇编语言程序设计》由会员分享,可在线阅读,更多相关《单片机原理及应用:第4章 汇编语言程序设计(150页珍藏版)》请在金锄头文库上搜索。
1、单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院第四章第四章 汇编语言程序设计汇编语言程序设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院知识要点:知识要点:伪指令及其使用方法;伪指令及其使用方法;顺序结构、分支结构、循环结构程序设计方法;顺序结构、分支结构、循环结构程序设计方法;子程序、查表程序设计方法;子程序、查表程序设计方法;数据运算和处理的典型汇编语言实现方法。数据运算和处理的典型汇编语言实现方法。本章学习目标本章学习目标:能够读懂汇编程序,并能够编写较为复杂的汇编语言程序,能够读懂汇编程序,并能够编写较为复杂的汇编语言程序,懂得汇编程序
2、仿真软件的使用,懂得调试汇编程序。懂得汇编程序仿真软件的使用,懂得调试汇编程序。4. 汇编语言程序设计汇编语言程序设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.1 程序设计概述程序设计概述4.2 汇编语言伪指令汇编语言伪指令4.3 汇编语言程序结构与设计汇编语言程序结构与设计4. 汇编语言程序设计汇编语言程序设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院程序设计语言的种类程序设计语言的种类程序的编译和汇编程序的编译和汇编程序设计的基本过程程序设计的基本过程汇编语言的基本格式汇编语言的基本格式4.1 程序设计概述程序设计概述单片机原理与
3、应用单片机原理与应用 光学与电子信息学院光学与电子信息学院1、 程序设计语言的种类程序设计语言的种类高级语言高级语言:接近于人的常用语言形式,是一种面向过程:接近于人的常用语言形式,是一种面向过程 而而独立于机器独立于机器的通用语言的通用语言, , 如如C C 语言。语言。void main()char a = 21;char b = 48;char c;c = a + b;4.1 程序设计概述程序设计概述单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院汇编语言汇编语言:它是一种符号语言,是一种:它是一种符号语言,是一种面向机器面向机器的语言的语言。ORG 0000HMO
4、V A,15HADD A,30HMOV R0,ASJMP $END4.1 程序设计概述程序设计概述单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院机器语言机器语言:是用二进制:是用二进制0,1 表示指令和数据的最原始的程序设计语言。表示指令和数据的最原始的程序设计语言。RAW DATA: E5 15 25 30 F8 80 FEDisassembled DATA:0000E515MOV A,15H 00022530ADD A,30H 0004F8MOV R0,A 000580FESJMP $ 4.1 程序设计概述程序设计概述单片机原理与应用单片机原理与应用 光学与电子信息
5、学院光学与电子信息学院选择程序设计语言类型的原则是什么?选择程序设计语言类型的原则是什么?4.1 程序设计概述程序设计概述单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院2、 程序的编译、汇编和链接程序的编译、汇编和链接4.1 程序设计概述程序设计概述单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.1 程序设计概述程序设计概述单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院3 3 、 程序设计的基本过程程序设计的基本过程分析问题分析问题确定算法确定算法设计流程设计流程分配资源分配资源编写源程序编写源程序调试、修改调试、修改4
6、.1 程序设计概述程序设计概述单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4 、 汇编语言的基本格式汇编语言的基本格式例:例: 计算计算 21+48ORG 0200HSTART: MOV A, #21; A 21(1 Cycle)ADDA, #48 ; A A48(1 Cycle)MOV R1, A ; R1 A(1 Cycle)SJMP START ; 原地踏步原地踏步 (2Cycles)END标号:标号:操作码操作码第一操作数第一操作数,第二操作数第二操作数;注释注释4.1 程序设计概述程序设计概述其中,其中,Cycle:机器周期:机器周期单片机原理与应用单片机原
7、理与应用 光学与电子信息学院光学与电子信息学院标号的作用标号的作用: 为程序转移和子程序的调用提供转移目的地址。为程序转移和子程序的调用提供转移目的地址。标号的命名方法:标号的命名方法:1)由字母或数字组成)由字母或数字组成, 标号必须以字母开头。标号必须以字母开头。 2)不可使用关键字不可使用关键字,如助记符、寄存器名。,如助记符、寄存器名。 3)建议使用具有描述性的符号)建议使用具有描述性的符号,能够说明程序功能。能够说明程序功能。标号:标号:操作码操作码第一操作数第一操作数,第二操作数第二操作数;注释注释4.1 程序设计概述程序设计概述单片机原理与应用单片机原理与应用 光学与电子信息学院
8、光学与电子信息学院4.1 程序设计概述程序设计概述4.2 汇编语言伪指令汇编语言伪指令4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院伪指令的作用伪指令的作用伪指令详解伪指令详解伪指令的应用伪指令的应用 4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.2.1 伪指令的作用和使用方法伪指令的作用和使用方法伪指令的作用伪指令的作用 写在源文件中,用于控制汇编过程的命令。如设置写在源文件中,用于控制汇编过程的命令。如设置程序或数据存储区的地址、定义符号、判断程序是否
9、程序或数据存储区的地址、定义符号、判断程序是否结束等。结束等。 没有对应的机器码,它是不可执行的指令。没有对应的机器码,它是不可执行的指令。4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院伪指令种类:伪指令种类:ORG:指定语句行装载的起始地址,可以在同一文件中出现多次。:指定语句行装载的起始地址,可以在同一文件中出现多次。END:指示语句行到此结束,一般出现在程序行结束以前。指示语句行到此结束,一般出现在程序行结束以前。EQU:赋值指令,用于定义常数,或地址。赋值指令,用于定义常数,或地址。等同于等同于C中的中的define语句。语句
10、。DATA:定义字节地址。:定义字节地址。BIT:定义位符号地址。定义位符号地址。DB:定义字节数据。用于给代码空间的存储单元进行初始化、定义字节数据。用于给代码空间的存储单元进行初始化、赋值,或定义表格。赋值,或定义表格。DW:定义字数据,即两个字节。用于给代码空间的存储单元定义字数据,即两个字节。用于给代码空间的存储单元进行初始化、赋值,或定义表格。进行初始化、赋值,或定义表格。DS:预留若干个存储单元,等同于预留若干个存储单元,等同于C中的中的malloc函数。函数。4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院1、ORG (O
11、rigin) 汇编起始地址命令汇编起始地址命令 指定语句行装载的起始地址指定语句行装载的起始地址。 命令格式:命令格式:ORG add16 例如,例如, ORG 2000HSTART: MOV A, #40H 上例说明程序的起始地址是上例说明程序的起始地址是2000H,第一条指令就从,第一条指令就从2000H开始存放。开始存放。4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院在一个源程序中,在一个源程序中,可以多次使用可以多次使用ORG指令指令,以规定不同,以规定不同程序段的起始位置程序段的起始位置不允许有重叠不允许有重叠,即不同的程序
12、段之间不能有重叠。,即不同的程序段之间不能有重叠。 通常所规定的地址从小到大。通常所规定的地址从小到大。4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院2、END 汇编终止命令汇编终止命令 汇编语言源程序结束的伪指令,汇编语言源程序结束的伪指令,表示源程序结束。表示源程序结束。 在在END以后所写的指令,汇编程序都不予以处理,以后所写的指令,汇编程序都不予以处理,即不再翻译。即不再翻译。 一个源程序一个源程序只能有一个只能有一个END指令,放在程序的末尾。指令,放在程序的末尾。4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原
13、理与应用 光学与电子信息学院光学与电子信息学院3、EQU(Equate) 赋值指令。赋值指令。 将操作数段中的地址或数据赋值给标号。将操作数段中的地址或数据赋值给标号。 赋值后的标号,其值在整个程序中不改变,可多次使用。赋值后的标号,其值在整个程序中不改变,可多次使用。 命令格式:命令格式: 标号标号 EQU 数或汇编符号数或汇编符号 例如:例如: COUNTEQU16H ; COUNT = 16H ADDREQU3000H ; ADDR = 3000H MOV A,# COUNT ; A = 16H标号标号与与EQU之间不能用之间不能用“:”来作分隔符来作分隔符。4.2 汇编语言伪指令汇编语
14、言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4、DATA 数据地址赋值指令数据地址赋值指令 将将数据地址数据地址或或代码地址代码地址赋予所规定的标号。赋予所规定的标号。 命令格式为命令格式为: 字符名称字符名称 DATA 表达式表达式例如,例如,MN DATA 10H汇编后,汇编后,MN的值为的值为10H。 DATA指令在程序中常用来定义存放数据的单元字节地址。指令在程序中常用来定义存放数据的单元字节地址。4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院5、BIT 位地址符号命令位地址符号命令 将位地址
15、赋予所规定的字符名称,常用于定义位符号地址。将位地址赋予所规定的字符名称,常用于定义位符号地址。 命令格式为:命令格式为: 字符名称字符名称 BIT 位地址位地址 例如,例如, AA BIT P1.0 BB BIT P2.04.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院6、DB(Define Byte)定义字节命令)定义字节命令 定义字节数据。它的作用是从指定的地址单元开始,定义字节数据。它的作用是从指定的地址单元开始,定义数据或定义数据或ASCII码字符,常用于定义数据常数表。码字符,常用于定义数据常数表。 命令格式:命令格式: 标
16、号标号: DB 字节常数表字节常数表例如:例如: ORG 2000HTAB:DB 14H,26,A DB 0AFH,BC汇编结果:汇编结果:(2000H)14H (2001H)1AH(2002H)41H (2003H)= AFH(2004H)42H (2005H)43H2000H2000H14142001H2001H1A1A2002H2002H41412003H2003HAFAF2004H2004H42422005H2005H43434.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院7、DW(Define Word)定义字命令)定义字命令
17、 定义定义16位数据。从指定的地址单元开始,定义若干个字常数,位数据。从指定的地址单元开始,定义若干个字常数,常用于定义常用于定义地址表地址表。 命令格式为:命令格式为:标号标号: DW 字常数表字常数表 例如,例如, ORG 2000HTAB: DW 7423H,00ABH,20汇编结果:汇编结果: (2000H)74H (2001H)23H(2002H)00H (2003H) = ABH(2004H)00H (2005H)14H2000H2000H74742001H2001H23232002H2002H00002003H2003HABAB2004H2004H00002005H2005H14
18、14提示:提示:一个字占两个存储单元,其中高字节数存入低位地址,一个字占两个存储单元,其中高字节数存入低位地址,低字节数存入高位地址,即顺序存放。低字节数存入高位地址,即顺序存放。4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院8、DS(Define Store)定义存储区)定义存储区 定义存储区。从指定的地址开始,保留一定数量的内存单定义存储区。从指定的地址开始,保留一定数量的内存单元,以备程序使用,其区域的大小由指令的操作数确定。元,以备程序使用,其区域的大小由指令的操作数确定。 命令格式:命令格式: 标号:标号: DS 数值数值
19、例如:例如: ORG 1000HDS 5DB 23H汇编结果:从地址汇编结果:从地址1000H开始,保留开始,保留5个字节个字节的内存单元,而的内存单元,而(1005H)=23H1000H1000H- -1001H1001H- -1002H1002H- -1003H1003H- -1004H1004H- -1005H1005H23H23H4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院汇编语言伪指令应用实例汇编语言伪指令应用实例4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院OR
20、G的的应用:应用:4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院EQU、DATA的应用:的应用:4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院BIT的应用:的应用:4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院DB、DW的的应用:应用:4.2 汇编语言伪指令汇编语言伪指令单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院使用使用DB、DW定义字符时可以用单引号,也可以定义字符时可以用单引号,也可以
21、用双引号,其作用等同。用双引号,其作用等同。4.2 汇编语言伪指令汇编语言伪指令程序装载之后,程序空间显示结果:程序装载之后,程序空间显示结果:单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.1 程序设计概述程序设计概述4.2 汇编语言伪指令汇编语言伪指令4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计程序的基本结构程序的基本结构顺序顺序分支分支循环循环子程序子程序单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3.1
22、 顺序结构顺序结构例:编写程序实现两个例:编写程序实现两个 16bits 无符号数的加法。无符号数的加法。 (徐徐-例例 4.1) X+Y = 0x5678 + 0x9876 1、基本原理分析、基本原理分析 1)分两次完成,每次)分两次完成,每次完成完成 8位加法。位加法。2)采用间接寻址方式,)采用间接寻址方式,读取加数和被加数,读取加数和被加数,以及保存结果。以及保存结果。ADDC ADDC ADDADD4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院2、资源分配、资源分配 33H、32H:存放被加数,以及结果存放被
23、加数,以及结果 37H、36H:存放加数存放加数 22H.0 :存放和的最高位存放和的最高位 R0、R1: 数据指针数据指针 4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院3、流程图、流程图4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4、 源程序源程序4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计5、程序调试与测试、
24、程序调试与测试 调试方法:调试方法:单步、断点调试方法单步、断点调试方法 程序测试:程序测试:考虑有进位和没有进位两种情况。考虑有进位和没有进位两种情况。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院思考:思考: 1. 保存和的最高位还有哪些方法?保存和的最高位还有哪些方法? 2. 如何实现多字节数的减法?如何实现多字节数的减法? 3. 如何实现多字节如何实现多字节 BCD 码数的加法,码数的加法, 以及减法?以及减法? 4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院两个两个16位数加法(位数加
25、法(C51 实现)实现)4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院#include unsigned int data a = 0; /定义被加数变量定义被加数变量 unsigned int data b = 0; /定义加数变量定义加数变量 bit c; /定义进位位变量定义进位位变量 void main(void) a = 0x5678; /赋值被加数赋值被加数 b = 0xF876; /赋值加数赋值加数 a = a + b; c = CY; /保存进位位保存进位位 4.3 汇编语言程序结构与设计汇编语言程序结
26、构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计在源文件中如果需要对芯片的寄存器进行操作,就必须在源文件中如果需要对芯片的寄存器进行操作,就必须通过通过include引述引述头文件头文件reg52.h!单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计unsignedintdataa=0;/定义被加数变量定义被加数变量unsignedintdatab=0;/定义加数变量定义加数变量bitc;/定义位变量定义位变量a分配到分配到片上片上08H,
27、09H单元单元b分配到分配到片上片上0AH,0BH单元单元c分配到分配到20H.0Compiling.单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计a分配到分配到片外数据片外数据0000H,0001H单元单元b分配到分配到片外数据片外数据0002H,0003H单元单元unsignedintxdataa=0;/定义被加数变量定义被加数变量unsignedintxdatab=0; /定义加数变量定义加数变量单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与
28、设计存存储类型型 描述描述code程序存程序存储区区(64 KBytes),由操作,由操作码“MOVC A+DPTR”访问 data直接直接寻址内部数据存址内部数据存储区区idata间接接寻址内部数据存址内部数据存储区,可区,可访问全部内部地址空全部内部地址空间(256 Bytes)bdata可位可位寻址内部数据存址内部数据存储区区,支持位和字,支持位和字节混合混合访问。xdata外部数据存外部数据存储区区(64 KBytes),由操作,由操作码“MOVX DPTR”访问 pdata分分页(256 Bytes)外部数据存外部数据存储区,由操作区,由操作码“MOVX Ri访问 C51变量的存量的
29、存储类型型单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计存存储器模式器模式描述描述SMALL参数及局部参数及局部变量放入可直接量放入可直接寻址的址的内部存内部存储器器(最大最大128 B,默,默认存存储器器类型型为 data )COMPAT参数及局部参数及局部变量放入分量放入分页外部存外部存储区区(最大最大256 B,默,默认存存储器器类型型为 pdata ) LARGE参数及局部参数及局部变量直接放入外部数据量直接放入外部数据存存储器器(最大最大64 KB,默,默认存存储器器类型型为 xdata ) C51的存的存储
30、器模式器模式单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3.2 分支结构程序设计分支结构程序设计分支结构形式与转移指令分支结构形式与转移指令典型分支结构设计典型分支结构设计 二分支结构二分支结构 三分支结构三分支结构 散转结构散转结构4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3.2 分支结构程序设计分支结构程序设计分支结构形式分支结构形式if thenelse 4.3 汇编语言程序结构与设计汇编语言程序结构与设计switch ( )单片机原理与应用单片机原理与应用 光学与电子信息学
31、院光学与电子信息学院转移指令转移指令1. 无条件转移无条件转移 SJMP :短跳转,转移范围短跳转,转移范围128 B 127B AJMP :绝对跳转,转移范围绝对跳转,转移范围2KB LJMP :长跳转长跳转 ,转移范围,转移范围64KB JMP : 散转指令,实现多分支散转指令,实现多分支2. 条件转移条件转移JZ /JNZ ;测试;测试AJC/JNC;测试;测试Cy JB/JBC/JNB ;测试某一比特位;测试某一比特位CJNE ;比较两数的大小;可用于形成三分支结构;比较两数的大小;可用于形成三分支结构 DJNZ ;可用于循环结构;可用于循环结构4.3 汇编语言程序结构与设计汇编语言程
32、序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院1、二分支结构设计、二分支结构设计例:求取例:求取|x|(x 为为8bits 符号数)符号数)解:基本原理解:基本原理 当当x 255时,时, 需要执行需要执行 INC DPHNEXT:JMP A+DPTR ;散转;散转ENTRY: LJMP R_KEY0; 转移指令表转移指令表: 3 字节字节LJMP R_KEY1LJMP R_KEY2 LJMP R_KEY99LJMP指令与散转结构指令与散转结构993=297=129H单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结
33、构与设计汇编语言程序结构与设计;MAJMP.asmORG 0400HSTART: MOV DPTR, #ENTRY ;赋指令表入口地址;赋指令表入口地址MOV A, R3;计算偏移量;计算偏移量ADD A, R3JMP A+DPTR ;散转;散转ENTRY:AJMP R_KEY0; 转移指令表转移指令表: 2 字节字节AJMP R_KEY1AJMP R_KEY2R_KEY0: CLR P1.0SJMP STARTR_KEY1: SETB P1.0SJMP STARTR_KEY2: MOV P1, #0AAHSJMP STARTENDAJMP指令与散转结构指令与散转结构单片机原理与应用单片机原理
34、与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计4.3.3 循环结构循环结构基本知识基本知识 循环结构三要素循环结构三要素典型程序设计典型程序设计 延时程序延时程序 数据块求和、寻找最大数、均值滤波数据块求和、寻找最大数、均值滤波 4.3 汇编语言程序结构与设计汇编语言程序结构与设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计1、基本知识、基本知识应用背景:常常某一段代码需要执行多次。应用背景:常常某一段代码需要执行多次。常见常见C 语言形式语言形式1)for (i=0
35、; i10; i+) 4.3.3 循环结构循环结构单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计2)do while (I != 10) while (I != 10);3)for(;) if (x=q) break;单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计2、循环结构基本要素、循环结构基本要素 基本要素:循环变量,循环体,循环条件基本要素:循环变量,循环体,循环条件 典型汇编语言循环结构典型汇编语言循环结构单片机原理与应用单片机原理与应
36、用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计Mode1:已知循环次数:已知循环次数MOV R6, #8MOV R0, #30HLOOP: MOV R0, # 0INC R0DJNZ R6, LOOPSJMP $单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计Mode2:未知循环次数:未知循环次数TEST: JB P3.0, QUIT ; If P3.0 = 1, then quit!INC ASJMP TESTQUIT: SJMP $单片机原理与应用单片机原理与应用 光学与
37、电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计3、典型程序设计、典型程序设计 延时程序设计延时程序设计 数据块求和数据块求和 寻找最大数寻找最大数 均值滤波均值滤波单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计例:延时程序设计例:延时程序设计应用背景:应用背景:LED灯控制灯控制单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计START: MOV P1, #11111110B ;2 cycles MOV P1,
38、 #11111101B ;2 cycles SJMP START;2 cycles全速执行时能够观察到全速执行时能够观察到LED 闪烁现象吗?闪烁现象吗?信号频率信号频率1/6 = 167 kHz (12MHz的晶振的晶振)人眼对人眼对 频率高于频率高于24Hz 的信号已不敏感。的信号已不敏感。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计降低信号频率、改变占空比的方法:降低信号频率、改变占空比的方法:START:MOV P1, #11111110BNOPNOPMOV P1, #11111101BSJMP START若
39、间隔若间隔1s 需要插入多少个需要插入多少个NOP 指令?指令? NOP指令执行时间指令执行时间 1us (12MHz),需要插入),需要插入106个。个。所需程序存储空间为所需程序存储空间为 1M 字节。字节。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计试分析如下代码段的执行时间(晶振频率试分析如下代码段的执行时间(晶振频率8MHz)MOV R2, #255 ;1cycleLOOP2: NOP ;1cycleNOPNOPDJNZ R2, LOOP2 ; 2cycles循环体执行时间循环体执行时间(1112)2551
40、275cycles整体时间:整体时间:112751276cycles1.914ms1cycle12/8 = 1.5us若想延时若想延时20ms 怎么办?怎么办?单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计MOV R3, #10LOOP1:MOV R2, #255 ;1cycleLOOP2:NOP ; 1cycleNOPNOPDJNZ R2,LOOP2 ;2cyclesDJNZ R3,LOOP1 ;2cycles单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言
41、程序结构与设计如何精确计算代码的运行时间如何精确计算代码的运行时间?内循环体执行时间内循环体执行时间T 内内:52551275cycles外循环体执行时间外循环体执行时间T 外外:(:(1T 内内2)10(112752)1012780 cycles整体执行时间:整体执行时间:1T 外外12781cycles 19.172ms如何粗略估算运行时间?如何粗略估算运行时间? (1112)2551012750cycles19.125ms单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计思考:1. 若延时若延时1s,应如何修改程序?
42、,应如何修改程序?2. 若晶振频率改为若晶振频率改为6MHz, 则则R3 的初值为多少?的初值为多少?3. 如何形成多重循环?如何形成多重循环?单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计数据块的处理问题:数据块的处理问题:1,54,3,0,36,5,78,27,9,.求取累加和;求取累加和;或找出最大数、或最小数、或奇数、或偶数;或找出最大数、或最小数、或奇数、或偶数;或求取平均值;或求取平均值;或找出大于或找出大于X的所有数;的所有数;或找出某个特定数;或找出某个特定数;或由大到小排序。或由大到小排序。单片机原理
43、与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计例:数据块求和例:数据块求和 (胡胡-例例4.2.9 )应用领域:应用领域:内存测试内存测试通讯数据测试(校验和测试法)通讯数据测试(校验和测试法)基本原理:基本原理: 利用利用 ADD 实现数据累加,实现数据累加, 仅保留和的低仅保留和的低8位。位。资源分配:资源分配: R0:数据指针:数据指针 R1:循环计数器:循环计数器 A: 校验和(校验和(8位)位) 单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计
44、BLOCK DATA 11H ; 定义数据块首地址定义数据块首地址 RESULT DATA 10H ;定义结果单元地址定义结果单元地址 ORG 1000H MOV A #0 ;累加器累加器A清零清零 MOV R0, #BLOCK ;置地址指针置地址指针 MOV R1, #100 ;置循环次数置循环次数LOOP: ADD A, R0 INC R0 ;修改指针修改指针 DJNZ R1, LOOP MOV RESULT, A ;存放结果存放结果 SJMP $数据块求和源程序:数据块求和源程序:单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言
45、程序结构与设计例例 :寻找最大数:寻找最大数(胡(胡 例例4.2.10) 应用领域:应用领域: 消除噪声消除噪声 基本原理:基本原理: 利用利用SUBB和和JC指令判断大小关系。指令判断大小关系。 资源分配:资源分配:R1:数据指针:数据指针 R2:循环计数器:循环计数器 A: 存放存放 MAX 值值 单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计核心代码:核心代码:LOOP:CLRCSUBBA,R1JNCNEXT;Cy=0,A中数较大中数较大MOVA,R1SJMPNEXT1NEXT:ADDA,R1;恢复;恢复A的值的
46、值NEXT1:INCR1DJNZR2,LOOP单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计思考:思考:1.若寻找最小数,应如何修改程序若寻找最小数,应如何修改程序?2.比较两数的大小还可使用什么指令?有何特点比较两数的大小还可使用什么指令?有何特点?单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计比较转移指令比较转移指令CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNERi,#data,rel
47、CJNE指令不改变第一、第二操作数的内容。指令不改变第一、第二操作数的内容。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计例:例: 均值滤波均值滤波 (胡(胡 例例 4.2.12)应用领域:数字滤波应用领域:数字滤波基本原理:基本原理: y(X1+X2+X3+X8)8 利用利用RRC 指令实现双字节除指令实现双字节除8 资源分配:资源分配:R0、R1: 累加和,前者存放高位累加和,前者存放高位R2: 计数器计数器单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言
48、程序结构与设计任务要求:在一个采样周期内连续采样任务要求:在一个采样周期内连续采样8次,求采样值的平均值。次,求采样值的平均值。采样数据从采样数据从P1端口读入采样数据端口读入采样数据。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计1000100101001000100010010010001001R0R1CyCy01001000101001000CyRRCRRC如何实现双字节无符号数右移一次?如何实现双字节无符号数右移一次?单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构
49、与设计汇编语言程序结构与设计如何保证从如何保证从P1口正确输入采样值?口正确输入采样值?编程中不要忘记写编程中不要忘记写“读预备指令读预备指令”MOVP1,#0FFH;读预备指令读预备指令;保证;保证P1能够正确输入外部信息能够正确输入外部信息MOVA,P1;读入电压值读入电压值MOVA,P1;读引脚,;读引脚,执行过执行过程中会发出程中会发出readpin信号信号。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计均值滤波均值滤波源程序源程序单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇
50、编语言程序结构与设计汇编语言程序结构与设计4.3.4查表程序设计查表程序设计表格的用途表格的用途表格的定义方法表格的定义方法表格的结构和表项地址求取方法表格的结构和表项地址求取方法查表指令查表指令查表程序典型应用查表程序典型应用应用应用1:已知十六进制数,求取其:已知十六进制数,求取其ASCII应用应用2:利用散转地址表,实现多分支:利用散转地址表,实现多分支应用应用3:利用顺序查表法,寻找关键字符:利用顺序查表法,寻找关键字符单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计4.3.4查表程序设计查表程序设计表格表格是计
51、算机的一种基本数据结构。是计算机的一种基本数据结构。查表法查表法是一种非数值计算方法,不需复杂计算。是一种非数值计算方法,不需复杂计算。主要优点主要优点:可以大大简化程序,提高程序执行速度。:可以大大简化程序,提高程序执行速度。主要缺点主要缺点:如果表格过大,会占用较多的存储单元。:如果表格过大,会占用较多的存储单元。常用查表方法常用查表方法:计算查表法、顺序查表法、对分查表法。:计算查表法、顺序查表法、对分查表法。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计1、表格的用途、表格的用途例:求例:求sin(x)=?si
52、n(x)=x-x3/3!+x5/5!-+(-1)nx2n+1/(2n+1)!+求函数值、传感器非线性校正、码制转换、求函数值、传感器非线性校正、码制转换、LED 字模转换字模转换2、表格的定义方法、表格的定义方法表格使用表格使用DB、DW 伪指令定义,存放于代码段中。伪指令定义,存放于代码段中。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计3、表格的结构和表项地址求取方法、表格的结构和表项地址求取方法表项首地址表首地址表项序号表项首地址表首地址表项序号表项大小表项大小表项序号:表项序号:0,1,2,3表项大小:表项大小
53、:8单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计4、查表指令查表指令MOVC A, A + DPTR ;对应于;对应于DPTR 查表方式查表方式MOVC A, A + PC ;对应于;对应于PC 查表方式查表方式5、查表程序典型应用、查表程序典型应用 应用应用1:已知十六进制数,求取其:已知十六进制数,求取其ASCII 应用应用2:利用散转地址表,实现多分支:利用散转地址表,实现多分支 应用应用3:利用顺序查表法,寻找关键字符:利用顺序查表法,寻找关键字符单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子
54、信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计例:利用查表法求取字符例:利用查表法求取字符0F 的的ASCII 码码 (lkup1.asm)基本原理:基本原理: 利用利用 DB 语句定义字符的语句定义字符的 ASCII 码表;码表; 利用利用 MOVC 指令读取程序空间中的表格内容。指令读取程序空间中的表格内容。 采用采用 DPTR 方式查表时,方式查表时,DPTR的初始值为表格首地址。的初始值为表格首地址。 采用采用 PC 方式查表时,需要计算方式查表时,需要计算PC与表格首地址间的偏移量。与表格首地址间的偏移量。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信
55、息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计寻找寻找ASCII单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计指令长度估算方法:指令长度估算方法: 指令基本长度为指令基本长度为1 字节;字节; 逢立即数(逢立即数(8bits)长度加)长度加1; 逢立即数(逢立即数(16bits)长度加)长度加2; 逢直接寻址方式,指令长度加逢直接寻址方式,指令长度加1。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计两种查表方式特点比较两种查表方式特
56、点比较单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计例例:利用散转地址表实现多分支:利用散转地址表实现多分支 基本原理:基本原理:利用利用DW伪指令将程序入口地址定义在程序空间中;伪指令将程序入口地址定义在程序空间中;利用利用MOVC分两次读取分两次读取16位散转地址;位散转地址;利用利用JMP指令实现散转。指令实现散转。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计例例:利用散转地址表实现多分支:利用散转地址表实现多分支 解解:利用:利用DW
57、伪指令将程序入口地址定义在程序空间中。伪指令将程序入口地址定义在程序空间中。散转地址散转地址散转地址存放散转地址存放的单元地址的单元地址单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计源程序源程序:利用散利用散转地址转地址表实现表实现多分支多分支MDWJMP.asm 单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计例:利用顺序查表,在无序表中查找关键字。例:利用顺序查表,在无序表中查找关键字。任务要求:任务要求: 有一个长度为有一个长度为100字节
58、的表格,其中数据无序存放,在其中找字节的表格,其中数据无序存放,在其中找出出KEY,并记录其在表中的地址号。若表中无此关键字,则返回,并记录其在表中的地址号。若表中无此关键字,则返回0。基本原理:顺序读取表中内容,将其与基本原理:顺序读取表中内容,将其与KEY比较,判断是否相同。比较,判断是否相同。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计采用采用DPTR查表方式,其步骤:查表方式,其步骤:1)表的起始地址送入)表的起始地址送入DPTR;2)表格的长度放在某一个寄存器中)表格的长度放在某一个寄存器中;3)要查找的关
59、键字放在某一内存单元中)要查找的关键字放在某一内存单元中;4)用)用MOVC A, A+DPTR指令取数指令取数;5)用)用CJNE A,direct,rel 指令判断是否是要找指令判断是否是要找的关键字。的关键字。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计 流程图流程图单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计无序表无序表中搜索中搜索关键字关键字单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序
60、结构与设计汇编语言程序结构与设计调试结果:调试结果:当(当(KEY)=08H,即希望查找数据即希望查找数据8程序运行后有:程序运行后有:单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计思考:1)如果不知道表的长度,但知道表格的结束标志是如果不知道表的长度,但知道表格的结束标志是 $, 应该应该如何修改程序?如何修改程序?2)表格)表格能放在能放在上电入口上电入口0000H的地方吗?的地方吗? 为什么?为什么? 会有什么严重后果?会有什么严重后果? ORG 0000H DB ! , 3, 4, 8, 10, 4,. 单片机
61、原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计2)表格)表格能放在能放在上电入口上电入口0000H的地方吗的地方吗? ORG0000HDB!,3,4,8,10,4,.不能!不能!程序汇编和装载以后,程序空间结果如下:程序汇编和装载以后,程序空间结果如下:反汇编结果:反汇编结果:表格数据被解表格数据被解析为指令,导致结析为指令,导致结果不可预见。果不可预见。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计4.3.5 子程序设计子程序设计子程序的作用子程序
62、的作用调用和返回指令调用和返回指令子程序的定义和调用方法子程序的定义和调用方法参数传递方法参数传递方法典型应用典型应用:多字节加法:多字节加法现场与现场保护方法现场与现场保护方法堆栈冲突及其规避堆栈冲突及其规避单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计子程序的作用子程序的作用:提高程序的模块性,压缩代码长度。:提高程序的模块性,压缩代码长度。4.3.5 子程序设计子程序设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计子程序设计要素:子程序
63、设计要素:1)子程序需命名。子程序的第一条指令应加标号,)子程序需命名。子程序的第一条指令应加标号, 以便调用。以便调用。2)要正确传送参数。)要正确传送参数。3)注意保护和恢复现场。)注意保护和恢复现场。4)子程序的末尾必须是)子程序的末尾必须是RET指令。指令。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计1、调用和返回指令、调用和返回指令调用指令:调用指令:LCALL,ACALL返回指令:返回指令:RET ,RETI(用于中断返回)(用于中断返回)ACALL : 绝对调用绝对调用LCALL: 长调用长调用 RET
64、: 子程序返回子程序返回单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计LCALLaddr16;PCPC+3,;SPSP+1,(SP)PC70;SPSP+1,(SP)PC158;PCaddr16单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计RET ;PC158(SP),SPSP-1;PC70(SP),SPSP-1 子程序返回指令。子程序返回指令。功能:将堆栈内的返回地址送入功能:将堆栈内的返回地址送入PC, 使使CPU返回到原断点地址处,继续执行
65、原程序。返回到原断点地址处,继续执行原程序。 单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计2、子程定义和调用方法、子程定义和调用方法ORG 0030HSTART: MOV SP, # 40HAGAIN: SETB P1.0LCALL DELAYCLR P1.0LCALL DELAYSJMP AGAIN;-DELAY: MOV R6, # 40DLOOP: NOPDJNZ R6, DLOOPRETEND单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与
66、设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计LCALL指令执行后:指令执行后:返回地址返回地址0038H存入堆栈,存入堆栈,SP指针向上移动两个单元指针向上移动两个单元380041H42Hxx40HSP单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计准备执行准备执行LCALL指令指令.SP0x40SP-max0x40单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计PC
67、转移到子程序转移到子程序DELAY的入口的入口SP0x42SP-max0x42单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计PC返回主程序返回主程序SP0x40SP-max0x42单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计片上片上RAM空间空间信息信息0x40:0000000000 片上片上RAM空间空间信息信息0x40:0038000000 单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设
68、计汇编语言程序结构与设计3、参数传递方法、参数传递方法入口参数:入口参数:子程序执行中所必须的子程序执行中所必须的寄存器值寄存器值或或存储单元内容存储单元内容(或地址)(或地址) 。出口参数:出口参数:子程序执行完毕后,结果存放的子程序执行完毕后,结果存放的寄存器或存储单寄存器或存储单元元(或地址)。(或地址)。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计MOV A, #4LCALL SQRSQR: MOV B, AMUL ABRET入口参数入口参数: A出口参数出口参数: A, B单片机原理与应用单片机原理与应用
69、光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计入口参数、出口参数传递方法入口参数、出口参数传递方法:1. 利用利用A2. 利用寄存器,或存储单元利用寄存器,或存储单元3. 利用堆栈利用堆栈MOV R6,40HLCALL DELAY;-DELAY: NOPDLOOP: NOP DJNZ R6, DLOOP RET单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计例:两个例:两个3字节数加法字节数加法入口参数:入口参数:R0,R1出口参数:出口参数:R020H21H22H30H31H3
70、2H20H21H22H+23HR0R1单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计多字节加法多字节加法单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计思考:程序执行后,思考:程序执行后,R0指向哪个单元?指向哪个单元?20H21H22H30H31H32H20H21H22H+23HR0R1R0单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计 4、现场保护、现场保护何谓何谓“
71、现场现场”?如何保护?如何保护?ORG 0100HMOV R0, #30HMOV R2, #0AHCLR ALOOP: MOV R0, AINC R0ACALL DELAYDJNZ R2, LOOP DELAY:MOVR2,#20LOOP1:NOPDJNZR2,LOOP1RET单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计保护现场的方法:保护现场的方法:1)选用其它寄存器)选用其它寄存器2)选用其它组寄存器)选用其它组寄存器 ; 选用选用2组工作寄存器组工作寄存器SETB RS1 ; RS1 = 1CLR RS0 ;
72、RS0 = 03)利用堆栈保护重要寄存器内容,如)利用堆栈保护重要寄存器内容,如A,PSW PUSH ACCPUSH PSWPOP PSWPOP ACC单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计5、堆栈溢出和堆栈冲突、堆栈溢出和堆栈冲突堆栈溢出、冲突:栈顶位置超出了合理范围。堆栈溢出、冲突:栈顶位置超出了合理范围。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院4.3 汇编语言程序结构与设计汇编语言程序结构与设计会使会使 SP 指针向上移动的操作和事件:指针向上移动的操作和事件: PUSH 指
73、令运行后指令运行后 SP 指针加指针加1 LCALL、ACALL 指令运行后指令运行后SP指针加指针加2MOV SP, #data ;SP移动情况由移动情况由#data决定决定中断事件中断事件 单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计利用利用RET指令实现散转指令实现散转单字节单字节BCD转换为十六进制数转换为十六进制数十六进制数转换为十六进制数转换为ASCII多字节无符号数减法多字节无符号数减法字符串交换字符串交换单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:
74、汇编语言程序设计例:利用例:利用RET指令和散转地址表实现程序散转。指令和散转地址表实现程序散转。徐徐-例例4.5解:基本原理:利用解:基本原理:利用DW定义散转地址表定义散转地址表其中,其中,(010FH)=01H(0110H)=15H0115H是转移入口地址是转移入口地址单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院基本原理:基本原理:利用利用MOVC指令,分两次读取转移入口地址指令,分两次读取转移入口地址0115H;利用利用PUSH指令将转移地址存入堆栈,分两次完成,指令将转移地址存入堆栈,分两次完成,首先压入转移地址低首先压入转移地址低8位;位;利用利用RET指
75、令,将转移入口地址传送给指令,将转移入口地址传送给PC。习题课:汇编语言程序设计习题课:汇编语言程序设计0115010FH0110H程序空间程序空间011509H08H片上片上RAM(堆栈)(堆栈)SPPC=0115H单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计资源分配:资源分配:R2:存放支路号:存放支路号R3:存放查表偏移量:存放查表偏移量徐徐-例例4.5单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计例:单字节例:单字节BCD码转换为十六进制数。
76、码转换为十六进制数。徐徐-例例4.10解:基本原理解:基本原理已知已知BCD码码mnH,则其值为,则其值为m*10+n举例,举例,BCD码码98H,其值为,其值为98=62H单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计例:将单字节十六进制数转换为两字节例:将单字节十六进制数转换为两字节ASCII。解:已知解:已知0-9的的ASCII为为30H39HA-F的的ASCII为为41H-46H举例:举例:4AH3
77、4H,41H基本原理:基本原理:X=0AHX=X+37H单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计例:多字节减法。例:多字节减法。徐徐-例例4.11实现两个多字节无符号数相减。当差小于实现两个多字节无符号数相减。当差小于0时,差时,差取绝对值。取绝对值。解:基本原理解:基本原理SUBB指令实现指令实现8位减法;位减法;DJNZ指令实现循环;指令实现循环;当当X小于小于0时,计算时,计算0-X,得到其绝对值。,得到其绝对值。单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题
78、课:汇编语言程序设计0002 31H30H000334H33H0002H-0003H=-0001H-0001H补补=FFFFHFFFFR0R1单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计徐徐-例例4.11单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计例:字符串交换。例:字符串交换。徐徐-例例4.6已知字符串的最大长度为已知字符串的最大长度为32字节,分别存放在片上和片外字节,分别存放在片上和片外的数据区中。的数据区中。编写程序,实现字符串交换,遇到编
79、写程序,实现字符串交换,遇到$字符结束。字符结束。解:解:1)利用利用SUBB判断是否是判断是否是$字符;字符;CLRCSUBBA,#24H;$=24HJZ2)DJNZ指令实现循环指令实现循环单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院习题课:汇编语言程序设计习题课:汇编语言程序设计xxxxxxxxxxxxxx30H50Hxx提示提示:30H-4FH用于存放字符串用于存放字符串堆栈位置应高于堆栈位置应高于4FH单片机原理与应用单片机原理与应用 光学与电
80、子信息学院光学与电子信息学院汇编语言程序设计总结汇编语言程序设计总结1. 伪指令的功能及其使用伪指令的功能及其使用 “END” 与与“ SJMP $ ” 能够互换吗?能够互换吗?2. 基本程序结构及其实现方式基本程序结构及其实现方式 二支结构、三分支、散转结构二支结构、三分支、散转结构 循环结构,多重循环循环结构,多重循环 查表程序:查表程序:A+DPTR, A+PC 子程序结构子程序结构单片机原理与应用单片机原理与应用 光学与电子信息学院光学与电子信息学院3. 程序设计规范、调试方法与错误定位程序设计规范、调试方法与错误定位 设计思路,流程图设计思路,流程图 断点、单步调试法断点、单步调试法 4. 典型应用问题的编程典型应用问题的编程 1)多字节数的加法,减法(含符号数,无符号数)多字节数的加法,减法(含符号数,无符号数) 多字节的多字节的 BCD 码加法码加法 2)多字节数求绝对值,求补码)多字节数求绝对值,求补码 3)多字节数循环右移、左移。)多字节数循环右移、左移。 4)HEX 数与数与 ASCII 数之间的转换数之间的转换 5)BCD 码与码与 HEX 数之间的转换数之间的转换 汇编语言程序设计总结汇编语言程序设计总结