汇编语言程序设计知识课件

上传人:我*** 文档编号:143784676 上传时间:2020-09-02 格式:PPT 页数:73 大小:179KB
返回 下载 相关 举报
汇编语言程序设计知识课件_第1页
第1页 / 共73页
汇编语言程序设计知识课件_第2页
第2页 / 共73页
汇编语言程序设计知识课件_第3页
第3页 / 共73页
汇编语言程序设计知识课件_第4页
第4页 / 共73页
汇编语言程序设计知识课件_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《汇编语言程序设计知识课件》由会员分享,可在线阅读,更多相关《汇编语言程序设计知识课件(73页珍藏版)》请在金锄头文库上搜索。

1、第四章 汇编语言程序设计及知识,4.1 编程的步骤、方法和技巧 4.2 汇编语言源程序的编辑和汇编,4.1 编程的步骤、方法和技巧,4.1.1 编程的步骤 4.1.2 编程的方法和技巧 4.1.3 汇编语言程序的基本结构,4.1.1 编程的步骤,一、分析问题 二、确定算法 三、画程序流程图 四、编写程序,一、分析问题,对需要解决的问题进行分析,以求对问题由正确的理解。如, 解决问题的任务是什么? 工作过程? 现有的条件,已知数据,对运算的精度和速度方面的要求? 设计的硬件结构是否方便编程?,二、确定算法,算法是如何将实际问题转化成程序模块来处理。 在编程以前,先要对几种不同的算法进行分析、比较

2、,找出最适宜的算法,三、画程序流程图,程序流程图是使用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。 流程图步骤分得越细致,编写程序是也越方便。 画流程图是程序结构设计是采用的一种重要手段。 一个系统软件有总的流程图(主程序框图)和局部的流程图。 流程图常采用的图形和符号。,椭圆框,或桶形框,:表示程序的开始或结束。,矩形框,:表示要进行的工作。,菱形框,:表示要判断的事情,菱形框内的表达式表示要判断的内容。,圆圈,:表示连接点,指向线,:表示程序的流向,四、编写程序,用89C51汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段: 标号:操作码操作数;注释 每个字段

3、之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格“ ”、冒号“:”、逗号“,”、分号“;”等。 例:LOOP:MOV A,#00H;立即数00HA,标号,标号是用户定义的符号地址。 一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。 标号由以英文字母开始的18个字母或数字组成,以冒号“:”结尾。 标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存放该指令目标码第一字节的存储单元的地址赋给该标号,所以,标号又叫指令标号。,操作码,操作码是必不可少的。 它用一组字母符号表示指令的操作码。在89C51中,由89C51的指令助记符组成。,操作数,汇编

4、语言指令可能要求或不要求操作数,所以这一字段可能有也可能没有。 若有两个操作数,操作数之间用逗号“,”分开。 操作数包括的内容有: (1)工作寄存器:由PSW.3和PSW.4规定的当前工作寄存器区中的R0R7。 (2)特殊功能寄存器:21个SFR的名字。 (3)标号名:赋值标号由汇编指令EQU等赋值的标号;指令标号指令标号指示的指令的第一字节地址是该标号的值。 (4)常数:可用二进制(B)、十进制、十六进制(H),若常数以字符开头,前面加0。 (5)$:用来表示程序计数器的当前值。 (6)表达式:汇编时,计算出表达式的值填入目标码。,注释,注释部分不是汇编语言的功能部分,只是用语增加程序的可读

5、性。 良好的注释是汇编语言程序编写中的重要组成部分。,4.1.2 编程的方法和技巧,一、模块化的程序设计方法 二、编程技巧,一、模块化的程序设计方法,1、程序功能模块化的优点 2、划分模块的原则,1、程序功能模块化的优点,单个模块结构的程序功能单一,易于编写、调试和修改。 便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。 程序可读性好,便于功能扩充和版本升级。 对程序的修改可局部进行,其它部分可以保持不变。 对于使用频繁的子程序可以建立子程序库,便于多个模块调用。,2、划分模块的原则,每个模块应具有独立的功能,能产生一个明确的结果,即单模块的功能高内聚性。 模块之间

6、的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。 模块长度适中。20条100条的范围较合适。,二、编程技巧,1、尽量采用循环结构和子程序。 2、尽量少用无条件转移指令。 3、对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加器内容压入堆栈。,

7、4.1.3 汇编语言程序的基本结构,一、顺序程序 二、分支程序 三、循环程序,顺序程序流程图 循环程序流程图 分支程序流程图,一、顺序程序,顺序程序是最简单的程序结构,即顺序结构。 程序按顺序一条一条地执行指令。,顺序程序设计实例,【例1】 有一个16位二进制负数的补码存放在片内RAM 30H、31H单元内,求它的原码的绝对值并将它存放到片内RAM 40H、41H单元。 解:设定片内RAM 30H单元存放高位,片内RAM 31H单元存放低位,其他单元与之类同。补码取反后要加1,绝对值要去掉符号位。,参考程序,顺序程序设计实例,【例2】 拆字。将片内RAM20H单元的内容拆成两段,每段4位,并将

8、他们分别存入21H和22H单元中。,参考程序:,ORG 2000H START: MOV R0, #21H MOV A, 20H ANL A, #0FH MOV R0, A INC R0 MOV A, 20H SWAP A ANL A, #0FH MOV R0, A,作业: 1.将存放在R0(高8位),R1(低8位)中的16位二进制数,求反加1,结果存放在R2,R3中。 2.设有一个16位无符号二进制数存放在片内RAM的50H和51H单元中,将它乘以2. 提示:将一个二进制数乘以2,可通过左移1 位,低位补0的方法。,ORG 1000H CLR C MOV A, 51H RLC A MOV 5

9、1H, A MOV A, 50H RLC A MOV 50H, A SJMP $ END,二、分支程序,程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件就顺序执行程序。 分支程序又分为单分支和多分支结构。 多分支程序是首先把分支程序按序号排列,然后按序号值进行转移。,二、分支程序,在89c51指令系统中,通过条件判断实现单分支程序转移的指令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态作为条件进行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用这些指令可以完成0、1、正、负,以及相等、不相等作为各种条件判断依据的程序转移

10、。 结构如图4-1所示。 例子如例4-1所示。,例4-1,例4-1: 128种分支转移程序。 功能:根据入口条件转移到128个目的地址。 入口:(R3)=转移目的地址的序号00H7FH。 出口:转移到相应子程序入口。,二、分支程序,说明:此程序要求128个转移目的地址(ROUT00 ROUT7FH)必须驻留在与绝对转移指令AJMP相同的一个2KB存储区内。 RL指令对变址部分乘以2,因为每条AJMP指令占两个字节。,图4-1 分支程序结构,散转指令,转向0分支,转向1分支,转向n-1分支,转向n分支,K=0,K=1,K=n-1,K=n,【例3】 设a存放在累加器A中,b存放在寄存器B中,计算Y

11、值并将结果存放在累加器A中,试编制相应的程序。 a为奇数时 Y=a-b a为偶数时 Y=a+b,ORG 1000H JNB ACC.0,MN CLR C SUBB A, B SJMP DON MN: ADD A, B DON: SJMP $ END,【例4】 设变量X存放在VAR单元中,函数值Y存放在FUNC中,按下式给Y赋值。,ORG 1000H VAR EQU 30H FUNC EQU 31H STAR: MOV A,VAR CJNE A,#0AH,COM COM: JNC MAX MOV A,#0FFH SJMP DON MAX: MOV A.#01H DON: MOV FUNC,A S

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

13、是计数循环,当循环了一定的次数后,就停止循环。 在单片机中,一般用一个工作寄存器Rn作为计数器,对该计数器赋初值作为循环次数。每循环一次,计数器的值减1,即修改循环控制变量,当计数器的置件为0时,就停止循环。,4、循环控制部分,根据循环结束条件,判断是否结束循环。 89C51可采用DJNZ指令来自动修改控制变量并能结束循环。,置初值,循环体,循环修改,循环控制,退出循环,未完,完,(a),置初值,循环体,循环修改,循环控制,退出循环,未完,完,(b),图4-2 循环组织方式流程图,循环程序设计实例,【例5】 片内RAM中存放有10个数据,首地址为30H,编程将数据块传送到片外RAM以1000H

14、为首地址的存储单元中。 解:该程序是单重循环程序,片内RAM首地址30H、片外RAM首地址1000H和数据块长度10都是循环初始化的内容。 循环控制是对数据块长度进行判断,每传送一个数据,存放数据块长度的寄存器减1;10个数据传送完,存放数据块长度的寄存器内容正好为零,退出循环。,循环程序设计实例,【例6】软件延时程序。 当单片机时钟确定后,每条指令的指令周期是确定,因此,根据程序执行所用的总的机器周期数,可以较准确地计算程序执行完所用的时间。软件延时是实际经常采用的一种短时间定时方法。 1)采用循环程序进行软件延时子程序 DELAY: MOV R2,#DATA DELAY:DJNZ R2,D

15、ELAY1 RET,循环程序设计实例,2)采用双重循环的延时程序 TIME: MOV R1, #0FAH 1 L1: MOV R0, #0FFH 1 W1: DJNZ R0, W1 2 DJNZ R1, L1 2 NOP 1 NOP 1 RET 2,延时时间t: N=1+(1+2255+2) 250+1+1+2=128255个机器周期。 调整R0和R1中的参数,可改变延时时间。,循环程序设计实例,【例7】 在片内RAM从20H单元开始存放了8个数,编程找出其中的最大值送50H单元。 解:极值查找主要是进行数值大小比较。,【例8】重复256次读取并取平均值。 解:将R2R3作为连续256次累加16为工作寄存器,最后除以256.简便的算法是,将16位工作寄存器右移8位,读取R3的值。更简单的是,丢弃R3的读数,直接将R2中的数作为最终的近似平均值。,程序清单:,ORG 2000H AVR: MOV R2,#00H MOV R3,#00H MOV R4,#00H AVR1: MOV A,P1 ADD A,R3 JNC AVR2 INC R2 AVE2: MOV R3,A DJNZ R4,AVR1 SJMP $ END,编写程序,查找在内部的20H-50H单元中出现00H的次数,并将结果存入51H单元。,MOV R0,#20H MOV R7,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号