微机原理及应用第四章汇编语言程序设计基础

上传人:tia****nde 文档编号:69360593 上传时间:2019-01-13 格式:PPT 页数:45 大小:795.31KB
返回 下载 相关 举报
微机原理及应用第四章汇编语言程序设计基础_第1页
第1页 / 共45页
微机原理及应用第四章汇编语言程序设计基础_第2页
第2页 / 共45页
微机原理及应用第四章汇编语言程序设计基础_第3页
第3页 / 共45页
微机原理及应用第四章汇编语言程序设计基础_第4页
第4页 / 共45页
微机原理及应用第四章汇编语言程序设计基础_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《微机原理及应用第四章汇编语言程序设计基础》由会员分享,可在线阅读,更多相关《微机原理及应用第四章汇编语言程序设计基础(45页珍藏版)》请在金锄头文库上搜索。

1、第四章 汇编语言程序设计基础,4-1 汇编语言程序设计方法,4-2 汇编语言程序结构,4-3 汇编语言的编辑与汇编,4-1 汇编语言程序设计方法,2 程序设计步骤,1 程序及程序设计,1 程序及程序设计,例如:计算63+56+36+14=? MOV A,#63 ;数63送入寄存器A ADD A,#56 ;数56与A中的数63相加,其结果119送A ADD A,#36 ;数36与A中的数119相加,其结果155送A ADD A,#14 ;数155与A中的数14相加,其结果169保存在A中,程序是一系列指令的有序集合 程序设计则是编制程序的过程,程序设计:就是人们用计算机能接受的语言,把欲解决问题

2、的算法和步骤描述出来的过程。,编程语言 机器语言汇编语言高级语言(字符型图形化),2、 程序设计步骤,分析课题确定算法和数据结构确定操作步骤画流程图编制源程序调试程序,分析课题:对具体问题具体分析,并抽象出数学模型 确定算法:解决同一问题有多种方法,从中选择一种最佳的方法 确定数据结构:合理安排数据结构,合理选择和分配内存空间、工作寄存器以及I/O接口地址 程序模块:把整个问题分成若干个功能模块,画出层次图及通信 画流程图:以图示形式表示解决具体问题的思路和方法 编制源程序:精心挑选合适的指令和操作数的寻址方式 用注释行说明程序,便于阅读、调试和修改。 调试程序:,流程图图例,起止框 处理框

3、判断框 连线,4-2 汇编语言程序结构,程序设计方法 结构化设计,三种基本控制结构, 顺序结构 选择结构 循环结构 一个子程序结构 子程序 中断服务子程序,程序开发方法 自顶向下方法先顶层开发 先写主程序,后写子程序 自底向上方法先底层开发 先写子程序,后写主程序 混合方法,程序设计:就是人们用计算机能接受的语言,把欲解决问题的算法和步骤描述出来的过程。,编程语言 机器语言汇编语言高级语言(字符型图形化),4-2 汇编语言程序结构,4-2-1 顺序结构程序设计,4-2-2 分支结构程序设计,4-2-3 循环结构程序设计,4-2-4 子程序结构程序设计,4-2-1 顺序结构程序设计,顺序结构是按

4、照指令在存储器中存放的先后顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止。 特点: 程序中无转移、调用、分支、循环指令; 程序按编写的先后顺序执行,程序流向不变 PC自动加1 在实际编程中应注意 如何正确选择指令、寻址方式和合理使用工作寄存器,包括数据存储器。 数据传送和交换程序、简单运算程序、查表程序,【例4-1】拆字、拼字程序 将片内RAM 50H单元的低4位取出当作高4位,与51H单元的低4位合成一个字节后存入52H单元。,STR EQU 50H ;头文件 ORG 0000H MOV R1,#STR MOV A,R1 ;取50H单元中的数据 ANL A,#0FH ;拆字,屏蔽高4

5、位 SWAP A ;高、低4位互换 INC R1 ;指向51H单元 XCH A,R1 ;51H单元内容与累加器内容互换 ANL A,#0FH ;拆字,取原51H单元的低4位 ORL A,R1 ;拼字 INC R1 MOV R1,A ;存结果 RET END,【例4-1】拆字、拼字程序 将片内RAM 50H单元的低4位取出当作高4位,与51H单元的低4位合成一个字节后存入52H单元。,STR EQU 50H ;头文件 ORG 0000H MOV R1,#STR ;指向50H单元 MOV A,R1 ;取50H单元中的数据 SWAP A ;高、低4位互换 INC R1 ;指向51H单元 XCHD A

6、,R1 ;拆字,拼字;51H单元的低4位 ;与A的低4位内容互换 INC R1 ;指向52H单元 MOV R1,A ;存结果 RET END,【例4-2】数制转换 将片内RAM 30H单元的无符号二进制数转换成BCD码数,结果按高低顺序依次存放到33H、32H、31H单元。,ORG 0000H HEX_D: MOV A, 30H ;取原数据数 MOV B, #10 DIV AB ;二进制数除10 MOV 31H, B ;将余数(BCD码的个位)送31H MOV B, #10 DIV AB ;商再继续除10 MOV 32H, B ;将余数(BCD码的十位)送32H MOV 33H, A ;将商(

7、BCD码的百位)送33H RET,【例4-3】查表程序 关键在:组织具有规律性的表格 求R1中数(015)的平方,结果仍放回到R1中。,ORG 0000H TAB1: MOV A, R1 ADD A, #02H ;加上地址偏移量 MOVC A, A+PC ;查表 MOV R1,A RET DB 00H, 01H, 04H, 09H ;平方表 DB 10H, 19H, 24H, 31H ;续表 DB 40H, 51H ;续表,【例4-3】查表程序 求R1中数(015)的平方,结果仍放回到R1中。,ORG 0000H TAB2: PUSH DPH ;保存DPTR的原值 PUSH DPL MOV D

8、PTR, #TAB ;取平方表首地址 MOV A, R1 MOVC A, A+DPTR ;查平方表 MOV R1, A POP DPL ;恢复DPTR的原值 POP DPH RET TAB: DB 00H, 01H, 04H, 09H ;平方表 DB 10H, 19H, 24H, 31H DB 40H, 51H,以PC为指针查表程序 输入参数:R2 输出参数:R3R4,TB1: mov A,R2 add A,R2;? mov R3,A add A,#08H;? movc A,A+PC xch A,R3 add A,#03H ;? Inc A ;? movc A,A+PC mov R4,A sj

9、mp $,TAB1: DW 1520,3721,4264 DW 7850,3483,32657 DW 883,9943,1000 DW 4051,6785,8931 DW 4468,5871 DW 13284,27808 END,以DPTR为指针查表程序 输入参数:R2R3 输出参数:R2R3,LTB2: mov DPTR,#TAB2 mov A,R3 clr C rlc A mov R3,A xch A,R2 rlc A xch A, R2 add A,DPL mov DPL,A mov A,DPH addc A,R2 mov DPH,A,clr A movc A,A+DPTR mov R2

10、,A clr A inc DPTR movc A,A+DPTR mov R3,A ret TAB2: DW 520H,3721H,4264H DW 7850H,3483H,3265H DW 883H,9943H,1000H,4-2-2 分支结构程序设计,特点:程序中含有转移类指令 关键:正确选用转移指令,无条件分支程序 程序设计者事先设计好的流向 LJMP、AJMP 、SJMP、JMP、LCALL、ACALL、RET(I) 有条件分支程序 根据程序执行过程中对标志位、A、内部RAM的某些单元或位的影响结果决定程序的流向。使cpu具有判断决策能力 JZ/JNZ、CJNE、DJNZ、位控制转移类指

11、令的有机配合,注意 使用条件转移指令形成分之前一定安排可供条件转移指令进行判别的条件。JC LOOP 正确选定所用的转移条件、转移目标地址(标号)及转移范围,一、单重分支程序,一个判断决策框,程序有两条出路,二选一。 由一个条件转移指令实现,有三种典型单分支结构:,补码绝对值,例 求R2中补码绝对值,正数不变,负数变补。 MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束,JNB,【例4-4】无符号数的比较 比较外部RAM Data1和Data2单元的两个无符号数,并将大数存入Data3单元中,

12、Data1、Data2和Data3为连续的单元,ORG 0000H COM1:MOV A, 40H CJNE A, 41H, L1;两数比较 L1: JC J2 ;C=1,则A小转BIG2 BIG1 MOV 42H, A ;大数送42H RET BIG2: XCH A, 41H ;大数送A SJMP BIG1 END,先看数据放在内部RAM的情况,data1 equ 1000h com1:mov dptr, #data1 movx a, DPTR mov b,a inc DPTR movx a, DPTR cjne a, b, l1 l1: jc big2 ;c=1,则a小 big1: inc

13、 dptr movx dptr, a ret big2: xch a, b sjmp big1 end,【例4-5】代码转换程序设计1 一位十六进制数与ASCII码之间的转换 1、一位十六进制数转换为ASCII码 2、ASCII码转换为一位十六进制数,09的ASCII码:3039H,AF的ASCII码:4146H。 09与09之间的差值30h AF与AF之间的差值37h;,1、十六进制转换成ASCII码 输入:R2中存放一位十六进制;出口:R2返回ASCII值 ORG 0000H HEXASC:MOV A, R2 ;将该十六进制数暂存于A中 CJNE A, #0AH, $+3 JNC ADD_

14、37;若大于等于0AH,则加37H ADD_30:ADD A, #30H;若小于0AH,则加30H MOV R2, A ;保存结果 RET ;子程序返回 ADD_37:ADD A, #37H;大于或等于0AH,则加37H MOV R2, A ;保存结果 RET ;子程序返回,2、ASCII码转换成十六进制 输入:R2中存放ASCII码 输出:R2中返回十六进制 ASCHEX:mov A,R2 clr c subb A,#30h cjne A,#10,$+3 jc A, HEXASC1 ;A10转移 subb A,#07h ASCHEX1: ret,二、 多重分支程序,程序有两条以上的出路,多选

15、一。,2、按分支号转移,使用散转指令 JMP A+DPTR (1)转向地址表法:DW (2)转向地址偏移量表法:DB (3)查表与RET指令结合 MOVC和RET (4)转移指令表法:LJMP或AJMP,1、多次使用条件转移指令,形成两个以上判断框。 CJNE指令和JC、JNC有机配合 JB、JNB、JBC JZ、JNZ,1、多次使用条件转移指令,形成两个以上判断框。,例 求符号函数Y=SGN(X) 输入X存入40H,输出Y存入41H中 +1 当 X0 Y= SGN(X)= 0 当 X=0 -1 当 X0,SYMB: MOV A,40H ;取X JZ STOR ;X=0,Y=X JB ACC.

16、7,MINUS;X0 MOV A,# 1 ;X0,Y=+1 STOR: MOV 41H,A ;保存Y RET MINUS:MOV A,#0FFH ;X0,Y= -1 SJMP STOR,要点:将流程图按条件NO优先方式拉直 在流程图汇合处和转移目的地址处加标号,比较内部RAM Data1和Data2单元内以补码形式表示的带符号数,并将大数存入BIG单元,小数存入SMALL单元,若相等,则建立起标志位F0,Data1 EQU 40h Data2 EQU 41h BIG EQU 30H SMALL EQU 31H ORG 0000H COM2: MOV A, Data1 XRL A, Data2 JNZ STEP1 ;两数不等,转STEP1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号