第4章汇编语言程序设计及编程实例课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第4章汇编语言程序设计及编程实例课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 编程 实例 课件
- 资源描述:
-
1、4.1 编程的步骤、方法和技巧4.1.1 4.1.1 编程的步骤编程的步骤4.1.2 4.1.2 编程的方法和技巧编程的方法和技巧4.1.1 编程的步骤n一、分析问题一、分析问题n二、确定算法二、确定算法n三、画程序流程图三、画程序流程图n四、编写程序四、编写程序一、分析问题一、分析问题n对需要解决的问题进行分析,以求对问题由正确的对需要解决的问题进行分析,以求对问题由正确的理解。如,理解。如,n解决问题的任务是什么?解决问题的任务是什么?n工作过程?工作过程?n现有的条件,已知数据,对运算的精度和速度方面现有的条件,已知数据,对运算的精度和速度方面的要求?的要求?n设计的硬件结构是否方便编程
2、?设计的硬件结构是否方便编程?二、确定算法二、确定算法n算法算法是如何将实际问题转化成是如何将实际问题转化成程序模块程序模块来处理。来处理。n在编程以前,先要对几种不同的算法进行分析、比在编程以前,先要对几种不同的算法进行分析、比较,找出最适宜的算法较,找出最适宜的算法三、画程序流程图三、画程序流程图n程序流程图是使用各种图形、符号、有向线段等来说明程序程序流程图是使用各种图形、符号、有向线段等来说明程序设计过程的一种直观的表示。设计过程的一种直观的表示。n流程图步骤分得越细致,编写程序是也越方便。流程图步骤分得越细致,编写程序是也越方便。n画流程图是程序结构设计是采用的一种重要手段。画流程图
3、是程序结构设计是采用的一种重要手段。n一个系统软件有总的流程图(主程序框图)和局部的流程图。一个系统软件有总的流程图(主程序框图)和局部的流程图。n流程图常采用的图形和符号。流程图常采用的图形和符号。椭圆框椭圆框或桶形框或桶形框:表示程序的开始或结束。矩形框矩形框:表示要进行的工作。:表示要进行的工作。菱形框菱形框:表示要判断的事情,菱形框内:表示要判断的事情,菱形框内的表达式表示要判断的内容。的表达式表示要判断的内容。圆圈圆圈:表示连接点:表示连接点指向线指向线:表示程序的流向:表示程序的流向四、编写程序四、编写程序n用用89C51汇编语言编写的源程序行(一条语句)包汇编语言编写的源程序行(
4、一条语句)包括四个部分,也叫四个字段:括四个部分,也叫四个字段:标号标号:操作码操作码操作数操作数;注释注释n 每个字段之间要用分隔符分隔,而每个字段内部不能使用分每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格隔符。可以用作分隔符的符号:空格“ ”、冒号、冒号“:”、逗号逗号“,”、分号、分号“;”等。等。例:例:LOOP:MOV A,#00H;立即数;立即数00HA标号标号n标号标号是用户定义的是用户定义的符号地址符号地址。n一条指令的标号是该条指令的符号名字,标号的值是汇编这一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。条指令
5、时指令的地址。n标号由标号由以英文字母开始以英文字母开始的的18个个字母字母或或数字数字组成,以组成,以冒号冒号“:”结尾。结尾。n标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存放该指令目标码第一字节的存储单元的地址赋给该标号,所放该指令目标码第一字节的存储单元的地址赋给该标号,所以,标号又叫指令标号。以,标号又叫指令标号。操作码操作码n操作码操作码是必不可少的。是必不可少的。n它用一组字母符号表示指令的操作码。在它用一组字母符号表示指令的操作码。在89C51中,中,由由89C51的的指令助记符指令助记符组成。组成。操作数操作数n汇编语
6、言指令可能要求或不要求操作数,所以这一字段可能有也可能没汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没有。有。n若有两个操作数,操作数之间用逗号若有两个操作数,操作数之间用逗号“,”分开。分开。n操作数包括的内容有:操作数包括的内容有:n(1)工作寄存器:由)工作寄存器:由PSW.3和和PSW.4规定的当前工作寄存器区中的规定的当前工作寄存器区中的R0R7。n(2)特殊功能寄存器:)特殊功能寄存器:21个个SFR的名字。的名字。n(3)标号名:赋值标号)标号名:赋值标号由汇编指令由汇编指令EQU等赋值的标号;指令标号等赋值的标号;指令标号指令标号指示的指令的第一字节地址是该标号
7、的值。指令标号指示的指令的第一字节地址是该标号的值。n(4)常数:可用二进制()常数:可用二进制(B)、十进制、十六进制()、十进制、十六进制(H),若常数以字),若常数以字符开头,前面加符开头,前面加0。n(5)$:用来表示程序计数器的当前值。:用来表示程序计数器的当前值。n(6)表达式:汇编时,计算出表达式的值填入目标码。)表达式:汇编时,计算出表达式的值填入目标码。注释注释n注释部分不是汇编语言的功能部分注释部分不是汇编语言的功能部分,只是用语增加,只是用语增加程序的可读性。程序的可读性。n良好的注释是汇编语言程序编写中的重要组成部分。良好的注释是汇编语言程序编写中的重要组成部分。4.1
8、.2 编程的方法和技巧一、模块化的程序设计方法一、模块化的程序设计方法二、编程技巧二、编程技巧一、模块化的程序设计方法一、模块化的程序设计方法1、程序功能模块化的优点、程序功能模块化的优点2、划分模块的原则、划分模块的原则1、程序功能模块化的优点、程序功能模块化的优点n单个模块结构的程序功能单一,易于编写、调试和修改。单个模块结构的程序功能单一,易于编写、调试和修改。n便于分工,从而可使多个程序员同时进行程序的编写和调试便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。工作,加快软件研制进度。n程序可读性好,便于功能扩充和版本升级。程序可读性好,便于功能扩充和版本升级
9、。n对程序的修改可局部进行,其它部分可以保持不变。对程序的修改可局部进行,其它部分可以保持不变。n对于使用频繁的子程序可以建立子程序库,便于多个模块调对于使用频繁的子程序可以建立子程序库,便于多个模块调用。用。2、划分模块的原则、划分模块的原则n每个模块每个模块应具有独立的功能,能产生一个应具有独立的功能,能产生一个明确的结果明确的结果,即单,即单模块的功能高内聚性。模块的功能高内聚性。n模块之间的模块之间的控制耦合控制耦合应尽量简单,应尽量简单,数据耦合数据耦合应应尽量少尽量少,即模,即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方块间的低耦合性。控制耦合是指模块进入和退出的条件及方
10、式,数据耦合是指模块间的信息交换方式、交换量的多少及式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。交换频繁程度。n模块长度适中。模块长度适中。20条条100条条的范围较合适。的范围较合适。二、编程技巧二、编程技巧1、尽量采用、尽量采用循环结构和子程序循环结构和子程序。2、尽量、尽量少用无条件转移少用无条件转移指令。指令。3、对于通用的子程序,考虑到其通用性,除了用于存放子程、对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即应压入堆栈(返回前
11、再弹出),即保护现场保护现场。4、在、在中断处理程序中断处理程序中,除了要中,除了要保护保护处理程序中用到的处理程序中用到的寄存器寄存器外,还要保护外,还要保护标志寄存器。标志寄存器。5、用累加器传递入口参数或返回参数比较方便,在、用累加器传递入口参数或返回参数比较方便,在子程序子程序中,中,一般不必把累加器内容压入堆栈一般不必把累加器内容压入堆栈。4.2 汇编语言源程序的编辑和汇编4.2.1 4.2.1 源程序编辑源程序编辑4.2.2 4.2.2 源程序的汇编源程序的汇编4.2.3 4.2.3 伪指令伪指令4.2.1 源程序编辑n在微型计算机上,借助编辑软件,编写或修在微型计算机上,借助编辑
12、软件,编写或修改汇编语言源程序。如行编辑或屏幕编辑软改汇编语言源程序。如行编辑或屏幕编辑软件。件。4.2.2 源程序的汇编n汇编:汇编:将汇编语言源程序转换为将汇编语言源程序转换为机器码机器码表示的表示的目目标程序标程序的过程。对单片机有:的过程。对单片机有: 一、手工汇编一、手工汇编 二、机器汇编二、机器汇编 三、反汇编三、反汇编一、手工汇编一、手工汇编n通过手工方式查指令编码表,逐个把助记符指令通过手工方式查指令编码表,逐个把助记符指令“翻译翻译”成机器码,然后把得到的机器码程序键入成机器码,然后把得到的机器码程序键入单片机,进行调试和运行。单片机,进行调试和运行。n手工汇编的缺点:手工汇
13、编的缺点: 1、偏移量的计算容易出错、偏移量的计算容易出错 2、程序的修改会引起后面指令地址的变化,转移、程序的修改会引起后面指令地址的变化,转移指令的偏移量也要重新计算。指令的偏移量也要重新计算。二、机器汇编二、机器汇编n机器汇编是在计算机上使用交叉汇编程序进行源程机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。汇编工作由机器自动完成,最后得到以序的汇编。汇编工作由机器自动完成,最后得到以机器码表示的目标程序。机器码表示的目标程序。三、反汇编三、反汇编n将二进制机器语言程序翻译成汇编语言程序的过程将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。称反汇编。n汇编和反汇编的过程如图汇
14、编和反汇编的过程如图4-3所示。所示。源程序(汇编语言)目标码(机器语言)汇编(汇编程序)反汇编(汇编程序)图4-3 汇编和反汇编过程4.2.3 伪指令n伪指令伪指令不是真正的指令,不是真正的指令,无对应的机器码无对应的机器码,在汇编,在汇编时时不产生目标程序不产生目标程序,只是用来对,只是用来对汇编过程汇编过程进行某种进行某种控制控制。ORG 汇编起始命令汇编起始命令n格式:格式:ORG 16位地址位地址n功能:规定该伪指令后面程序的汇编地址,即汇编后生成目功能:规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的标程序存放的起始地址起始地址。例如:。例如: ORG 2000HSTAR
15、T:MOV A,#64H n规定了规定了START的地址是的地址是2000H,又规定了汇编后的第一条指,又规定了汇编后的第一条指令码从令码从2000H开始存放。开始存放。END 汇编结束指令汇编结束指令n格式:格式:ENDn功能:通知汇编程序结束汇编。在功能:通知汇编程序结束汇编。在END之后所有的之后所有的汇编指令均不予以处理。汇编指令均不予以处理。EQU 赋值命令赋值命令n格式:字符名称格式:字符名称 EQU 项(数或汇编符号)项(数或汇编符号)n功能:把功能:把“项项”赋给赋给“字符名称字符名称”。n注意:注意:字符名称不等于标号字符名称不等于标号(其后没有冒号);其中的项,(其后没有冒
16、号);其中的项,可以是数,也可以是汇编符号。可以是数,也可以是汇编符号。EQU赋值过的符号名可以用赋值过的符号名可以用作作数据数据、代码地址代码地址、位地址位地址或或一个立即数一个立即数。可以是。可以是8位的,位的,也可以是也可以是16位的。位的。n例如:例如:EQU 赋值命令赋值命令例例1:AA EQU R1 MOV A,AA;AA代表工作寄存器代表工作寄存器R1例例2: A10 EQU 10DELY EQU 07EBH MOV A,A10;A10作为片内的一个直接地址作为片内的一个直接地址 LCALL DELY;DELY作为一个作为一个16位子程序的入口地址位子程序的入口地址DATA 数据
17、地址赋值命令数据地址赋值命令n格式:字符名称格式:字符名称 DATA 表达式表达式n功能:与功能:与EQU类似,但有以下差别:类似,但有以下差别:n1、EQU定义的字符名定义的字符名必须先定义后使用必须先定义后使用,而,而DATA定义的字定义的字符名符名可以后定义先使用可以后定义先使用。n2、用、用EQU伪指令可以把一个汇编符号赋给一个名字,而伪指令可以把一个汇编符号赋给一个名字,而DATA只能把只能把数据赋给字符名数据赋给字符名。n3、DATA语句可以把一个语句可以把一个表达式的值赋表达式的值赋给字符名称,其中的给字符名称,其中的表达式应是可求值的。表达式应是可求值的。DATA伪指令在程序中
18、用来定义伪指令在程序中用来定义数据数据地址地址DB 定义字节命令定义字节命令n格式:格式:DB(项或项表)(项或项表)n功能:通知汇编程序从当前功能:通知汇编程序从当前ROM地址开始,保留一地址开始,保留一个字或字节串的存储单元,并存入个字或字节串的存储单元,并存入DB后的数据。后的数据。n注意:项或项表可以是一个字节,用逗号隔开的字注意:项或项表可以是一个字节,用逗号隔开的字节串或括在节串或括在单引号中的单引号中的ASCII字符串字符串。n例如:例如:DB 定义字节命令定义字节命令 ORG 2000H DB 0A3HLIST:DB 26H,03H STR:DB ABC 经汇编后(经汇编后(2
19、000H)=A3H, (2001H)=26H, (2002H)=03H, (2003H)=41H, (2004H)=42H, (2005H)=43H,(,(41H,42H,43H分别为分别为A,B,C的的ASCII码)码)DW 定义字命令定义字命令n格式:格式:DW 16位数据项或项表位数据项或项表n功能:把功能:把DW后的后的16位数据项或项表从当前地址连位数据项或项表从当前地址连续存放。每项数值为续存放。每项数值为16位二进制数,位二进制数,高高8位先放,位先放,低低8位后存放位后存放。DW用于定义一个用于定义一个地址表地址表。n例如:例如:DW 定义字命令定义字命令 ORG 1500HT
20、ABLE:DW 7234H,8AH,10H 经汇编后(经汇编后(1500H)=72H, (1501H)=34H, (1502H)=00H, (1503H)=8AH, (1504H)=00H, (1505H)=10H,DS 定义存储空间命令定义存储空间命令n格式:格式:DS 表达式表达式n功能:在汇编时,从指定地址开始保留功能:在汇编时,从指定地址开始保留DS之后表达式的值所之后表达式的值所规定的存储单元以备后用。规定的存储单元以备后用。n例如:例如:ORG 1000HDS 08HDB 30H,8AH汇编后,从汇编后,从1000H保留保留8个单元,然后从个单元,然后从1008H按按DB命令给内命
21、令给内存赋值,即(存赋值,即(1008H)=30H (1009H)=8AHBIT 位地址符号命令位地址符号命令n格式:字符名格式:字符名 BIT 位地址位地址n功能:把功能:把BIT后的位地址值赋给字符名。其中字符名不是标后的位地址值赋给字符名。其中字符名不是标号,其后没有冒号,但字符名是必须的。号,其后没有冒号,但字符名是必须的。n例如:例如:nA1 BIT P1.0nA2 BIT 02Hn汇编后,汇编后,P1口第口第0位的位的位地址位地址90H就赋给了就赋给了A1,而,而A2的值则的值则为为02H。4. 3 汇编语言程序的基本结构一、顺序程序一、顺序程序二、分支程序二、分支程序三、循环程序
22、三、循环程序一、顺序程序一、顺序程序n顺序程序是最简单的程序结构,即顺序结构。顺序程序是最简单的程序结构,即顺序结构。n程序程序按顺序一条一条按顺序一条一条地执行指令地执行指令。一 简单程序设计举例P95P95页例页例4-34-3 :拆字。将片内:拆字。将片内RAM 20HRAM 20H单元的内容单元的内容拆成两段,每段四位。并将它们分别存入拆成两段,每段四位。并将它们分别存入21H21H与与22H22H单元中。程序如下:单元中。程序如下:Back例如例如 :(:(20H20H)=56H,=56H,程序运行后程序运行后(21H21H)=06H,(22H)=05H=06H,(22H)=05H (
23、P93)例)例4-1:双字节无符号数加法。:双字节无符号数加法。 设被加数存放在内部设被加数存放在内部RAM的的51H、50H单元,加数单元,加数存放在内部存放在内部RAM的的61H、60H单元,相加的结果存单元,相加的结果存放在内部放在内部RAM的的51H、50H单元,进位存放在位寻单元,进位存放在位寻址区的址区的00H位中。位中。 程序:程序:MOV R0,50H ;被加数的低字节地址;被加数的低字节地址;2B,2usMOV R1,60H ;加数的低字节地址;加数的低字节地址 ;2B,2usMOV A,R0 ;取被加数低字节;取被加数低字节;1B,1usADD A,R1 ;加上加数低字节;
24、加上加数低字节;1B,1usMOV R0,A ;保存低字节相加结果;保存低字节相加结果;1B,1usINC R0 ;指向被加数高字节;指向被加数高字节;1B,1usINC R1 ;指向加数高字节;指向加数高字节;1B,1usMOV A,R0 ;取被加数高字节;取被加数高字节;1B,1usADDC A,R1;加数高字节(带进位加);加数高字节(带进位加)1B,1usMOV R0,A ;存高字节相加结果;存高字节相加结果;1B,1usMOV 00H,C ;保存进位;保存进位 ;2B,2us n例1: 有一有一变量变量存放在片存放在片内内RAM的的20H单元,其取单元,其取值范围为:值范围为:00H
25、05H。要求编制一段程序,根据要求编制一段程序,根据变量值求其平方值,并存变量值求其平方值,并存入片内入片内RAM的的21H单元。单元。#2000H DPTR(20H) A(A+DPTR) AA 21H开始结束程序1:MOV A,20HMOV B,AMUL ABMOV 21H,An程序如下:程序如下: ORG 1000HSTART:MOV DPTR,#2000H MOV A,20H MOVC A,A+DPTR MOV 21H,A SJMP $ ORG 2000HTABLE:DB 00,01,04,09,16,25 END#2000H DPTR(20H) A(A+DPTR) AA 21H开始结束
展开阅读全文