资源预览内容
第1页 / 共51页
第2页 / 共51页
第3页 / 共51页
第4页 / 共51页
第5页 / 共51页
第6页 / 共51页
第7页 / 共51页
第8页 / 共51页
第9页 / 共51页
第10页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第四章汇编语言程序设计知识第四章第四章 汇编语言程序设计及知识汇编语言程序设计及知识4.1 编程的步骤4.2 伪指令4.3 编程的方法和技巧4.4 汇编语言程序的基本结构注:可以预约做实验4.1 4.1 编程的步骤编程的步骤1、分析问题对需要解决的问题进行分析,以求对问题有正确的理解。 解决问题的任务是什么?工作过程?现有的条件,已知数据,对运算的精度和速度方面的要求? 设计的硬件结构是否方便编程?4.1 4.1 编程的步骤编程的步骤2、确定算法 算法是如何将实际问题转化成程序模块来处理。 在编程以前,先要对几种不同的算法进行分析、比较,找出最适宜的算法。4.1 4.1 编程的步骤编程的步骤3、画程序流程图 程序流程图是使用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。 画流程图是程序结构设计是采用的一种重要手段。 流程图步骤分得越细致,编写程序是也越方便。 一个系统软件有总的流程图(主程序框图)和局部的流程图。 流程图常采用的图形和符号。椭圆框或桶形框:表示程序的开始或结束。矩形框:表示要进行的工作。菱形框:表示要判断的事情,菱形框内的表达式表示要判断的内容。圆圈:表示连接点指向线:表示程序的流向流程图常采用的图形和符号流程图常采用的图形和符号开始将学生成绩存入 累加器A中比较(A)与#60的大小 (A)=#60?增加R1的值打印学生成绩(A)#60?增加R2的值结束YESYESNONO4.1 4.1 编程的步骤编程的步骤4、编写程序n用89C51汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段:标号:操作码操作数;注释n每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格“ ”、冒号“:”、逗号“,”、分号“;”等。例:LOOP:MOV A,#00H ;立即数00HA4.1 4.1 编程的步骤编程的步骤4、编写程序标号:操作码操作数;注释n出现在助记符之前的,是由用户定义的一个字符串。n一条指令的标号是该条指令的符号名字,标号的值是汇编这 条指令时指令的地址,代表16位长的ROM地址编码。n标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存 放该指令目标码第一字节的存储单元的地址赋给该标号,所 以,标号又叫指令标号。n并不是每一条语句都需要标号,只有那些欲被引用的语句才 需要。(1)标号4.1 4.1 编程的步骤编程的步骤4、编写程序标号:操作码操作数;注释n对于标号的限定: 最多可由31个字符构成,字符可以是英文字母(一般不区分大小写)、阿拉伯数字和其他字符(“?”和“_”); 第一字符必须是非数字; 后面跟冒号“:”; 一个标号在程序中只能定义一次; 标号不能为指令助记符、伪指令、SFR名称等系统保留字。(1)标号4.1 4.1 编程的步骤编程的步骤4、编写程序标号:操作码操作数;注释(2)操作码n操作码是必不可少的。n它用一组字母符号表示指令的操作码。在89C51中,由指令助记符组成。n一般留出标号字段的空位,以便与标号相区别。4.1 4.1 编程的步骤编程的步骤4、编写程序标号:操作码操作数;注释(3)操作数n汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没有。n若有两个操作数,操作数之间用逗号“,”分开。n操作数字段的内容复杂多样,可能包括: 工作寄存器:工作寄存器:由RS0和RS1规定的当前工作寄存器区中的R0R7。 特殊功能寄存器:特殊功能寄存器:21个特殊功能寄存器SFR的名字。 标号名:标号名:赋值标号 由汇编指令EQU等赋值的标号;指令标号 指令标号指示的指令的第一字节地址是该标号的值。 $ $:用来表示程序计数器的当前值。4.1 4.1 编程的步骤编程的步骤(3)操作数 符号 可为二进制(B)、八进制(O)、十进制(D)、十六进制(H)或字符串。4.1 4.1 编程的步骤编程的步骤(3)操作数 数值 汇编时,计算出表达式的值填入目标码。 一般缺省情况下,汇编器默认的数值是十进制数值; 若常数以字符AF开头,必须在其前面加“0”作为引导,以便与标号或符号名相区别。 表达式4.1 4.1 编程的步骤编程的步骤4、编写程序标号:操作码操作数;注释(4)注释n注释部分不是汇编语言的功能部分,只是用语增加程序的可读性。n良好的注释是汇编语言程序编写中的重要组成部分。n由“;”或“/*/”表示。5、上机调试4.2 4.2 伪指令伪指令伪指令不是真正的指令,它主要是为汇编程序服务的,在汇编过程中起控制作用的指示性语句。无地址、无对应的机器码,在汇编时不产生目标程序。 ORG 汇编起始地址命令 END 汇编语言程序结束伪指令 EQU 赋值伪指令 DB 定义字节伪指令 DW 定义字伪指令 BIT 位地址符号伪指令 DATA 定义标号数值伪指令1、ORG 汇编起始地址命令 n n格式:格式:ORG 16位地址n n功能:功能:规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址。n n例如:例如: ORG 2000HSTART:MOV A,#64Hn规定了START的地址是2000H,又规定了汇编后的第一条指令 码从2000H开始存放。注意:在一个源程序中,可以多次使用ORG指令,来规定不同的程 序段的起始地址。但是,地址必须由小到大排列,不能交叉、重叠。4.2 4.2 伪指令伪指令2、END 汇编结束命令 n n格式:格式:ENDn n功能:功能:通知汇编程序结束汇编。在END之后所有的汇编指令均不予以处理。4.2 4.2 伪指令伪指令3、EQU 赋值命令 n n格式:格式:字符名称 EQU 项(数或汇编符号)n n功能:功能:把“项”赋给“字符名称”。n n注意:注意:字符名称不等于标号(其后没有冒号);其中的项,可以是数,也可以是汇编符号。EQU赋值过的符号名可以用作数据、代码地址、位地址或一个立即数。可以是8位的,也可以是16位的。4.2 4.2 伪指令伪指令为程序的阅读、修改 和调试带来方便3、EQU 赋值命令 n n例如:例如:例2: A10 EQU 10DELY EQU 07EBHMOV A,A10 ;A10作为片内的一个直接地址LCALL DELY ;DELY作为一个16位子程序的入口地址4.2 4.2 伪指令伪指令4、DATA 数据地址赋值命令 n n格式:格式:字符名称 DATA 表达式n n功能:功能:与EQU类似,但有以下差别: EQU定义的字符名必须先定义后使用,而DATA定义的字 符名可以后定义先使用。 用EQU指令可以把一个汇编符号赋给一个名字,而DATA只能把数据赋给字符名。 DATA语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。DATA伪指令在程序中用来定义数据地址。4.2 4.2 伪指令伪指令5、DB 定义字节命令 n n格式:格式:DB 项或项表n n功能:功能:通知汇编程序从当前ROM地址开始,保留一个字或字节 串的存储单元,并存入DB后的数据。n n注意:注意:项或项表可以是一个字节,用逗号隔开的字节串或括在单引号中的ASCII字符串。4.2 4.2 伪指令伪指令ORG 2000HDB 0A3HLIST:DB 26H,03HSTR: DB ABC经汇编后:(2000H)=A3H, (2001H)=26H, (2002H)=03H, (2003H)=41H,(2004H)=42H, (2005H)=43H,(41H,42H,43H分别为A,B,C的ASCII码)5、DB 定义字节命令 n n例如:例如:4.2 4.2 伪指令伪指令2000H2001H2002H2003H2004H2005HA3H26H03H41H42H43H6、DW 定义字命令 n n格式:格式:DW 16位数据项或项表n n功能:功能:把DW后的16位数据项或项表从当前地址连续存放。每项数值为16位二进制数,高8位先放,低8位后存放。DW用于定义一个地址表。ORG 1500HTABLE:DW 7234H,8AH,10H,H (1500H)=72H, (1501H)=34H, (1502H)=00H, (1503H)=8AH,(1504H)=00H, (1505H)=10H。 (1506H)=00H,(1507H)=48H (H的ASCII值)经汇编后:4.2 4.2 伪指令伪指令例如:例如:双字节7、DS 定义存储空间命令 ORG 1000HDS 08HDB 30H,8AHn n格式:格式:DS 表达式n n功能:功能:在汇编时,从指定地址开始保留DS之后表达式的值所规定的存储单元以备后用。n n例如:例如:汇编后,从1000H保留8个单元,然后从1008H按DB命令给内存赋值,即(1008H)=30H, (1009H)=8AH4.2 4.2 伪指令伪指令8、BIT 定义存储空间命令 A1 BIT P1.0A2 BIT 02H汇编后,P1口第0位的位地址90H就赋给了A1,而A2的值则为02H。n n格式:格式:字符名 BIT 位地址n n功能:功能:把BIT后的位地址值赋给字符名。其中字符名不是标号,其后没有冒号,但字符名是必须的。n n例如:例如:4.2 4.2 伪指令伪指令n源程序:(XCH.ASM)n ORG 0000Hn LJMPMAINn nORG 0030HnMAIN: MOV30H, #12Hn MOV31H, #34Hn MOVA, 30Hn MOV30H, 31Hn MOV31H, An n SJMP$n END4.2 4.2 伪指令伪指令1、模块化的程序设计方法2、编程技巧4.3 4.3 编程的方法和技巧编程的方法和技巧1、模块化的程序设计方法4.3 4.3 编程的方法和技巧编程的方法和技巧n单个模块结构的程序功能单一,易于编写、调试和修改。n便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。n程序可读性好,便于功能扩充和版本升级。n对程序的修改可局部进行,其它部分可以保持不变。n对于使用频繁的子程序可建立子程序库,便于多个模块调用。(1)程序功能模块化的优点1、模块化的程序设计方法4.3 4.3 编程的方法和技巧编程的方法和技巧n每个模块应具有独立的功能,能产生一个明确的结果,即单模块的功能高内聚性。n模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。n模块长度适中。20条100条的范围较合适。(2)划分模块的原则2、编程技巧4.3 4.3 编程的方法和技巧编程的方法和技巧n尽量采用循环结构和子程序。n尽量少用无条件转移指令。n对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。n在中断处理程序中,除了
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号