[信息与通信]单片机汇编语言5.ppt

上传人:sccc 文档编号:5615019 上传时间:2023-08-02 格式:PPT 页数:44 大小:472.50KB
返回 下载 相关 举报
[信息与通信]单片机汇编语言5.ppt_第1页
第1页 / 共44页
[信息与通信]单片机汇编语言5.ppt_第2页
第2页 / 共44页
[信息与通信]单片机汇编语言5.ppt_第3页
第3页 / 共44页
[信息与通信]单片机汇编语言5.ppt_第4页
第4页 / 共44页
[信息与通信]单片机汇编语言5.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《[信息与通信]单片机汇编语言5.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]单片机汇编语言5.ppt(44页珍藏版)》请在三一办公上搜索。

1、第四章 汇编语言程序设计知识,张文昭,教学要求,了解编程的步骤,熟识编程的方法和技巧;了解汇编语言程序的基本结构,学会画相应的程序流程框图;练习用汇编语言编写简单的程序;了解什么是源程序的汇编,了解伪指令及其功能,教学重点,汇编语言程序的基本结构及其相应结构的程序流程框图。练习用汇编语言设计简单的程序,4.1 编程的步骤、方法和技巧,一、编程步骤(一)分析问题(二)确定算法(三)画程序流程图(四)编写程序(五)上机调试,对需要解决的问题进行分析:解决问题的任务是什么?工作过程?现有的条件,已知数据,对运算的精度和速度方面的要求是什么?设计的硬件结构是否方便编程?,(一)分析问题,(二)确定算法

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

3、序行(一条语句)包括四个字段,汇编程序能识别它们。格式如下:标号:操作码 操作数;注释 1.标号 标号是用户定义的符号地址。标号的值是汇编这条指令时指令的地址。标号又以英文字母开始的18个字母或数字串组成,以冒号“:”结尾。标号可以由赋值伪指令赋值。如果标号没有赋值,汇编程序就把存放该指令目标码第一字节的存储单元的地址赋给该标号。,(四)编写程序,2.操作码 对于一条汇编指令,这个字段是必不可少的,它用一组字母符号表示指令的操作码。在8051中,它由8051的指令系统助记符组成。3.操作数 工作寄存器名 特殊功能寄存器名 标号名 常数$表示程序计数器的当前值。表达式 4.注释 注释部分不是汇编

4、语言的功能部分,只是用语言增强程序的可读性。,(五)上机调试,上机调试可以检验程序的正确性。有时编译通过了,调试可能不通过,调试的目的是为了进一步修改程序中的错误,或优化程序。,二、编程的方法和技巧,(一)模块化的程序设计方法 1.程序功能模块化的优点单个模块结构的程序功能单一,易于编写、调试和修改;便于分工多个程序员同时进行程序的编写和调试工作,加快软件研制进度;程序可读性好,便于功能扩充和版本升级;对程序的修改可局部进行,其他部分可以保持不变;对于使用频繁的子程序可以建立子程序库,便于多个模块调用。,2.划分模块的原则 模块的划分有很大的灵活性,但也不能随意划分。划分模块时应遵循一定原则:

5、每个模块应具有独立的功能,能产生一个明确的结果,这就是单模块的功能高内聚性。模块之间的控制耦合应尽量简单,数据耦合应尽量少,这就是模块间的低耦合性。模块长度适中。模块语句的长度通常在20条100条的范围较合适。,尽量采用循环结构和子程序。这样可以使程序的总容量大大减少,提高程序的效率,节省内存。尽量少用无条件转移指令。对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其它寄存器的内容应压入堆栈(返回前再弹出),即保护现场。由于中断请求是随机产生的,所以在中断处理程序中,除了保护处理程序中用到的寄存器外,还要保护标志寄存器。用累加器传递入口参数或返回参数比较方

6、便,在子程序中,一般不必把累加器内容压入堆栈。,(二)编程技巧,汇编语言程序具有4种结构形式,即顺序结构、分支结构、循环结构和子程序结构。,三、汇编语言程序的基本结构,这种程序中既无分支、循环,也不调用子程序,程序按顺序一条一条地执行指令。,(一)顺序程序,例1:将片内RAM 20H单元的内容拆成两段,每段四位。并将它们分别存入21H与22H单元中。,例1:拆字。将片内RAM 20H单元的内容拆成两段,每段四位。并将它们分别存入21H与22H单元中。,解:ORG 2000HMOVR0,#21H;21HR0MOVA,20H;(20H)AANLA,#0FH;A#0FHAMOVR0,A;(A)(R0

7、)INCR0;(R0)+1R0MOVA,20H;(20H)ASWAPA,;A03 A47ANLA,#0FH;A#0FHAMOVR0,A;(A)(R0)SJMP$,(二)分支程序,程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断,满足条件则进行程序转移,不满足条件就顺序执行程序。,例2:片内RAM ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入RES单元。,Y,N,Y,N,例2:片内RAM ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入RES单元。,解:ORG1000H ONE DATA 22H;定义ONE TWO DATA 23H;定义TWO R

8、ES DATA 30H;定义RESMOVA,ONESTART:CJNE A,TWO,BIGSJMP STOREBIG:JCSTOREMOVA,TWOSTORE:MOV RES,ASJMP$,对于多分支程序,首先把分支程序按序号排列,然后按照序号值进行转移,分支转移结构如下图所示。假如,n个按键,则转向n个键的功能处理程序。,例 4:128种分支转移程序。功能:根据入口条件转移到128个目的地址。入口:(R3)=转移目的地址的序号00H7FH。出口:转移到相应功能分支程序入口。JMP_128:MOV A,R3 RL A MOV DPTR,#JMPTAB JMP A+DPTR JMPTAB:AJM

9、P ROUT00 AJMP ROUT01 AJMP ROUT7F,在程序运行时,有时需要连续重复执行某段程序,可以使用循环程序。循环程序结构:置循环初值 循环体(循环工作部分)修改控制变量 循环控制部分,(三)循环程序,循环的组织方式,先处理,后判断,先判断,后处理,例3:数据块传送。将片内RAM 20H单元开始的10个字节,传送到片外RAM 1000H单元开始的单元中去。,N,Y,例3:数据块传送。将片内RAM 20H单元开始的10个字节,传送到片外RAM 1000H单元开始的单元中去。,解:程序如下:ORG0800H START:MOVR0,#20H MOVDPTR,#1000HMOVR7

10、,#0AHLOOP:MOVA,R0MOVXDPTR,AINCR0INCDPTRDJNZR7,LOOP SJMP$,软件延时程序的设计,查表注意到执行DJNZ指令要用两个机器周期 执行MOV Rn,#data要一个机器周期 执行MOV dir,#data要两个机器周期因此可以精确算出程序执行时间。,一般采用循环程序进行软件延时,用到循环转移指令“DJNZ Rn”,MOV R7,#0LOOP:DJNZ R7,LOOP完成上述循环需多少个机器周期?,例:利用DJNZ指令和NOP指令编写一循环程序,实现延时1ms(晶振频率为12MHz)。解:程序如下:DELAY:MOVR1,#10;1个机器周期 LO

11、OP:MOVR2,#48;1 DJNZR2,$;248 DJNZR1,LOOP;2 NOP;1 NOP;1 NOP;1 NOP;1 NOP;1 RET;2 总的延时时间为:1s1+(1+248+2)10+7=998s,若再加上调用本子程序的调用指令所用的时间2s共1000s,即1ms。,(1+248+2)10,解:机器周期为2us,10ms=5000*2us计算:5000=2*250*10DELAY:MOV R3,#10;1DELY1:MOV R4,#250;1DELY2:DJNZ R4,DELY2;250*2 DJNZ R3,DELY1;2 RET,(1+500+2)*10=5030,总延时

12、量:(1+5030+2)*2us=10066us=10.066ms 误 差:0.6%,例:编程延时10ms,(采用6MHz晶振),4.2 汇编语言源程序的编辑和汇编 一、源程序编辑 源程序编辑是在微型计算机上,借助编辑软件,编写汇编语言源程序。可供使用的编辑工具很多,如行编辑或屏幕编辑软件。例如,在文本区编写一个源程序如下:ORG 0030 MOVX DPTR,A MOV A,#41H END 编辑结束后,存盘退出。接下来是使用交叉汇编软件,对编辑完成的源程序进行汇编。如果源程序无误,机器会显示“0 Error(s)”。,汇编语言源程序必须转换为机器码表示的目标程序,计算机才能执行,这种转换过

13、程称为汇编。,二、源程序的汇编,手工汇编是指用助记符指令写出程序后,再通过手工方式查指令编码表,逐个把助记符指令“翻译”成机器码,然后将得到的机器码程序键入单片机,进行调试和运行。手工汇编不便之处:偏移量的计算、程序的修改。,1.手工汇编,机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。汇编工作由计算机自动完成,最后得到以机器码表示的目标程序。汇编完成后,再由计算机把生成的目标程序加载到用户样机上。,1.机器汇编,例如,前面编辑过的8051源程序,汇编完成后,如果没有错误则形成两个文件:一个为打印文件,格式为 地址 目标码 源文件 ORG 0030H 0030H F0 MOVX DPTR

14、,A 7441 MOV A,#41H END 另一个称为目标码文件,格式为 0030 0033 F07441 首地址 末地址 目标码,该目标文件由计算机通过串行通信下载到仿真器(或用户样机)运行。,在分析现成产品ROM/EPROM芯片中的程序时,要将二进制机器语言程序翻译成汇编语言程序,该过程称为反汇编。汇编和反汇编的过程如下图所示。,三、目标码的反汇编,四、伪指令,伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。89C51有8个伪指令:ORG、END、EQU、DATA、DB、DW、DS、BIT,ORG 汇编起始命令,格式:ORG 16位地址功能:

15、规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址。例如:ORG 2000HSTART:MOV A,#64H 规定了START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。,END 汇编结束指令,格式:END功能:通知汇编程序结束汇编。在END之后所有的汇编指令均不予以处理。,EQU 赋值命令,格式:字符名称 EQU 项(数或汇编符号)功能:把“项”赋给“字符名称”。注意:字符名称不等于标号(其后没有冒号);其中的项,可以是数,也可以是汇编符号。EQU赋值过的符号名可以用作数据、代码地址、位地址或一个立即数。可以是8位的,也可以是16位的。例1:AA E

16、QU R1 MOV A,AA;AA代表工作寄存器R1例2:DELY EQU 07EBH LCALL DELY;DELY作为一个16位子程序;的入口地址,DATA 数据地址赋值命令,格式:字符名称 DATA 表达式功能:与EQU类似,但有以下差别:(1)EQU定义的字符名必须先定义后使用,而DATA定义的字符名可以后定义先使用。(2)用EQU伪指令可以把一个汇编符号赋给一个名字,而DATA只能把数据赋给字符名。(3)DATA语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。DATA伪指令常在程序中用来定义数据地址。,DB 定义字节命令,格式:标号:DB 项或项表功能:能把它右边“项

17、或项表”中数据依次存放在以左边标号为始地址的存储单元中。项或项表可以是一个字节、用逗号隔开的字节串或括在单引号中的ASCII字符串。,例如:ORG 2000H DB 0A3H LIST: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码),DB 定义字节命令,DW 定义字命令,格式:标号:DW 16位数据项或项表功能:把DW后的16位数据项或项表从当前地址连续存放。每项数值为16位二进制数,高8位先放,低8位后存放。DW用于定义一个地址表。例如:ORG 1500HTABLE:DW 7234H,8AH,10H 经汇编后(1500H)=72H,(1501H)=34H,(1502H)=00H,(1503H)=8AH,(1504H)=00H,(1505H)=10H,,DS 定义存储空间命令,格式:DS 表达式功能:在汇编时,从指定地址开始保留DS之后表达式的值所规定的存储单元以备后用。例如:ORG 1000H DS 08H DB 30H,8AH 汇编后,从1000H保留8个单元,然后从1008H按DB命令给内存赋值,即(1008H)=30H,(1009H)=8AH,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号