版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、15:56第4章 汇编语言程序设计及知识4.1 4.1 编程的步骤、方法和技巧编程的步骤、方法和技巧4.2 4.2 汇编语言源程序的编辑和汇编汇编语言源程序的编辑和汇编15:564.1 4.1 编程的步骤、方法和技巧编程的步骤、方法和技巧4.1.1 4.1.1 编程的步骤编程的步骤4.1.2 4.1.2 编程的方法和技巧编程的方法和技巧4.1.3 4.1.3 汇编语言程序的基本结构汇编语言程序的基本结构15:564.1.1 4.1.1 编程的步骤编程的步骤一、分析问题一、分析问题二、确定算法二、确定算法三、画程序流程图三、画程序流程图四、编写程序四、编写程序15:56一、分析问题 对需要解决的
2、问题进行分析,以求对问对需要解决的问题进行分析,以求对问题由正确的理解。题由正确的理解。 解决问题的任务是什么?解决问题的任务是什么? 工作过程?工作过程? 现有的条件,已知数据,对运算的精度现有的条件,已知数据,对运算的精度和速度方面的要求?和速度方面的要求? 设计的硬件结构是否方便编程?设计的硬件结构是否方便编程?15:56二、确定算法 算法是如何将实际问题转化成程序模块算法是如何将实际问题转化成程序模块来处理。来处理。 在编程以前,先要对几种不同的算法进在编程以前,先要对几种不同的算法进行分析、比较,找出最适宜的算法行分析、比较,找出最适宜的算法15:56三、画程序流程图程序流程图是使用
3、各种图形、符号、有向线段等来说明程序设计程序流程图是使用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。过程的一种直观的表示。流程图步骤分得越细致,编写程序是也越方便。流程图步骤分得越细致,编写程序是也越方便。画流程图是程序结构设计是采用的一种重要手段。画流程图是程序结构设计是采用的一种重要手段。一个系统软件有总的流程图(主程序框图)和局部的流程图。一个系统软件有总的流程图(主程序框图)和局部的流程图。流程图常采用的图形和符号。流程图常采用的图形和符号。15:56椭圆框椭圆框或桶形框或桶形框:表示程序的开始或结束。矩形框矩形框:表示要进行的工作。:表示要进行的工作。菱形框菱形框:
4、表示要判断的事情,菱形框内:表示要判断的事情,菱形框内的表达式表示要判断的内容。的表达式表示要判断的内容。圆圈圆圈:表示连接点:表示连接点指向线指向线:表示程序的流向:表示程序的流向15:56四、编写程序 用用89C51汇编语言编写的源程序行(一条汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段:语句)包括四个部分,也叫四个字段:标号标号:操作码操作码操作数操作数;注释注释 每个字段之间要用分隔符分隔,而每个字段内每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:部不能使用分隔符。可以用作分隔符的符号:空格空格“ ”、冒号、冒号“:”、逗号、逗号“,”
5、、分、分号号“;”等。等。例:例:LOOP:MOV A,#00H;立即数;立即数00HA15:56标号 标号是用户定义的符号地址。标号是用户定义的符号地址。 一条指令的标号是该条指令的符号名字,标号的值是一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。汇编这条指令时指令的地址。 标号由以英文字母开始的标号由以英文字母开始的18个字母或数字组成,以个字母或数字组成,以冒号冒号“:”结尾。结尾。 标号可以由赋值伪指令赋值,如果没有赋值,汇编程标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存放该指令目标码第一字节的存储单元的地址赋序把存放该指令目标码第一字节的存储单元的地
6、址赋给该标号,所以,标号又叫指令标号。给该标号,所以,标号又叫指令标号。15:56操作码 操作码是必不可少的。操作码是必不可少的。 它用一组字母符号表示指令的操作码。它用一组字母符号表示指令的操作码。在在89C51中,由中,由89C51的指令助记符组成。的指令助记符组成。15:56操作数汇编语言指令可能要求或不要求操作数,所以这一字段可能有也汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没有。可能没有。若有两个操作数,操作数之间用逗号若有两个操作数,操作数之间用逗号“,”分开。分开。操作数包括的内容有:操作数包括的内容有:(1)工作寄存器:由)工作寄存器:由PSW.3和和PSW.
7、4规定的当前工作寄存器区中规定的当前工作寄存器区中的的R0R7。(2)特殊功能寄存器:)特殊功能寄存器:21个个SFR的名字。的名字。(3)标号名:赋值标号)标号名:赋值标号由汇编指令由汇编指令EQU等赋值的标号;指令标等赋值的标号;指令标号号指令标号指示的指令的第一字节地址是该标号的值。指令标号指示的指令的第一字节地址是该标号的值。(4)常数:可用二进制()常数:可用二进制(B)、十进制、十六进制()、十进制、十六进制(H),若常),若常数以字符开头,前面加数以字符开头,前面加0。(5)$:用来表示程序计数器的当前值。:用来表示程序计数器的当前值。(6)表达式:汇编时,计算出表达式的值填入目
8、标码。)表达式:汇编时,计算出表达式的值填入目标码。15:56注释 注释部分不是汇编语言的功能部分,只注释部分不是汇编语言的功能部分,只是用语增加程序的可读性。是用语增加程序的可读性。 良好的注释是汇编语言程序编写中的重良好的注释是汇编语言程序编写中的重要组成部分。要组成部分。15:564.1.2 4.1.2 编程的方法和技巧编程的方法和技巧一、模块化的程序设计方法一、模块化的程序设计方法二、编程技巧二、编程技巧15:56一、模块化的程序设计方法1、程序功能模块化的优点、程序功能模块化的优点2、划分模块的原则、划分模块的原则15:561、程序功能模块化的优点 单个模块结构的程序功能单一,易于编
9、写、调试和修单个模块结构的程序功能单一,易于编写、调试和修改。改。 便于分工,从而可使多个程序员同时进行程序的编写便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。和调试工作,加快软件研制进度。 程序可读性好,便于功能扩充和版本升级。程序可读性好,便于功能扩充和版本升级。 对程序的修改可局部进行,其它部分可以保持不变。对程序的修改可局部进行,其它部分可以保持不变。 对于使用频繁的子程序可以建立子程序库,便于多个对于使用频繁的子程序可以建立子程序库,便于多个模块调用。模块调用。15:562、划分模块的原则 每个模块应具有独立的功能,能产生一个明确的结果,每个模块应具有独
10、立的功能,能产生一个明确的结果,即单模块的功能高内聚性。即单模块的功能高内聚性。 模块之间的控制耦合应尽量简单,数据耦合应尽量少,模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。交换量的多少及交换频繁程度。 模块长度适中。模块长度适中。20条条100条的范围较合适。条的范围较合适。15:56二、编程技巧1、尽量采用循环结构和子程序。、尽量采用循环结构和子程序。2、尽量少用无条件转移
11、指令。、尽量少用无条件转移指令。3、对于通用的子程序,考虑到其通用性,除了用于存放子程、对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。应压入堆栈(返回前再弹出),即保护现场。4、在中断处理程序中,除了要保护处理程序中用到的寄存器、在中断处理程序中,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。外,还要保护标志寄存器。5、用累加器传递入口参数或返回参数比较方便,在子程序中,、用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加
12、器内容压入堆栈。一般不必把累加器内容压入堆栈。15:564.1.3 4.1.3 汇编语言程序的基本结构汇编语言程序的基本结构一、顺序程序一、顺序程序二、分支程序二、分支程序三、循环程序三、循环程序15:56一、顺序程序 顺序程序是最简单的程序结构,即顺序程序是最简单的程序结构,即顺序结构。顺序结构。 程序按顺序一条一条地执行指令程序按顺序一条一条地执行指令。15:56二、分支程序 程序分支是通过条件转移指令实现的,即根据条件对程序程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件的执行进行判断、满足条件则进行程序转移,不满足条件就顺序执行程序。
13、就顺序执行程序。 分为分为单分支单分支和和多分支多分支结构结构。 条件判断指令条件判断指令JZ、JNZ、CJNE、DJNZ等等 位状态作为条件的指令位状态作为条件的指令JC、JNC、JB、JNB、JBC JMP A+DPTR 散转指令散转指令15:56图4-1 分支程序结构散转指令转向0分支转向1分支转向n-1分支转向n分支K=0K=1K=n-1K=n15:56例例4-1: 128种分支转移程序。种分支转移程序。功能:根据入口条件转移到功能:根据入口条件转移到128个目的地址。个目的地址。入口:(入口:(R3)=转移目的地址的序号转移目的地址的序号00H7FH。出口:转移到相应子程序入口。出口
14、:转移到相应子程序入口。128个子程序首址JMP_128:MOV A,R3 RL A MOV DPTR,#JMPTAB JMP A+DPTRJMPTAB:AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F说明:此程序要求说明:此程序要求128个转移目的地址(个转移目的地址(ROUT00 ROUT7FH)必须驻留)必须驻留在与绝对转移指令在与绝对转移指令AJMP相同的一个相同的一个2KB存储区内。存储区内。RL指令对变址部分乘以指令对变址部分乘以2,因为每条,因为每条AJMP指令占两个字节。指令占两个字节。15:56三、循环程序 在程序运行时,有时需要连续重复执行某段程序,可
15、在程序运行时,有时需要连续重复执行某段程序,可以使用循环程序。其结构包括四部分:以使用循环程序。其结构包括四部分: 1、置循环初值、置循环初值 2、循环体(循环工作部分)、循环体(循环工作部分) 3、修改控制变量、修改控制变量 4、循环控制部分、循环控制部分 其组织方式如图其组织方式如图4-2所示。所示。15:561、置循环初值 对于循环程序中所使用的工作单元,在对于循环程序中所使用的工作单元,在循环开始时应置初值。循环开始时应置初值。 例如,工作寄存器设置计数初值,累加例如,工作寄存器设置计数初值,累加器器A清清0,以及设置地址指针、长度等。,以及设置地址指针、长度等。15:562、循环体(
16、循环工作部分) 重复执行的程序段部分,分为循环工作重复执行的程序段部分,分为循环工作部分和循环控制部分。部分和循环控制部分。 循环控制部分每循环一次,检查结束条循环控制部分每循环一次,检查结束条件,当满足条件时,就停止循环,往下件,当满足条件时,就停止循环,往下继续执行其他程序继续执行其他程序15:563、修改控制变量 在循环程序中,必须给出循环结束条件。在循环程序中,必须给出循环结束条件。 常见的是计数循环,当循环了一定的次常见的是计数循环,当循环了一定的次数后,就停止循环。数后,就停止循环。 在单片机中,一般用一个工作寄存器在单片机中,一般用一个工作寄存器Rn作为计数器,对该计数器赋初值作
17、为循作为计数器,对该计数器赋初值作为循环次数。每循环一次,计数器的值减环次数。每循环一次,计数器的值减1,即修改循环控制变量,当计数器的置件即修改循环控制变量,当计数器的置件为为0时,就停止循环。时,就停止循环。15:564、循环控制部分 根据循环结束条件,判断是否结束循环。根据循环结束条件,判断是否结束循环。 89C51可采用可采用DJNZ指令来自动修改控制变量指令来自动修改控制变量并能结束循环。并能结束循环。15:56置初值循环体循环修改循环控制退出循环未完完(a)置初值循环体循环修改循环控制退出循环未完完(b)图4-2 循环组织方式流程图15:56程序设计举例程序设计举例一 简单程序设计
18、举例二 分支程序三 循环程序四 子程序设计举例五 代码转换程序设计举例六 运算类程序设计举例BACK15:56一、一、 简单程序设计举例简单程序设计举例例1 :拆字。将片内RAM 20H单元的内容拆成两段,每段四位。并将它们分别存入21H与22H单元中。程序如下:解:解: ORG ORG 2000H2000HSTARTSTART:MOVMOVA A,20H20H ;(;(20H20H)A AANLANLA A,#0FH #0FH ;A#0FHAA#0FHAMOVMOV21H21H,A A ;(;(A A)(21H21H)MOVMOVA A,20H20H ;(;(20H20H)A ASWAPSW
19、APA A, ;A A0 03 3 AA4 47 7ANLANLA A,#0FH #0FH ;A#0FHAA#0FHAMOVMOV22H22H,A A ;(;(A A)(22H22H)SJMPSJMP$ $15:56例2:16位数求补。设16位二进制数在R1R0中,求补结果存于R3R2中。解:解:ORGORG1000H1000HSTART:START: MOVMOVA A,R0R0CPLCPLA AADDADDA A,#01H#01HMOVMOVR2R2,A AMOVMOVA A,R1R1CPLCPLA AADDC ADDC A A,#00H#00HMOV MOV R3R3,A ASJMPSJ
20、MP$ $Back15:56例1:片内RAM ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入RES单元。程序如下:二、二、 分支程序分支程序 解:解: ONE DATA 22H ONE DATA 22H; ;定义定义ONEONE TWO DATA 23H TWO DATA 23H;定义;定义TWOTWO RES DATA 30H RES DATA 30H;定义;定义RESRESBackMOV A,ONESTART:CJNE A,TWO,BIGSJMP STOREBIG:JCSTOREMOV A,TWOSTORE:MOV RES,A15:56三三 、循环程序、循环程序例1:数据块
21、传送。将片内RAM 20H单元开始的10个字节,传送到片外RAM 1000H单元开始的单元中去。 解:程序如下:解:程序如下:ORGORG0800H0800HSTART:START: MOV MOV R0R0,#20H#20H MOVMOVDPTR,#1000HDPTR,#1000HMOVMOVR7,#0AHR7,#0AHLOOP:LOOP: MOVMOVA,R0A,R0MOVXMOVXDPTR,ADPTR,AINCINCR0R0INCINCDPTRDPTRDJNZDJNZR7,LOOPR7,LOOP SJMPSJMP$ $Back15:56三三 、循环程序、循环程序例2:统计字串长度。内存从
22、STRING开始有一字串,该字串以$(ASCII码为24H)结束,试统计该字串长度,结果存于NUM单元中 解:程序如下:ORG0800H NUMDATA 20H STRINGDATA 21H START:CLRAMOV R0,#STRING LOOP:CJNER0,#24H,NEXT SJMP COMP NEXT:INCA INCR0SJMPLOOP COMP:MOV NUM,ASJMP$Back15:56四、四、 子程序设计举例子程序设计举例例1:用查表法编一子程序,获取数据表中第(40H)个数据。入口:待转换数在(40H)出口:转换后的数(40H) 解:解:ORGORG1000H1000H
23、TAB: TAB: DBDB30H,31H,32H,33H,34H,35H,36H,37H,30H,31H,32H,33H,34H,35H,36H,37H, 38H,39H38H,39HSUB1SUB1: MOV MOV A A,40H40H MOV MOV DPTRDPTR,#TAB#TABMOVC MOVC A A,A+DPTRA+DPTRMOV MOV 40H,A40H,ARETRET若将30H单元内容为序号查表,利用SUB1子程序。 ORG ORG 2000H 2000H MAIN: MAIN: MOVMOV 40H 40H,30H30HLCALL SUB1LCALL SUB1MOV
24、MOV 30H 30H,40H40HSJMPSJMP $ $Back15:56五、五、 代码转换程序设计举例代码转换程序设计举例例:片外例:片外RAM2000H单元中有数字(单元中有数字(0-9),编一子程序将其转换成),编一子程序将其转换成ASCII码字符。码字符。ORGORG0100H0100HBAS2:BAS2: MOV MOV DPTRDPTR,#2000H#2000HMOVX MOVX A A,DPTRDPTRADD ADD A,#30HA,#30HMOVXMOVXDPTR,ADPTR,ARET 15:56六六 、运算类程序设计举例、运算类程序设计举例例1:片内RAM30H单元开始有
25、10个字节的二进制数。编一子程序,求它们的和。(和256)将和存入20H单元中。解:方法解:方法1 1ORG ORG 1000H1000HASUB1:ASUB1: MOV MOV R0R0,#30H#30HCLRCLRA AMOV MOV R7R7,#0AH#0AHCLRCLRC CLOOPLOOP: ADDCADDCA A,R0R0INCINCR0R0DJNZ DJNZ R7R7,LOOPLOOPMOV MOV 20H20H,A ARETRET方法方法2 2ORGORG2000H2000HASUB2:ASUB2: MOVMOVR0R0,#30H#30HMOVMOVA A,R0R0MOVMOVR7R7,#09#09CLRCLRC CLOOPLOOP: INCINCR0R0ADDC ADDC A A,R0R0DJNZ DJNZ R7R7,LOOPLOOPMOVMOV20H20H,A ARETRET15:56Back七、延时程序设计举例七、延时程序设计举例查表注意到执行DJNZ指令要用两个机器周期 执行MOV Rn,#data要一个机器周期 执行MOV dir,#data要两个机器周期因此可以精确算出程序执行时间。例:以机器周期为单位,计算以下程序的执行时间。 MOV R7,#64H LOOP: MOV R6,#0FAH DJNZ R6,$
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业计划书中的内部培训与员工发展计划考核试卷
- 林业与农村物联网建设考核试卷
- 炼铁过程中的环境保护措施考核试卷
- 城市轨道交通与生态环境考核试卷
- 2017-2022年中国会展行业运营格局现状及十三五投资战略分析报告(目录)
- 2024-2025学年江西省南丰县某中学高三(上)一轮复习联考物理试卷(一)(含答案)
- DB11∕T 1772-2020 地源热泵系统评价技术规范
- 语文研讨课件教学课件
- 新员工入行培训方案
- 区分左右课件教学课件
- 《会计平衡公式》教案
- 除尘器安装专业监理实施细则
- 八年级黄金矩形(数学活动)ppt课件
- 销售技巧个顶尖电梯销售技巧
- 《幼儿园卫生保健后勤材料资料》幼儿园保健医生每日检查工作记录表
- 葡萄糖生产教程
- 需求价格弹性案例分析
- 企业内部通信系统的设计与实现 计算机论文
- 重大决策合法性审查表.doc
- 信号集中监测系统(完整版)
- 复古风同学聚会邀请函.doc
评论
0/150
提交评论