资源预览内容
第1页 / 共49页
第2页 / 共49页
第3页 / 共49页
第4页 / 共49页
第5页 / 共49页
第6页 / 共49页
第7页 / 共49页
第8页 / 共49页
第9页 / 共49页
第10页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2020/10/21,1,第4章 汇编语言程序设计及知识,4.1 汇编语言源程序的编辑和汇编 4.2 编程的步骤、方法和技巧,2020/10/21,2,4.1 汇编语言源程序的编辑和汇编,4.1.1 源程序编辑 4.1.2 源程序的汇编 4.1.3 伪指令,2020/10/21,3,4.1.1 源程序编辑,在微型计算机上,借助编辑软件,编写或修改汇编语言源程序。如行编辑或屏幕编辑软件。,2020/10/21,4,4.1.2 源程序的汇编,汇编:将汇编语言源程序转换为机器码表示的目标程序的过程。对单片机有: 一、手工汇编 二、机器汇编 三、反汇编,2020/10/21,5,一、手工汇编,通过手工方式查指令编码表,逐个把助记符指令“翻译”成机器码,然后把得到的机器码程序键入单片机,进行调试和运行。 手工汇编的缺点: 1、偏移量的计算容易出错 2、程序的修改会引起后面指令地址的变化,转移指令的偏移量也要重新计算。,2020/10/21,6,二、机器汇编,机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。汇编工作由机器自动完成,最后得到以机器码表示的目标程序。,2020/10/21,7,三、反汇编,将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。 汇编和反汇编的过程如图4-3所示。,图4-3 汇编和反汇编过程,2020/10/21,8,4.1.3 伪指令,伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。 MCS-51有8个伪指令: ORG END EQU DATA DB DW DS BIT,2020/10/21,9,ORG 汇编起始命令,格式:ORG 16位地址 功能:规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址。例如: ORG 2000H START:MOV A,#64H 规定了START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。,2020/10/21,10,DATA 数据地址赋值命令,格式:字符名称 DATA 表达式 功能:与EQU类似,但有以下差别: 1、EQU定义的字符名必须先定义后使用,而DATA定义的字符名可以后定义先使用。 2、用EQU伪指令可以把一个汇编符号赋给一个名字,而DATA只能把数据赋给字符名。 3、DATA语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。DATA伪指令在程序中用来定义数据地址,2020/10/21,11,DB 定义字节命令,格式:DB(项或项表) 功能:通知汇编程序从当前ROM地址开始,保留一个字或字节串的存储单元,并存入DB后的数据。 注意:项或项表可以是一个字节,用逗号隔开的字节串或括在单引号中的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码),2020/10/21,12,DW 定义字命令,格式:DW 16位数据项或项表 功能:把DW后的16位数据项或项表从当前地址连续存放。每项数值为16位二进制数,高8位先放,低8位后存放。DW用于定义一个地址表。 例如: ORG 1500H TABLE:DW 7234H,8AH,10H 经汇编后(1500H)=72H, (1501H)=34H, (1502H)=00H, (1503H)=8AH, (1504H)=00H, (1505H)=10H,,2020/10/21,13,DS 定义存储空间命令,格式:DS 表达式 功能:在汇编时,从指定地址开始保留DS之后表达式的值所规定的存储单元以备后用。 例如: ORG 1000H DS 08H DB 30H,8AH 汇编后,从1000H保留8个单元,然后从1008H按DB命令给内存赋值,即(1008H)=30H (1009H)=8AH,2020/10/21,14,BIT 位地址符号命令,格式:字符名 BIT 位地址 功能:把BIT后的位地址值赋给字符名。其中字符名不是标号,其后没有冒号,但字符名是必须的。 例如: A1 BIT P1.0 A2 BIT 02H 汇编后,P1口第0位的位地址90H就赋给了A1,而A2的值则为02H。,2020/10/21,15,4.2 编程的步骤、方法和技巧,4.2.1 编程的步骤 4.2.2 编程的方法和技巧 4.2.3 汇编语言程序的基本结构,2020/10/21,16,4.2.1 编程的步骤,一、分析问题 二、确定算法 三、画程序流程图 四、编写程序,2020/10/21,17,一、分析问题,对需要解决的问题进行分析,以求对问题由正确的理解。 解决问题的任务是什么? 工作过程? 现有的条件,已知数据,对运算的精度和速度方面的要求? 设计的硬件结构是否方便编程?,2020/10/21,18,二、确定算法,算法是如何将实际问题转化成程序模块来处理。 在编程以前,先要对几种不同的算法进行分析、比较,找出最适宜的算法,2020/10/21,19,三、画程序流程图,程序流程图是使用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。 流程图步骤分得越细致,编写程序是也越方便。 画流程图是程序结构设计是采用的一种重要手段。 一个系统软件有总的流程图(主程序框图)和局部的流程图。 流程图常采用的图形和符号。,2020/10/21,20,椭圆框,或桶形框,:表示程序的开始或结束。,矩形框,:表示要进行的工作。,菱形框,:表示要判断的事情,菱形框内的表达式表示要判断的内容。,圆圈,:表示连接点,指向线,:表示程序的流向,2020/10/21,21,四、编写程序,用MCS-51汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段: 标号:操作码操作数;注释 每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格“ ”、冒号“:”、逗号“,”、分号“;”等。 例:LOOP:MOV A,#00H;立即数00HA,2020/10/21,22,标号,标号是用户定义的符号地址。 一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。 标号由以英文字母开始的18个字母或数字组成,以冒号“:”结尾。 标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存放该指令目标码第一字节的存储单元的地址赋给该标号,所以,标号又叫指令标号。,2020/10/21,23,注释,注释部分不是汇编语言的功能部分,只是用语增加程序的可读性。 良好的注释是汇编语言程序编写中的重要组成部分。,2020/10/21,24,4.2.2 编程的方法和技巧,一、模块化的程序设计方法 二、编程技巧,2020/10/21,25,一、模块化的程序设计方法,1、程序功能模块化的优点 2、划分模块的原则,2020/10/21,26,1、程序功能模块化的优点,单个模块结构的程序功能单一,易于编写、调试和修改。 便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。 程序可读性好,便于功能扩充和版本升级。 对程序的修改可局部进行,其它部分可以保持不变。 对于使用频繁的子程序可以建立子程序库,便于多个模块调用。,2020/10/21,27,2、划分模块的原则,每个模块应具有独立的功能,能产生一个明确的结果,即单模块的功能高内聚性。 模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。 模块长度适中。20条100条的范围较合适。,2020/10/21,28,二、编程技巧,1、尽量采用循环结构和子程序。 2、尽量少用无条件转移指令。 3、对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加器内容压入堆栈。,2020/10/21,29,4.2.3 汇编语言程序的基本结构,一、顺序程序 二、分支程序 三、循环程序,2020/10/21,30,一、顺序程序,顺序程序是最简单的程序结构,即顺序结构。 程序按顺序一条一条地执行指令。,2020/10/21,31,例:将一个字节内(内部RAM30H)的两个BCD码十进制数拆开变成相应的ASCII码,存入两个RAM(31H、32H)单元中,且高位在31H。 MOV R0,#32H MOV R0,#00H MOV A,30H;BCD码给A XCHD A,R0;将低位BCD码送32H单元 ORL 32H,#30H;将32H单元的内容调整为ASCII码 SWAP A;调整高位 ORL A,#30H MOV 31H,A,2020/10/21,32,例2:16位数求补。设16位二进制数在R1R0中,求补结果存于R3R2中。,解: ORG1000H START: MOVA,R0 CPLA ADDA,#01H MOVR2,A MOVA,R1 CPLA ADDC A,#00H MOV R3,A SJMP$,2020/10/21,33,二、分支程序,程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件就顺序执行程序。 分支程序又分为单分支和多分支结构。 多分支程序是首先把分支程序按序号排列,然后按序号值进行转移。 在MCS-51指令系统中,通过条件判断实现单分支程序转移的指令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态作为条件进行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用这些指令可以完成0、1、正、负,以及相等、不相等作为各种条件判断依据的程序转移。 结构如图4-1所示。 例子如例4-1所示。,2020/10/21,34,(一)简单分支程序 例:片内RAM ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入RES单元。程序如下:,解:ORG1000H ONE DATA 22H;定义ONE TWO DATA 23H;定义TWO RES DATA 30H;定义RES MOVA,ONE START:CJNE A,TWO,BIG SJMP STORE BIG:JCSTORE MOVA,TWO STORE:MOV RES,A SJMP$,Back,2020/10/21,35,例:多重分支程序试完成程序,求Y值,设m, n存在30H和31H中,Y存在32H中,且mn积小于256,m/n的商为整数。,mn (mn) CJNE A,B,LOOP1 MOV 32H,#00H LJMP BB LOOP1: JC LOOP2 DIV AB MOV 32H,A LJMP BB LOOP2: MUL AB MOV 32H,A BB: END,2020/10/21,36,散转指令,转向0分支,转向1分支,转向n-1分支,转向n分支,K=0,K=1,K=n-1,K=n,2020/10/21,37,例4-1: 128种分支转移程序。 功能:根据入口条件转移到128个目的地址。 入口:(
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号