




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 汇编 语言程序设计,1 程序设计方法 2 顺序程序 3 分支程序 4 循环程序 5 子程序 6 算术运算程序,第五章 汇编语言程序设计,5-1-2 汇编语言程序设计步骤 一.分析问题。 二.确定算法。 三.制定程序流程图:表示程序结构和程序功能 四.编制源程序 1. 合理分配存储器单元和了解I/O接口地址。 2. 按功能设计程序, 明确各程序之间的相互关系。 3. 用注释行说明程序, 便于阅读和修改调试和修改。 五.程序调试。,第五章 汇编语言程序设计,5-1-3 评价程序质量的标准 (1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。,5-2 顺序程序 直线程序又称简单程序,程序走向只有一条路径。 例1 双字节变补程序(设数据在R4 R5中)双字节变补程序(设数据在R4R5中): MOV A,R5 ;取低字节 CPL A ADD A,#1 ;低字节变补 MOV R5,A MOV A,R4 ;取高字节 CPL A ADDC A,#0 ;高字节变补 MOV R4,A,第五章 汇编语言程序设计,第五章 汇编语言程序设计,例2 压缩式BCD码分解成为单字节BCD码。,MOV R0,#40H ;设指针 MOV A,R0 ;取一个字节 MOV R2,A ;暂存 ANL A,#0FH ;清0高半字节 INC R0 MOV R0,A ;保存数据个位 MOV A,R2 SWAP A ;十位换到低半字节 ANL A,#0FH INC R0 MOV R0,A ;保存数据十位,十 个,第五章 汇编语言程序设计,例5-1 假设两个双字节无符号数,分别存放在R1R0和R3R2中,高字节在前,低字节在后。编程使两数相加,和数存放回R2R1R0中。 ORG 1000h CLR C MOV A,R0 ;取被加数低字节至A ADD A,R2 ;与加数低字节相加 MOV R0,A ;存和数低字节 MOV A,Rl ;取被加数高字节至A ADDC A,R3 ;与加数高字节相加 MOV Rl,A ;存和数高字节 MOV A,#0 ADDC A,#0 ;加进位位 MOV R2,A ;存和数进位位 SJMP $ ;原地踏步 END,第五章 汇编语言程序设计,5-3 分支程序 由条件转移指令构成程序判断框部分,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。两种分支结构。 例1 求R2中补码绝对值,正数不变,负数变补。 MOV A,R2 JNB ACC.7,NEXT ;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT: SJMP NEXT ;结束,第五章 汇编语言程序设计,5-3-2 多重分支程序 多次使用条件转移指令,形成两个以上判断框。 例5-7 设30H单元存放的是一元二次方程ax2+bx+c=0根的判别式=b2-4ac的值。 解:值为有符号数,有三种情况,即大于零、等于零、小于零。,第五章 汇编语言程序设计,编程: ORG 1000H START: MOV A,30H ;值送A JNB ACC.7,YES ;=0转YES MOV 31H,#0 ;0转TOW MOV 31H,#1 ;=0有相同实根 SJMP FINISH TOW: MOV 31H,#2 ;有两个不同实根 FINISH:SJMP $,第五章 汇编语言程序设计,5-3-3 N路分支程序 N路分支程序是根据前面程序运行的结果,可以有N种选择,并能转向其中任一处理程序。,第五章 汇编语言程序设计,例5-10 128路分支程序。 功能:根据R3的值(00H7FH)转到128个目的地址。 参考程序: JMPl28: MOV A,R3 RL A ;(A)2 MOV DPTR,#PRGTBL ;散转表首址送DPTR JMP A+DPTR ;散转 PRGTBL:AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F ;128个AJMP指令占256个字节,第五章 汇编语言程序设计,例5-11 256路分支程序 功能:根据R3的值转移到256个目的地址; 入口条件:(R3)=转移目的地址代号(00HFFH); 出口条件:转移到相应分支处理程序入口。 解: JMP256: MOV A,R3 ;取N值 MOV DPTR,#PRGTBL ;指向分支地址表首址 CLR C RLC A ;(A)2 JNC LOWl28 ;是前128个分支程序,则转移 INC DPH ;否则基址加256,第五章 汇编语言程序设计,LOWl28: MOV TEMP,A ;暂存A INC A ;指向地址低8位 MOVC A,A+DPTR ;查表,读分支地址低8位 PUSH ACC ;地址低8位入栈 MOV A,TEMP ;恢复A,指向地址高8位 MOVC A,A+DPTR ;查表,读分支地址高8位 PUSH ACC ;地址高8位入栈 RET ;分支地址弹入PC实现转移 PRGTBL: DW ROUT00 ;占用512个字节 DW ROUT01 ,第五章 汇编语言程序设计,例5-12 大于256路分支转移程序 功能:根据入口条件转向n个分支处理程序 入口条件:(R7R6)=转移目的地址代号; 出口条件:转移到相应分支处理程序入口。 程序散转表中有N条LJMP指令,每条LJMP指令占3个字节,因此要按入口条件将址代号乘以3,用乘积的高字节加DPH,乘积的低字节送A(变址寄存器)。 PRGTBL:LJMP ROUT0 LJMP ROUT1 LJMP ROUT2 ,第五章 汇编语言程序设计,参考程序: JMPN:MOV DPTR,#PRGTBL;DPTR指向表首址 MOV A,R7 ;取地址代号高8位 MOV B,#3 ; MUL AB ;3 ADD A,DPH ; MOV DPH,A ;修改指针高8位 MOV A,R6 ;取地址代号低8位 MOV B,#3 ;3 MUL AB ; XCH A,B ;交换乘积的高低字节 ADD A,DPH ;乘积的高字节加DPH MOV DPH,A XCH A,B ;乘积的低字节送A JMP A+DPTR ;散转,第五章 汇编语言程序设计,5-4 循环程序 包含多次重复执行的程序段,循环结构使程序紧凑。 5-4-1 循环程序的导出 各个环节任务: 一初始化部分 循环准备工作。 如:清结果单元、设指针、设循环控制变量初值等。 二循环体 循环工作部分: 需多次重复处理的工作。 循环控制部分: 1.修改指针和循环控制变量。 2.检测循环条件:满足循环条件,继续循环,否则退出循环。 三.结束部分 处理和保存循环结果。1)已知循环次数 2)循环次数未知 允许0次循环的循环结构:在循环工作之前检测循环条件。,第五章 汇编语言程序设计,单重循环 简单循环结构:循环体中不套循环。 例:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。 SUM:MOV R0,#42H;设指针 MOV A,R0 MOV R2,A ;循环计数器R2n CLR A ;结果单元清0 MOV R3,A ADD1:INC R0 ;修改指针 ADD A,R0 ;累加 JNC NEXT ;处理进位 INC R3 ;有进位,高字节加1 NEXT: DJNZ R2,ADD1 ;循环控制:数据是否加完? MOV 40H,A ;循环结束,保存结果 MOV 41H,R3 RET,第五章 汇编语言程序设计,循环控制方法:计数控制、特征标志控制。 一.计数控制: 设循环计数器,控制循环次数。正计数和倒计数两种方式。 例:为一串7位ASCII码数据的D7位加上奇校验,设数据存放在片外RAM的2101H起始单元,数据长度在2100H单元。 MOV DPTR,#2100H MOVX A,DPTR MOV R2,A NEXT:INC DPTR MOVX A,DPTR ORL A,#80H JNB P,PASS ;判断是否加校验 MOVX DPTR,A;是,则加奇校验 PASS:DJNZ R2,NEXT DONE:SJMP DONE,第五章 汇编语言程序设计,二.特征控制: 设定循环结束标志实现循环控制。 例:找正数表最小值。正数表存在片外RAM中以LIST为起始单元,用-1作为结束标志。 START:MOV DPTR,#LIST ;数表首地址 MOV B,#127 ;预置最小值 NEXT: MOVX A,DPTR ;取数 INC DPTR ;修改指针 CJNE A,#0FFH,NEXT1;是否为数表结尾? SJMP DONE ;循环结束 NEXT1:CJNE A,B,NEXT2 ;比较 NEXT2:JNC NEXT ;Cy=1,则AB MOV B,A ;保存较小值 SJMP NEXT DONE: SJMP DONE,第五章 汇编语言程序设计,5-4-2 多重循环 循环体中套循环结构。以双重循环使用较多。 例:将内存一串单字节无符号数升序排序。 步骤: 每次取相邻单元的两个数比较, 决定是否需要交换数据位置。 第一次循环,比较N-1次,取数据表中最大值。 第二次循环,比较N-2次,取到次大值。 第N-1次循环:比较一次,排序结束。,第五章 汇编语言程序设计,SORT: MOV A,#N-1 ;N个数据排序 MOV R4,A ;外循环次数 LOOP1:MOV A,R4 MOV R3,A ;内循环次数 MOV R0,#TAB ;设数据指针 LOOP2:MOV A,R0 ;取二数 MOV B,A INC R0 MOV A,R0 CJNE A,B,L1 ;比较 L1: JNC UNEX ;AB,不交换 DEC R0 ;否则交换数据 XCH A ,R0 INC R0 MOV R0,A UNEX: DJNZ R3,LOOP2 ;内循环结束? DJNZ R4,LOOP1 ;外循环结束? RET,第五章 汇编语言程序设计,软件延时程序 用循环程序将指令重复多次执行,实现软件延时。 试计算延时程序的执行时间。 源程序 指令周期(M) 指令执行次数 DELAY:MOV R6,#64H 1 I1: MOV R7,#0FFH 1 I2: DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2,延时时间计算:(设时钟f=12MHz) t=(11+1100+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,第五章 汇编语言程序设计,5.5.2编写循环程序应注意的问题 1)循环体前应注意安排循环初始化; 2)内外循环间不应相互交叉。,第五章 汇编语言程序设计,5-5 查表程序 例5-19 一个十六进制数存放在HEX单元的低四位,将其转换成ASCII码并送回HEX单元。 编程: ORG 0100H HEX EQU 30H HEXASC: MOV A, HEX ANL A ,#00001111B ADD A, #3 ;变址调整 MOVC A, A+PC MOV HEX,A ;2字节 RET ;1字节 ASCTAB: DB 30H,3lH,32H,33H DB 34H,35H,36H,37H DB 38H,39H,41H,42H DB 43H,44H,45H,46H END,第五章 汇编语言程序设计,5-6 子程序设计 子程序:能完成某项特定功能的独立程序段,可被反复调用。 优点: (1)不必重复书写同样的程序,提高编程效率; (2)程序的逻辑结构简单,便于阅读; (3)缩短了源程序和目标程序的长度,节省了程序存储器空间; (4)使程序模块化、通用化,便于交流,共享资源; (5)便于按某种功能调试。,第五章 汇编语言程序设计,1. 子程序结构 一子程序入口用标号作为子程序名。 二调用子程序之前设置好堆栈。 三用返回指令RET结束子程序,并保证堆栈栈顶为调 用程序的返回地址。 四. 子程序嵌套须考虑堆栈容量。 五. 提供足够的调用信息: 如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。,第五章 汇编语言程序设计,2. 参数传递 入口参数:调用子程序之前,需要传给子程序的参数。 出口参数:子程序送回调用程序的结果参数。 (1)子程序无须传递参数,第五章 汇编语言程序设计,(2)用累加器和工作寄存器传递参数 例5-24 双字节求补子程序CPLD。 解 入口参数:(R7R6)=16位数 出口参数:(R7R6)=求补后的16位数 CPLD:MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A ADDC A,#0 MOV R7,A RET,第五章 汇编语言程序设计,(3)通过操作数地址传递参数 例5-25 n字节求补子程序。 解 入口参数:(R0)=求补数低字节指针,(R7)=n-1 出口参数:(R0)=求补后的高字节指针 CPLN: MOV A,R0 CPL A ADD A,#1 MOV R0,A NEXT: INC R0 MOV A,R0 CPL A ADDC A,#0 MOV R0,A DJNZ R7,NEXT RET,第五章 汇编语言程序设计,(4)通过堆栈传递参数 例5-26 在HEX单元存放两个十六进制数,将它们分别转换 成ASC码并存入ASC和ASC+1单元。 解 由于要进行两次转换,故可调用查表子程序完成。 主程序: MAIN: PUSH HEX ;取被转换数 LCALL HASC ;转子 *PC POP ASC ;ASCLASC MOV A,HEX ;取被转换数 SWAP A ;处理高四位 PUSH ACC LCALL H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年涤纶纤维行业当前市场规模及未来五到十年发展趋势报告
- 2025年瓦楞包装行业当前发展趋势与投资机遇洞察报告
- 2025年移动支付行业当前发展趋势与投资机遇洞察报告
- 收取发票的注意事项课件
- 2024年医保培训试题(附答案)
- (2025)《职业教育法》考试题及答案
- 2025年初级药师基础知识考试模拟题及答案
- 2024年公共营养师(健康饮食、营养搭配)等知识考试题库与答案
- 2025年注册安全工程师《安全生产管理》知识考试题与答案
- 2025年SYB创业者学习知识培训考试题库(附含答案)
- 光伏居间的合同8篇
- 从业人员培训管理制度
- 医疗风险防控培训课件
- 酒店前台礼貌礼节培训
- 诊疗规范培训课件
- 幸福心理学-(彭凯平)
- 2025年中邮保险招聘笔试参考题库含答案解析
- 《中国老年糖尿病诊疗指南(2024版)》解读课件
- 《中国女性乳腺癌患者糖尿病和糖尿病前期管理专家共识》 (2024版)
- 特种设备安全检查与巡查制度
- 游戏运营数据监控与分析技术应用指南
评论
0/150
提交评论