《单元 汇编语言程序设计PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《单元 汇编语言程序设计PPT讲稿.ppt(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单元汇编语言程序设计第1页,共19页,编辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识子程序的概念通常把这些基本操作功能编制为程序段作为独立的子程序,以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令,当程序执行到调用指令,就转到子程序中完成规定的操作,并返回到原来的程序继续执行下去。子程序结构能供调用的子程序,其结构应具备:v必须标明子程序的入口地址,又称首地址,以便程序调用v必须以返回指令RET结束子程序。第2页,共19页,编辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.
2、44.2.4相关知识相关知识参数传递在使用调用指令不附带任何参数时,参数的互相传递要由设计者通过程序安排。一般可采用以下方法:v传递数据。将需传递的参数通过工作寄存器Rn或累加器A传递给子程序。即在主程序调用子程序前将参数差额主选定的工作寄存器组R0R7、累加器A中,供子程序读取或者将参数在调用前先压入堆栈,进入子程序后再从堆栈中读出。v传递地址。将要传递的参数存放在数据存储器中,将其地址通过工作寄存器R0、R1或数据指针DPTR传递,供子程序读取参数。第3页,共19页,编辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识现场保护主程序的
3、现场保护和恢复。子程序(包括中断服务程序)是个独立的程序段,在子程序执行过程中常需用到通用单元,例如:工作寄存器R0R7、累加器A、数据指针DPTR,以及有关标志、状态位等。而这个单元中的原内容在调用子程序结束之后的主程序中仍有用,需进行保护,称现场保护。在执行完子程序并返回继续执行主程序前应恢复其原内容,称现场恢复。一般有两种现场保护/恢复方式:第4页,共19页,编辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识v调用前保护、返回后恢复。这种方式是在主程序逻辑的调节器用指令前进行现场保护,在调用指令之后,即返回原断点处进行恢复现场。其
4、程序结构如下所示:主程序PUSHPSW;将PSW、A、DPTR等入栈保护PUSHAPUSHBPUSHDPLPUSHDPHPUSHPSW,#10H;选用工作寄存器组2,将0组保护第5页,共19页,编辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识LCALLaddr16;调用子程序addr16POPDPH;出栈POPDPLPOPBPOPAPOPPSW这种结构灵活,可根据实际需要实现现场保护/恢复。v调用后保护、返回前恢复。这种结构是在子程序的开始部分进行现场保护,而在子程序的结束部分、返回指令前恢复。其程序结构如下所示:第6页,共19页,编
5、辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识;子程序ADDR:PUSHPSW现场保护PUSHAPUSHBPUSHDPLPUSHDPHMOVPSW,#08H;选用工作寄存器组1,0组保护;子程序主体POPDPH现场恢复POPDPLPOPB第7页,共19页,编辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识POPAPOPPSWRET;返回这是子程序标准格式,现场保护/恢复内容固定,但程序规范、清晰。上述两种方式可由设计者任选。第8页,共19页,编辑于2022年,星期五4.4.2
6、2任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识子程序特性随着汇编语言程序设计技术的发展,子程序的应用越显重要。因此,对子程序的设计具有较高要求,除通常在程序设计中应遵循的原则外,还应具备以下特性:v通用性严格讲,子程序有通用和专用两种。前者如数制转换、浮点运算等子程序可广泛应用于同系列单片机的任何应用系统,后者仅限用于同一个应用系统中。特别是前者,都应注意子程序的通用性。为了使子程序具有通用性,在设计中要解决的一个重要问题,就是确定哪些变量作为参量以及何传递参量。第9页,共19页,编辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.44.2
7、.4相关知识相关知识v可浮动性可浮动性是指子程序段可安置在程序存储器的任何区域。为此,在子程序中应避免选用绝对转移地址。v可递归和可重入性子程序能自己调用自己和同时能被多个任务(或多个用户程序)调用的特性,分别称之为子程序的可递归性和可重入性。这类子程序常在庞大而复杂的程序中应用,在单片机应用程序设计中较少用到。第10页,共19页,编辑于2022年,星期五4.4.2 2任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识v子程序说明文件对于通用子程序,为便于各种应用程序的选用,要求在子程序编制、调试完成后应提供一个说明文件。其内容应包含以下内容。子程序名。标明子程序功能的名称
8、。子程序功能。简要说明子程序能完成的主要功能,包括重要算法、参量要求及有关存储单元配置等。子程序调用。指明本子程序还需调用哪些子程序。附子程序流程图及程序清单。由于子程序结构在程序设计中应用极为普遍,因此,一般在指令集中均设有子程序调用指令。AT89S系列的指令集中,考虑到程序存储器空间的限制和节省,特设置了绝对调用和长调两条指令,供实际应用时选择。第11页,共19页,编辑于2022年,星期五4.44.4任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识查表程序结构查表程序是一种常用程序,它广泛使用于LED显示控制、打印机打印控制、数据补偿、数值计算、转换等功能程序中,这类
9、程序具有简单、执行速度快等特点。所谓查表法,就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出,然后把这张表存于单片机的程序存储器中,这时自变量值为单元地址,相应的函数值为该地址单元中的内容。查表,就是根据变量X在表格中查找对应的函数值Y,使Y=f(X)。第12页,共19页,编辑于2022年,星期五4.44.4任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识两条查表指令:MOVCA,A+PCMOVCA,A+DPTR选用DPTR为首地址指针时表格参量可存放在64KB范围内的任何区段,可供无限次查表,选用PC当前值为首地址指针时表硌参量必须设置在紧跟查表指令(M
10、OVC)之后,基本上只能一次性查表,编程时应根据实际情况进行选择,一般以选择DPTR为基址指针的查表指令灵活、方便,可省去一些麻烦。第13页,共19页,编辑于2022年,星期五4.44.4任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识选用DPTR作为基地址的查表指令时,其操作可分3步进行:v将待查表格的首地址置入DPTR基址寄存器;v将待查的表格具体项数值置入变址寄存器A中;v执行指令MOVCA,A+DPTR将查表结果值读入累加器A中。第14页,共19页,编辑于2022年,星期五4.44.4任务八任务八LED显示电路显示电路4.2.44.2.4相关知识相关知识选用PC当
11、前值作为基地址的查表指令时,由于PC的当前值正是查表指令的下一条指令的第一个字节的地址值,亦即表格数据串的首地址,当执行完查表指令,读取到表格数据后仍需从这个PC的当前值继续往下执行,显然两者发生重叠,为解决这个矛盾,势必将表格下移若干个字节,以便设置一条跳转指令跳过表格串继续安排顺序往下执行的程序。把表格串下移的字节数加到变址寄存器A中,即在查表指令前加一条指令。ADDA,#dataA中为经动态运算得到的待查表格数的项数。Data为表格串下移的字节数,亦即PC的当前值到下移后的表格串首地址的距离数。这个距离数显然不宜太大,因为它将影响表格串的长度,两者之和不能超过565B,这种表格一般属一次
12、性查找,因为PC的当前值随程序的执行而改变第15页,共19页,编辑于2022年,星期五4.44.4任务八任务八LED显示电路显示电路程序设计举例【例【例4.84.8】4位BCD码整数转换成二进制整数入口参数:BCD码字节地址指针R0,位数存于R2中。出口参数:二进制数存于R3R4中。算法:A=103a3+102a2+10a1+a0程序流程如7.7所示。子程序清单如下:BCDA:PUSH PSW ;现场保护PUSH APUSH BMOV PSW,#08HMOV R3,#00HMOV R2,#3 ;BCD码D的位数MOV A,R0 ;a0-R4第16页,共19页,编辑于2022年,星期五4.44.
13、4任务八任务八LED显示电路显示电路程序设计举例MOV R4,ABCKB:MOV A,R3 ;(R3R4)10 MOV B,#10 ;R4MUL ABMOV R4,AXCH A,BMOV B,#10XCH A,R3MUL ABADD A,R3XCH A,R4INC R0 ;(R0)+1-R0ADD A,R0 ;(R3R4)-(R0)-RR3R4第17页,共19页,编辑于2022年,星期五4.44.4任务八任务八LED显示电路显示电路程序设计举例XCH A,R4ADDC A,#0MOV R3,ADJNZ R2,BCDB ;循环n-1次POP B ;恢复现场PIP APOP PSWRET ;返回上例中的R2内容是BCD码的位数n,本例中n=4,即两个字节4位BCD码,在程序中作为循环控制寄存器的计数值为n-1=4-1=3,即本例循环3次即完成二次字节的BCD码转换。本例采用乘10运算,也可采用除2运算进行转换。第18页,共19页,编辑于2022年,星期五课堂小结:1、什么是子程序?2、子程序的结构3、如何保护现场和传递参数?4、查表指令的查表步骤?作业:1、预习LED接口实验实训项目,完成预习报告、编写控制程序2、P1064.234.24第19页,共19页,编辑于2022年,星期五
限制150内