单片机汇编语言程序设计知识课件.ppt

上传人:牧羊曲112 文档编号:3808542 上传时间:2023-03-22 格式:PPT 页数:56 大小:1.12MB
返回 下载 相关 举报
单片机汇编语言程序设计知识课件.ppt_第1页
第1页 / 共56页
单片机汇编语言程序设计知识课件.ppt_第2页
第2页 / 共56页
单片机汇编语言程序设计知识课件.ppt_第3页
第3页 / 共56页
单片机汇编语言程序设计知识课件.ppt_第4页
第4页 / 共56页
单片机汇编语言程序设计知识课件.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《单片机汇编语言程序设计知识课件.ppt》由会员分享,可在线阅读,更多相关《单片机汇编语言程序设计知识课件.ppt(56页珍藏版)》请在三一办公上搜索。

1、第四章 汇编语言程序设计,4.1.1汇编语言的构成,用MCS-51汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段:标号:操作码操作数;注释 每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格“”、冒号“:”、逗号“,”、分号“;”等。例:LOOP:MOV A,#00H;立即数00HA,标号,标号是用户定义的符号地址。一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。标号由以英文字母开始的18个字母或数字组成,以冒号“:”结尾。标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存放该指令目标码第一字节的存储单元的地址赋给该标号

2、,所以,标号又叫指令标号。,操作码,操作码是必不可少的。它用一组字母符号表示指令的操作码。在MCS-51中,由MCS-51的指令助记符组成。,操作数,汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没有。若有两个操作数,操作数之间用逗号“,”分开。操作数包括的内容有:(1)工作寄存器:由PSW.3和PSW.4规定的当前工作寄存器区中的R0R7。(2)特殊功能寄存器:21个SFR的名字。(3)标号名:赋值标号由汇编指令EQU等赋值的标号;指令标号指令标号指示的指令的第一字节地址是该标号的值。(4)常数:可用二进制(B)、十进制、十六进制(H),若常数以字符开头,前面加0。(5)$:用

3、来表示程序计数器的当前值。(6)表达式:汇编时,计算出表达式的值填入目标码。,注释,注释部分不是汇编语言的功能部分,只是用语增加程序的可读性。良好的注释是汇编语言程序编写中的重要组成部分。,伪指令,伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。,ORG 汇编起始命令,格式:ORG 16位地址功能:规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址。例如:ORG 2000HSTART:MOV A,#64H 规定了START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。,EQU 赋值命令,格式:字符名称 EQU

4、 项(数或汇编符号)功能:把“项”赋给“字符名称”。注意:字符名称不等于标号(其后没有冒号);其中的项,可以是数,也可以是汇编符号。EQU赋值过的符号名可以用作数据、代码地址、位地址或一个立即数。可以是8位的,也可以是16位的。,EQU 赋值命令,例1:AA EQU R1 MOV A,AA;AA代表工作寄存器R1例2:A10 EQU 10DELY EQU 07EBH MOV A,A10;A10作为片内的一个直接地址 LCALL DELY;DELY作为一个16位子程序的入口地址,DB 定义字节命令,格式:DB(项或项表)功能:通知汇编程序从当前ROM地址开始,保留一个字或字节串的存储单元,并存入

5、DB后的数据。注意:项或项表可以是一个字节,用逗号隔开的字节串或括在单引号中的ASCII字符串。例如:,DB 定义字节命令,ORG 2000H DB 0A3HLIST:DB 26H,03H STR:DB ABC 经汇编后(2000H)=A3H,(2001H)=26H,(2002H)=03H,(2003H)=41H,(2004H)=42H,(2005H)=43H,(41H,42H,43H分别为A,B,C的ASCII码),DW 定义字命令,格式:DW 16位数据项或项表功能:把DW后的16位数据项或项表从当前地址连续存放。每项数值为16位二进制数,高8位先放,低8位后存放。DW用于定义一个地址表。

6、例如:,DW 定义字命令,ORG 1500HTABLE:DW 7234H,8AH,10H 经汇编后(1500H)=72H,(1501H)=34H,(1502H)=00H,(1503H)=8AH,(1504H)=00H,(1505H)=10H,,DS 定义存储空间命令,格式:DS 表达式功能:在汇编时,从指定地址开始保留DS之后表达式的值所规定的存储单元以备后用。例如:ORG 1000HDS 08HDB 30H,8AH汇编后,从1000H保留8个单元,然后从1008H按DB命令给内存赋值,即(1008H)=30H(1009H)=8AH,BIT 位地址符号命令,格式:字符名 BIT 位地址功能:把

7、BIT后的位地址值赋给字符名。其中字符名不是标号,其后没有冒号,但字符名是必须的。例如:A1 BIT P1.0A2 BIT 02H汇编后,P1口第0位的位地址90H就赋给了A1,而A2的值则为02H。,DATA 数据地址赋值命令,格式:字符名称 DATA 表达式功能:与EQU类似,但有以下差别:1、EQU定义的字符名必须先定义后使用,而DATA定义的字符名可以后定义先使用。2、用EQU伪指令可以把一个汇编符号赋给一个名字,而DATA只能把数据赋给字符名。3、DATA语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。,END 汇编结束指令,格式:END功能:通知汇编程序结束汇编。在

8、END之后所有的汇编指令均不予以处理。,4.2 汇编语言源程序的编辑和汇编,4.2.1 源程序编辑,在微型计算机上,借助编辑软件,编写或修改汇编语言源程序。如行编辑或屏幕编辑软件。,4.2.2 源程序的汇编,汇编:将汇编语言源程序转换为机器码表示的目标程序的过程。对单片机有:一、手工汇编 二、机器汇编 三、反汇编,一、手工汇编,通过手工方式查指令编码表,逐个把助记符指令“翻译”成机器码,然后把得到的机器码程序键入单片机,进行调试和运行。手工汇编的缺点:1、偏移量的计算容易出错 2、程序的修改会引起后面指令地址的变化,转移指令的偏移量也要重新计算。,二、机器汇编,机器汇编是在计算机上使用交叉汇编

9、程序进行源程序的汇编。汇编工作由机器自动完成,最后得到以机器码表示的目标程序。,三、反汇编,将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。汇编和反汇编的过程如图4-3所示。,源程序(汇编语言),目标码(机器语言),汇编(汇编程序),反汇编(汇编程序),图4-3 汇编和反汇编过程,4.3 编程的步骤、方法和技巧,4.3.1 编程的步骤,一、分析问题二、确定算法三、画程序流程图四、编写程序,一、分析问题,对需要解决的问题进行分析,以求对问题由正确的理解。解决问题的任务是什么?工作过程?现有的条件,已知数据,对运算的精度和速度方面的要求?设计的硬件结构是否方便编程?,二、确定算法,算法是如何

10、将实际问题转化成程序模块来处理。在编程以前,先要对几种不同的算法进行分析、比较,找出最适宜的算法,三、画程序流程图,程序流程图是使用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。流程图步骤分得越细致,编写程序是也越方便。画流程图是程序结构设计是采用的一种重要手段。一个系统软件有总的流程图(主程序框图)和局部的流程图。流程图常采用的图形和符号。,椭圆框,或桶形框,:表示程序的开始或结束。,矩形框,:表示要进行的工作。,菱形框,:表示要判断的事情,菱形框内的表达式表示要判断的内容。,圆圈,:表示连接点,指向线,:表示程序的流向,4.4 汇编语言程序的基本结构,一、顺序程序二、分支程

11、序三、循环程序,一、顺序程序,顺序程序是最简单的程序结构,即顺序结构。程序按顺序一条一条地执行指令。,例:请编写能把20H单元内两个BCD数变成相应的ASCII码并放在20H(高位)和21H(低位),分析:根据ACSII字符表,09的BCD数和ASCII码相差30H。所以,只要将20H中两个BCD数拆开,分别加30H,程序如下:ORG 1000HMOV R0,#22HMOV R0,#00HMOV A,20HXCHD A,R0ORL 22H,#30HSWAP AORL A,#30HMOV 21H,ASJMP$END,例2:16位数求补。设16位二进制数在R1R0中,求补结果存于R3R2中。,Ba

12、ck,二、分支程序,程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件就顺序执行程序。分支程序又分为单分支和多分支结构。多分支程序是首先把分支程序按序号排列,然后按序号值进行转移。,在MCS-51指令系统中,通过条件判断实现单分支程序转移的指令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态作为条件进行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用这些指令可以完成0、1、正、负,以及相等、不相等作为各种条件判断依据的程序转移。,例:片内RAM ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入30H单元。,Ba

13、ck,三、循环程序,在程序运行时,有时需要连续重复执行某段程序,可以使用循环程序。其结构包括四部分:1、置循环初值 2、循环体(循环工作部分)3、修改控制变量 4、循环控制部分其组织方式如图4-2所示。,1、置循环初值,对于循环程序中所使用的工作单元,在循环开始时应置初值。例如,工作寄存器设置计数初值,累加器A清0,以及设置地址指针、长度等。,2、循环体(循环工作部分),重复执行的程序段部分,分为循环工作部分和循环控制部分。循环控制部分每循环一次,检查结束条件,当满足条件时,就停止循环,往下继续执行其他程序,3、修改控制变量,在循环程序中,不许给出循环结束条件。常见的是计数循环,当循环了一定的

14、次数后,就停止循环。在单片机中,一般用一个工作寄存器Rn作为计数器,对该计数器赋初值作为循环次数。每循环一次,计数器的值减1,即修改循环控制变量,当计数器的置件为0时,就停止循环。,4、循环控制部分,根据循环结束条件,判断是否结束循环。MCS-51可采用DJNZ指令来自动修改控制变量并能结束循环。,置初值,循环体,循环修改,循环控制,退出循环,未完,完,(a),置初值,循环体,循环修改,循环控制,退出循环,未完,完,(b),图4-2 循环组织方式流程图,Back,例1:统计字串长度。内存从STRING开始有一字串,该字串以$结束,试统计该字串长度,结果存于NUM单元中。,例:已知内部RAM的B

15、LOCK单元开始有一无符号数据块,块长在LEN单元。请编写求数据块中各数累加和并存人SUM单元的程序。,ORG 0200H LEN DATA 20H SUM DATA 21H BLOCK DATA 22H CLR A MOV R2,LEN;块长送R2 MOV R1,#BLOCK;块起始地址送R1 INC R2;R2一块长+1 SJMP CHECK LOOP:ADD A,R1;A-A+(R1)INC R1;修改数据块指针R1 CHECK:DJNZ R2,LOOP;若未完则转LOOP MOV SUM,A;存累加和 SJMP$END,方法B由同学们课后自己处理。,查表程序,Back,许多情况下,本来

16、通过计算才能解决的问题,可以用查表来解决,并且简便得多。因此,在实际单片机程序中,经常会编写查表程序以缩减程序的长度,提高执行效率。,MOVC A,A+DPTRMOVC A,A+PC,例:用查表法编一子程序,将40H单元中的BCD码转换成ASCII码。,Back,ORG 2000HTAB:DB 30H 31H 32H 33H 34H 35H 36H 37H 38H 39Hstart:MOV A,40H MOV DPTR,#TAB MOVC A,A+DPTR MOV 40H,A end,子程序设计,Back,所谓子程序是指完成确定任务并能为其他程序反复调用的程序段。调用子程序的程序叫做主程序或称

17、调用程序。例如代码转换、通用算术、函数计算、延时等等都可以编成子程序。,在编写子程序时应注意以下同题:(1)子程序的第一条指令地址称为子程序的起始地址或入口地址。该指令前必须有标号,标号应以子程序任务定名。(2)主程序调用子程序是通过安排在主程序中的调用指令实现的。子程序返回主程序必须执行子程序末尾的返回指令。(3)主程序调用于程序以及从子程序返回主程序后,计算机能自动保护并恢复主程序的断点地址。(4)为使所编子程序可以放在64KB内存的任何子域并能被主程序调用子程序内部必须使用相对转移指令(5)子程序参数可以分为人口和出口两类参散:人口参数是指于程序需要的原始参数。由调用它的主程序通过约定的

18、工作寄存器R0R7带殊功能寄存器SFR、内存单元或堆栈等预先传送给子程序使用;出口参数是由于程序根据入口参数执行程序后获得的结果参数,应由子程序通过约定的R0R7、SFR、内存单元或堆栈等传递给主程序使用。,Back,传送子程序参数的方法通常有以下4种:1、利用寄存器或片内RAM传送子程序参数2、利用寄存器传送子程序的参数3、利用堆栈传递子程序参数4、利用位地址传递子程序参数,例1:用查表法编一子程序,将40H单元中的BCD码转换成ASCII码。入口:待转换数在(40H)出口:转换后的数(40H),Back,ORG 2000HTAB:DB 30H 31H 32H 33H 34H 35H 36H 37H 38H 39Hsub1:MOV A,40H MOV DPTR,#TAB MOVC A,A+DPTR MOV 40H,A ret,若将30H单元BCD码转换成ASCII码,利用SUB1子程序。,Back,运算类程序设计举例,例:片内RAM30H单元开始有10个字节的二进制数。编一子程序,求它们的和。(和256)将和存入20H单元中。,Back,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号