第五章汇编程序设计PPT课件_第1页
第五章汇编程序设计PPT课件_第2页
第五章汇编程序设计PPT课件_第3页
第五章汇编程序设计PPT课件_第4页
第五章汇编程序设计PPT课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 1机器语言机器语言2 2汇编语言汇编语言3 3高级语言高级语言汇编语言是一种用助记符来表示的面向机器的程序设计语言。不同的机器所使用的汇编语言一般是不同的。高级语言是一种面向过程而独立于计算机硬件结构的通用计算机语言。机器语言是用二进制代码表示指令和数据的最原始的程序设计语言。计算机能够立即识别并执行这种语言,响应速度最快。但不易看懂,不便记忆。第1页/共45页用汇编语言编写的源程序,在交由计算机执行之前,必须将它翻译成机器语言程序。这一翻译过程称为汇编。源程序(汇编语言程序)汇编程序目的程序(机器语言程序)第2页/共45页1汇编语言源程序的格式汇编语言源程序的格式如下:标号: 操作码 操

2、作数 ;注释标号段:1、标号是用户设定的一个符号,表示存放指令或数据的存储单元地址。2、标号是由字母开始的18个字母或数字串组成。注意,不能用指令助记符、伪指令或寄存器名来作标号名。操作码段是指令或伪指令的助记符,用来表示指令的性质。操作数段给出的是参加运算(或其他操作)的数据或数据的地址。 注释段为便于今后阅读和交流,对本指令执行目的和所起作用所做的说明。 第3页/共45页2、伪指令、伪指令这些指令不属于指令系统,不产生这些指令不属于指令系统,不产生机器代码,因此称为伪指令或汇编指令。机器代码,因此称为伪指令或汇编指令。利用伪指令告诉汇编程序如何进行利用伪指令告诉汇编程序如何进行汇编,同时它

3、也为人们编程或修改程序提汇编,同时它也为人们编程或修改程序提供了方便。供了方便。因不同的编程软件,伪指令的格式因不同的编程软件,伪指令的格式与用法可能会有一些变化,请注意。与用法可能会有一些变化,请注意。第4页/共45页2、伪指令、伪指令1)ORG确定目的程序在程序存储器中存放的起确定目的程序在程序存储器中存放的起始地址始地址。 ORG 表达式(exp)exp必须是16位的地址值2)END用在程序的末尾,表示程序已结束。汇用在程序的末尾,表示程序已结束。汇编程序对编程序对END以后的指令不再汇编。以后的指令不再汇编。 第5页/共45页2、伪指令、伪指令3)DB(Define Byte)定义字节

4、,从指定单元开始定义定义字节,从指定单元开始定义(存储存储)若干个字节的数值或若干个字节的数值或ASCII码字符。码字符。DB 字节常数或ASCII字符4)DW(Define Word)定义字,从指定单元开始定义定义字,从指定单元开始定义(或存储或存储)若干个字的数据或若干个字的数据或ASCII码字符,注意:高位码字符,注意:高位先行。先行。 DW 字常数或ASCII字符第6页/共45页2、伪指令、伪指令5)EQU(Equate) 它的作用是把操作数段中的地址或数据赋它的作用是把操作数段中的地址或数据赋值给标号字段中的标号。值给标号字段中的标号。代号标号EQU地址或数据 6)BIT位地址符号,

5、把位地址赋予所规定的字符位地址符号,把位地址赋予所规定的字符名称。名称。 位地址符号名称BIT 位地址 第7页/共45页2、伪指令、伪指令7)DATA定义标号数值,给标号段中的标号赋以定义标号数值,给标号段中的标号赋以数值。数值。字符名称 DATA 表达式 DATA与与EQU的区别:的区别: DATA可先使用后声明,并登记在符号表中可先使用后声明,并登记在符号表中 EQU 不登记在符号表中,必须先声明才能不登记在符号表中,必须先声明才能 使用使用第8页/共45页1)熟悉与分析工作任务,明确其要求和要达到的工作目的、技术指标等。2)确定解决问题的计算方法和工作步骤。3)画工作流程图。 (其图形符

6、号规定均同于高级语言流程图)4)分配内存工作单元,确定程序与数据区存放地址。5)按流程图编写源程序。6)上机调试、修改及最后确定源程序。 第9页/共45页编制程序流程图:是指用各种图形、符号、指向线等来说明程是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:序设计的过程。国际通用的图形和符号说明如下: 椭圆框:开始和结束框,在程序的开始和结束开始和结束框,在程序的开始和结束时使用。 矩形框:处理框,表示要进行的各种操作。处理框,表示要进行的各种操作。 菱形框:判断框,表示条件判断,以决定程序的流向。判断框,表示条件判断,以决定程序的流向。 流向线:流程线,表示程

7、序执行的流向。流程线,表示程序执行的流向。 圆 圈:连接符,表示不同页之间的流程连接。连接符,表示不同页之间的流程连接。各种几何图形符号如下图所示各种几何图形符号如下图所示: :第10页/共45页是一种最简单、最基本的程序是一种最简单、最基本的程序(也称为简单程序也称为简单程序)。特点特点: 按编写的顺序依次往下执行每按编写的顺序依次往下执行每一条指令,直到最后一条。它一条指令,直到最后一条。它能够解决某些实际问题,或成能够解决某些实际问题,或成为复杂程序的子程序。为复杂程序的子程序。第11页/共45页1、压缩BCD码的概念2、ASCII码09为30H39H。思路:采用把BCD数除以10H的方

8、法,除后相当于把此数右移了4位,刚好把两个BCD码分别移到A、B的低4位,然后再各自与30H相“或”即变为ASCII码。 例例1 将将20H单元的两个单元的两个BCD码拆开并变成码拆开并变成ASCII码,存入码,存入21H、22H单元。单元。第12页/共45页例例1 将将20H单元的两个单元的两个BCD码拆开并变成码拆开并变成ASCII码,存入码,存入21H、22H单元。单元。思路2:采用先把20H中低4位BCD码交换出来加以转换、存放,然后再把高4位BCD码交换至低4位加以转换、存放。 第13页/共45页例例2 设有两个设有两个4位位BCD码,分别存放在码,分别存放在23H、22H单单元和元

9、和33H、32H单元中,求它们的和并送入单元中,求它们的和并送入43H、42H单元中去(以上均为低位在低字节,高位在单元中去(以上均为低位在低字节,高位在高字节)。高字节)。 由于本题中BCD码是分放在高、低位两个字节中,因而要从低位字节开始相加,且每次进行加法运算,需要进行一次BCD码调整。 第14页/共45页例例3 将片内将片内RAM 30H单元中的压缩单元中的压缩BCD码转换码转换成二进制数送到片内成二进制数送到片内RAM 40H单元中。单元中。 两位压缩BCD码转换成二进制数的算法为:(a1a 0)BCD=10a1a0 程序流程图如右图所示。第15页/共45页特点:特点: 程序中含有可

10、以重复执行的程序段程序中含有可以重复执行的程序段 (循环(循环体),采用循环程序可以有效地体),采用循环程序可以有效地 缩短程序,减少缩短程序,减少程序占用的内存空间,使程序的结构紧凑、可读程序占用的内存空间,使程序的结构紧凑、可读性好。性好。第16页/共45页循环结构的程序一般包括以下几部分。1循环初态循环初态循环初态(或称初始条件)是设置循环过程中工作单元的初始值。例如,设置循环次数计数器、地址指针初值、存放和数的单元初值等。2循环体循环体重复执行的程序段部分称循环体,完成主要的计算或操作任务,同时也包括对地址指针的修改。3循环控制部分循环控制部分该部分用于控制循环的执行和结束。循环次数或

11、条件等判断。第17页/共45页 循环程序的结构:循环程序的结构:(1 1)先循环处理,后循环控制(即先处理后控制)。如左下图所示。)先循环处理,后循环控制(即先处理后控制)。如左下图所示。 (2 2)先循环控制,后循环处理(即先控制后处理)。如右下图所示。)先循环控制,后循环处理(即先控制后处理)。如右下图所示。 第18页/共45页单重循环与多重循环定义:定义:循环体内部不包括其他循环的程序称为 单重循环程序。 若循环中还包括有循环,称为多重循环(或循环嵌套)外循环外循环中循环中循环内循环内循环外循环外循环内循环内循环外循环外循环内循环内循环内循环内循环(a)嵌套正确)嵌套正确(b)嵌套正确)

12、嵌套正确(c)交叉不正确)交叉不正确第19页/共45页例例4 已知片内已知片内RAM 30H3FH单元中存放了单元中存放了16个个二进制无符号数,编制程序求它们的累加和,并将其二进制无符号数,编制程序求它们的累加和,并将其和数存放在和数存放在R4, R5中。中。每次求和的过程相同,可以用循环程序实现。16个二进制无符号数求和,循环程序的循环次数应为16次(存放在R2中),它们的和放在R4, R5中(R4存高8位,R5存低8位)。程序流程图如右图所示。第20页/共45页例例5 从从22H单元开始有一无符号数据块,其长度在单元开始有一无符号数据块,其长度在20H单元。求出数据块中最大值,并存入单元

13、。求出数据块中最大值,并存入21H单元。单元。1、先设一个最小值零2、逐个取出队列中的数与最小值相比。3、如果大于最小值,则此值与最小值交换后再继续比较4、如果小于或等于最小值,则恢复原最小值(因为使用减法指令比较后,还需恢复原值)再继续比较。当所有数据均比较完之后,则可得到最大值。 第21页/共45页例例6:80C51单片机使用的晶振频率为单片机使用的晶振频率为6MHZ,设计一软件延时程序,延时时间为设计一软件延时程序,延时时间为10ms。延时时间1+1+(1+1+2)*125+2*10+2*2 s 10066 s1MOV R1,#101DL2: MOV R0,#1251DL1: NOP1N

14、OP2DJNZ R0 ,DL12DJNZ R1, DL22RET延时程序与MCS-51指令执行时间(循环次数)和晶振频率fOSC有关。晶振确定之后,则关键在于确定循环次数。当fOSC=6MHz时,机器周期为2s,执行一条DJNZ指令需要2个机器周期,时间为4s。 10ms 4s255,因此单重循环程序无法实现,可采用双重循环的方法编写10ms延时程序。第22页/共45页特点:特点:根据不同的条件,根据不同的条件,确定程序的走向。它主要靠确定程序的走向。它主要靠条件转移指令、比较转移指条件转移指令、比较转移指令和位转移指令来实现。分令和位转移指令来实现。分支程序的结构如右图所示支程序的结构如右图

15、所示分支程序的设计要点如下:分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。)在转移的目的地址处设定标号。第23页/共45页1无条件转移程序转移方向由设计者事先安排,与已执行程序的结果无关。使用时只需给出正确的转移目标地址或偏移量即可。2条件转移根据已执行程序对标志位、累加器或内部RAM某位的影响结果,决定程序的走向,形成各种分支。3散 转根据某种已输入的“或”运算的结果,使程序转向各个处理程序中去。 逐次比较和算法处理的方法。80C51单片机专门的散

16、转指令,可以较方便地实现散转功能。第24页/共45页22110810154115XXYXXX例例1 设设5AH单元中有一变量单元中有一变量X,请编写计算下述函数式的,请编写计算下述函数式的程序,结果存入程序,结果存入5BH单元。单元。根据题意首先计算X2并暂存于R1中,因为X2最大值为225,可只用一个寄存器,然后根据X值的范围,决定Y的值。 MOV R0,A SJMP L4L2: MOV A,R1 ;10的处理的处理 CLR C SUBB A,#01 ;X10,yX21 MOV R0,A L4:MOV 5BH,R0 ;存结果;存结果 SJMP END第25页/共45页散转程序:散转程序:是一

17、种并行分支程序(多分是一种并行分支程序(多分 支支程序),它是根据某种输入或运算结果,分别程序),它是根据某种输入或运算结果,分别转向各个处理程序。在转向各个处理程序。在MCS-51中用中用JMP A+DPTR指令来实现程序的散转。转移的地指令来实现程序的散转。转移的地址最多为址最多为256个。其结构如图下所示。个。其结构如图下所示。第26页/共45页 散转程序的设计可采用下面两种基本方法:(1)数据指针DPTR固定,根据累加器A的内容,程序转入相应的分支程序中去。(2)累加器A清“0”,根据数据指针DPTR的值,决定程序转向目的地址。DPTR的值可用查表或其他方法获得。 第27页/共45页1

18、、采用转移指令表 例2 根据R3的内容,转向各个操作程序。 偏移量2 ,为什么?若采用LJMP呢?第28页/共45页2、采用转向地址表 例3 根据R2的内容,转向各个操作程序。 第29页/共45页1、单字节查表第30页/共45页2、 多字节Y值的查表程序例2某仪器的键盘程序中,其键值与对应程序入口地址的关系如下:第31页/共45页 是一种具有某种功能的程序段(如多字节乘法、是一种具有某种功能的程序段(如多字节乘法、数制编码转换等),其资源需要为所有调用程序共享。数制编码转换等),其资源需要为所有调用程序共享。采用子程序可以达到简化程序结构的作用采用子程序可以达到简化程序结构的作用。1、定义子程

19、序名,一般有一定的提示作用2、参数传递3、保护现场与恢复现场4、通用性通过寄存器、堆栈传递参数通过堆栈、工作寄存器保护现场第32页/共45页1、调用过程:断点入栈;调用子程序入口地址;2、返回过程:断点恢复第33页/共45页嵌套深度问题与堆栈区安全第34页/共45页例1 编程计算 设a、b 分别存于内部RAM 的30H、31H单元,结果C存于内部RAM的40H单元。说明: 这个问题中,计算某数的平方可以用子程序 来实现,两次调用该子程序,并求和便得到所需结果。NoImage22bac第35页/共45页参数传递:主程序中,将某数存放到累加器A中,作为子程序的入口参数;子程序中,将所求数的平方值存

20、放在累加器A中,作为出口参数(即主程序的返回值)。子程序的入口参数:A中存放某数的值。子程序的出口参数:A中存放所求数的平方。 子程序的占用资源:A。子程序如下:第36页/共45页第37页/共45页请同学们自已学习各例题,并试运行,仔细观察运行结果。第38页/共45页排序程序设计(冒泡法)排序程序设计(冒泡法) 例:设51单片机内部RAM起始地址为30H的数据块中共存有64个无符号数,编程使其按从小到大的顺序排列。解:设设64个无符号数在数据块中的顺序为:个无符号数在数据块中的顺序为:e64, e63, e2, e1,使他们从小到大顺序排列的方法很多,现以冒泡法为例进行介绍。使他们从小到大顺序

21、排列的方法很多,现以冒泡法为例进行介绍。 冒泡法又称两两比较法。它先使冒泡法又称两两比较法。它先使e64和和e63比较,若比较,若e64e63,则两,则两个存储单元中的内容交换,否则就不交换。然后使个存储单元中的内容交换,否则就不交换。然后使e63和和e62比较,比较,按同样的原则决定是否交换。一直比较下去,最后完成按同样的原则决定是否交换。一直比较下去,最后完成e2和和e1的的比较及交换,经过比较及交换,经过N 1=63次比较(常用内循环次比较(常用内循环63次来实现)后,次来实现)后,e1的位置上必然得到数组中的最大值,犹如一个气泡从水低冒出的位置上必然得到数组中的最大值,犹如一个气泡从水低冒出来一样,如下页图所示(图中只画出了来一样,如下页图所示(图中只画出了6个数的比较过程)。个数的比较过程)。第39页/共45页第40页/共45页 第二次冒泡过程和第一次完全相同,比较次数也可以是第二次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论