《第4章汇编语言程序设计知识BH教学案例》由会员分享,可在线阅读,更多相关《第4章汇编语言程序设计知识BH教学案例(76页珍藏版)》请在金锄头文库上搜索。
1、单片机原理与接口技术(第3版),学 院:计算机科学学院 教 师:师红宇 时 间:2013年3月,第 4 章 汇编语言程序设计知识,内容提要,第1章 微机基础知识 第2章 89C51单片机硬件结构和原理 第3章 89C51指令系统 第4章 汇编语言程序设计知识 第4章 C-51程序设计知识 第5章 中断系统 第6章 定时器及应用 第7章 89C51串行口及通信技术 第8章 单片机小系统片外扩展 第9章 应用系统配置及接口技术,第4章 汇编语言程序设计知识,4.1 编程的步骤、方法和技巧 4.2 汇编语言源程序的编辑和汇编 4.3 汇编语言程序设计基础与举例,4.1.1 编程的步骤,一、分析问题
2、二、确定算法 三、画程序流程图 四、编写程序,一、分析问题,对需要解决的问题进行分析,以求对问题由正确的理解。如, 解决问题的任务是什么? 工作过程? 现有的条件,已知数据,对运算的精度和速度方面的要求? 硬件资源如何访问?,二、确定算法,算法是如何将实际问题转化成程序模块来处理。 在编程以前,先要对几种不同的算法进行分析、比较,找出最适宜的算法,三、画程序流程图,程序流程图是使用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。 流程图步骤分得越细致,编写程序是也越方便。 画流程图是程序结构设计是采用的一种重要手段。 一个系统软件有总的流程图(主程序框图)和局部的流程图。 流程图
3、常采用的图形和符号。,椭圆框,或桶形框,:表示程序的开始或结束。,矩形框,:表示要进行的工作。,菱形框,:表示要判断的事情,菱形框内的表达式表示要判断的内容。,圆圈,:表示连接点,指向线,:表示程序的流向,四、编写程序,用89C51汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段: 标号:操作码操作数;注释 每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格“ ”、冒号“:”、逗号“,”、分号“;”等。 例:LOOP:MOV A,#00H;立即数00HA,4.1.2 编程的方法和技巧,一、模块化的程序设计方法 二、编程技巧,一、模块化的程序设计方法
4、,1、程序功能模块化的优点 2、划分模块的原则,1、程序功能模块化的优点,单个模块结构的程序功能单一,易于编写、阅读、调试和修改。 便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。 程序可读性好,便于功能扩充和版本升级。 对程序的修改可局部进行,其它部分可以保持不变。 对于使用频繁的子程序可以建立子程序库,便于多个模块调用。,2、划分模块的原则,每个模块应具有独立的功能,能产生一个明确的结果,即单模块的功能高内聚性。 模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、交换量的
5、多少及交换频繁程度。 模块长度适中。,二、编程技巧,1、尽量采用循环结构和子程序。 2、尽量少用无条件转移指令。 3、对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加器内容压入堆栈。,4.2 汇编语言源程序的编辑和汇编,4.2.1 源程序编辑 4.2.2 源程序的汇编 4.2.3 伪指令,4.2.1 源程序编辑,在微型计算机上,借助编辑软件,编写或修改
6、汇编语言源程序。如行编辑或屏幕编辑软件。,4.2.2 源程序的汇编,汇编:将汇编语言源程序转换为机器码表示的目标程序的过程。对单片机有: 一、手工汇编 二、机器汇编 三、反汇编,一、手工汇编,通过手工方式查指令编码表,逐个把助记符指令“翻译”成机器码,然后把得到的机器码程序键入单片机,进行调试和运行。 手工汇编的缺点: 1、偏移量的计算容易出错 2、程序的修改会引起后面指令地址的变化,转移指令的偏移量也要重新计算。,二、机器汇编,机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。汇编工作由机器自动完成,最后得到以机器码表示的目标程序。,三、反汇编,将二进制机器语言程序翻译成汇编语言程序的过
7、程称反汇编。 汇编和反汇编的过程如图4-3所示。,源程序 (汇编语言),目标码 (机器语言),汇编(汇编程序),反汇编(汇编程序),图4-3 汇编和反汇编过程,4.2.3 伪指令,伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。,ORG 汇编起始命令,格式:ORG 16位地址 功能:规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址。例如: ORG 2000H START:MOV A,#64H 规定了START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。,END 汇编结束指令,格式:END 功能:通知汇编程
8、序结束汇编。在END之后所有的汇编指令均不予以处理。,EQU 赋值命令,格式:字符名称 EQU 项(数或汇编符号) 功能:把“项”赋给“字符名称”。 注意:字符名称不等于标号(其后没有冒号);其中的项,可以是数,也可以是汇编符号。EQU赋值过的符号名可以用作数据、代码地址、位地址或一个立即数。可以是8位的,也可以是16位的。 例如:,EQU 赋值命令,例1: AA EQU R1 MOV A,AA;AA代表工作寄存器R1 例2: A10 EQU 10 DELY EQU 07EBH MOV A,A10;A10作为片内的一个直接地址 LCALL DELY;DELY作为一个16位子程序的入口地址,DA
9、TA 数据地址赋值命令,格式:字符名称 DATA 表达式 功能:与EQU类似,但有以下差别: 1、EQU定义的字符名必须先定义后使用,而DATA定义的字符名可以后定义先使用。 2、用EQU伪指令可以把一个汇编符号赋给一个名字,而DATA只能把数据赋给字符名。 3、DATA语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。DATA伪指令在程序中常用来定义数据地址,DB 定义字节命令,格式:DB(项或项表) 功能:通知汇编程序从当前ROM地址开始,保留一个字或字节串的存储单元,并存入DB后的数据。 注意:项或项表可以是一个字节,用逗号隔开的字节串或括在单引号中的ASCII字符串。 例
10、如:,DB 定义字节命令,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码),DW 定义字命令,格式:DW 16位数据项或项表 功能:把DW后的16位数据项或项表从当前地址连续存放。每项数值为16位二进制数,高8位先放,低8位后存放。DW用于定义一个地址表。 例如:,DW 定义字命令,ORG 1500H TABLE:DW 7234H,8
11、AH,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,BIT 位地址符号命令,格式:字符名 BIT 位地址 功能:把BIT后的位地址值赋给字符名。其中字符名不是标号,
12、其后没有冒号,但字符名是必须的。 例如: A1 BIT P1.0 A2 BIT 02H 汇编后,P1口第0位的位地址90H就赋给了A1,而A2的值则为02H。,4.3 程序设计基础与举例,4.3.0 MCS-51汇编语言程序代码框架 4.3.1 顺序程序设计 4.3.2 分支程序设计 4.3.3 循环程序设计 4.3.4 子程序设计及调用 4.3.5 逻辑运算程序设计,ORG 1000H LEN EQU 10H START: MOV A,#LEN ADD A,#30H SJMP $ ORG 2000H TAB1: DB 32H,0A7H TAB2: DW 324AH,3CH TAB3: DS
13、5 END,1000H,4.3.0 MCS-51汇编语言程序代码框架,4.3.1 顺序程序,顺序程序是一种最简单,最基本的程序。,特点:程序按编写的顺序依次往下执行每一条指令,直到最后一条。,例 有一变量存放在片内RAM 20H单元,其取值范围为:00H05H,编程实现:求变量的平方值,并存入片内RAM 21H单元。,分析:,X,X2,20H,21H,内部RAM,TABLE+0,02,12,22,32,42,52,+1,+2,+3,+4,+5,X,X2,步骤:,1. 送表头首地址,2. 取X到A,3. 求X2 存于A,4. 将X2存于内部RAM21H,ORG 1000H,START: MOV
14、DPTR ,#TABLE,MOV A , 20H,MOVC A ,A+DPTR,MOV 21H , A,SJMP $,TABLE: DB 00H, 01H, 04H DB 09H, 10H, 19H,ORG 2000H,5. 建立平方表,例 三字节无符号数加法。一个加数存放在内部RAM 50H,51H,52H单元,另一个加数存放在内部RAM 60H,61H,62H单元,将相加结果存入50H,51H,52H单元。进位存放在位寻址区的00H位。按低字节对应低地址存放。,分析:,+,15,1,0,9A,C5,1,00,ORG 0000H START: LJMP START1 ORG 1000H ST
15、ART1:MOV A, 50H ADD A, 60H MOV 50H,A MOV A, 51H ADDC A,61H MOV 51H,A MOV A, 52H ADDC A, 62H MOV 62H,A MOV 00H,C SJMP $,思考题: 若求两个十字节数的和,程序应该怎么写?,1分支程序的基本形式 分支程序有三种基本形式。,分支程序的设计要点如下:,(1)先建立可供条件转移指令测试的条件。,(2)选用合适的条件转移指令。,(3)在转移的目的地址处设定标号。,4.3.2 分支程序,N,(a),(b),(c),分支程序结构流程图,例 X存于20H单元,求出Y值,将Y值存入30H单元。 X X0 Y = 20H X=0 X+5 X0,分析:根据数据的符号位判别该数的正负,若最高位为0,再判别该数是否为0。请看程序流程。,2双向分支程序设计举例,A为0?,Y,取数,A(20H),开始,结束,A0?,Y,N,N,A#20H,AX+5,AX,(30H)A,程序流程图,3多向分支程序设计举例,例 根据R0的值转向7个分支程序。 R0=0,转向SUB0; R0=1,转向SUB1; . R0=N,转向SUBN。,分析:利用JMP A+DPTR 指令直接给PC赋值,使程序实现转移。程序流程如下。,多向分支程序流程图,结束,参考程