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

上传人:仙*** 文档编号:52188586 上传时间:2022-02-07 格式:PPT 页数:54 大小:600.02KB
收藏 版权申诉 举报 下载
微机原理及应用第四章汇编语言程序设计基础文档资料_第1页
第1页 / 共54页
微机原理及应用第四章汇编语言程序设计基础文档资料_第2页
第2页 / 共54页
微机原理及应用第四章汇编语言程序设计基础文档资料_第3页
第3页 / 共54页
资源描述:

《微机原理及应用第四章汇编语言程序设计基础文档资料》由会员分享,可在线阅读,更多相关《微机原理及应用第四章汇编语言程序设计基础文档资料(54页珍藏版)》请在装配图网上搜索。

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

2、序设计:就是人们用计算机能接受的语言语言,把欲解决问题的,把欲解决问题的步骤步骤描述出来的描述出来的过程过程。编程语言编程语言分析分析课题课题确定确定算法和数据结构算法和数据结构确定操作确定操作步骤步骤画画流程流程图图编制编制源程序源程序调试调试程序程序分析分析课题:对具体问题具体分析,并抽象出课题:对具体问题具体分析,并抽象出数学模型数学模型 确定确定算法:算法:解决同一问题有多种方法,从中选择一种解决同一问题有多种方法,从中选择一种最佳最佳的方法的方法 确定确定数据结构:数据结构:合理安排数据结构,合理安排数据结构,合理合理选择和分配内存空间、选择和分配内存空间、工作寄存器以及工作寄存器以

3、及I/OI/O接口地址接口地址 程序模块程序模块:把整个问题分成若干个功能模块,画出层次图及通信:把整个问题分成若干个功能模块,画出层次图及通信 画画流程图:流程图:以图示形式表示解决具体问题的思路和方法以图示形式表示解决具体问题的思路和方法 编制编制源程序:源程序:精心挑选精心挑选合适合适的指令和操作数的的指令和操作数的寻址方寻址方式式用用注释注释行说明程序,便于阅读、调试和修改。行说明程序,便于阅读、调试和修改。 调试调试程序:程序:源程序源程序-调试调试程序完成程序完成 N N 修改修改流程图图例 起止框 处理框 判断框 连线开开 始始结结 束束XX+1Y Y-1F5?YN开始开始1 Y

4、N? 结构化设计结构化设计三种基本控制结构,三种基本控制结构, 顺序结构顺序结构一个子程序结构一个子程序结构 自顶向下自顶向下方法方法先顶层开发先顶层开发 先写主程序,后写子程序先写主程序,后写子程序 自底向上自底向上方法方法先底层开发先底层开发 先写子程序,后写主程序先写子程序,后写主程序 混合方法混合方法 程序设计:就是人们用计算机能接受的程序设计:就是人们用计算机能接受的语言语言,把欲解决问题的,把欲解决问题的步骤步骤出来的出来的过程过程。编程语言编程语言 顺序结构是按照指令在顺序结构是按照指令在存储器中存放的先后存储器中存放的先后顺序,顺序,从某一条指令开始逐条顺序执行,直至某一条指令

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

6、位取出当作高4位,与位,与51H单元的低单元的低4位合成一个字节后存入位合成一个字节后存入52H单元。单元。STREQU50H;头文件头文件ORG 0000HMOV R1,#STRMOV A,R1;取取50H单元中的数据单元中的数据ANLA,#0FH;拆字拆字,屏蔽高,屏蔽高4位位SWAP A;高、低高、低4位互换位互换INCR1;指向指向51H单元单元XCHA,R1;51H单元内容与累加器内容互换单元内容与累加器内容互换ANLA,#0FH;拆字拆字,取原,取原51H单元的低单元的低4位位ORLA,R1;拼字拼字INC R1MOV R1,A;存结果存结果RETEND【例【例4-1】拆字、拼字程

7、序】拆字、拼字程序将片内将片内RAM 50H单元的低单元的低4位取出当作高位取出当作高4位,与位,与51H单元的低单元的低4位合成一个字节后存入位合成一个字节后存入52H单元。单元。 STREQU50H;头文件头文件ORG 0000HMOV R1,#STR;指向指向50H单元单元MOV A,R1;取取50H单元中的数据单元中的数据SWAPA;高、低高、低4位互换位互换INCR1;指向指向51H单元单元XCHDA,R1 ;拆字拆字,拼字;拼字;51H单元的低单元的低4位位 ;与与A的低的低4位内容互换位内容互换INC R1;指向指向52H单元单元MOV R1,A;存结果存结果RETEND【例【例

8、4-2】数制转换】数制转换将片内将片内RAM 30H单元的无符号二进制数转换成单元的无符号二进制数转换成BCD码码数,结果按高低顺序依次存放到数,结果按高低顺序依次存放到33H、32H、31H单元。单元。ORG 0000H HEX_D:MOV A, 30H;取原数据数取原数据数MOV B, #10DIVAB;二进制数除二进制数除10MOV 31H, B;将余数(将余数(BCD码的个位)送码的个位)送31HMOV B, #10DIVAB;商再继续除商再继续除10MOV 32H, B;将余数(将余数(BCD码的十位)送码的十位)送32HMOV 33H, A;将商(将商(BCD码的百位)送码的百位)

9、送33HRET【例【例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)的平方,结果仍放回到)的

10、平方,结果仍放回到R1中。中。ORG 0000HTAB2:PUSH DPH;保存保存DPTR的原值的原值PUSH DPLMOV DPTR, #TAB;取平方表首地址取平方表首地址MOV A, R1MOVCA, A+DPTR;查平方表查平方表MOV R1, APOPDPL;恢复恢复DPTR的原值的原值POPDPHRETTAB: DB00H, 01H, 04H, 09H;平方表平方表DB10H, 19H, 24H, 31HDB40H, 51H以PC为指针查表程序输入参数:R2 输出参数:R3R4TB1: mov A,R2 add A,R2;? mov R3,A add A,#08H;? movc

11、A,A+PC xch A,R3 add A,#03H ;? Inc A ;? movc A,A+PC mov R4,A sjmp $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 输出参数:R2R3LTB2: 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,

12、A mov A,DPH addc A,R2 mov DPH,A clr A movc A,A+DPTR mov R2,A clr A inc DPTR movc A,A+DPTR mov R3,A retTAB2: DW 520H,3721H,4264H DW 7850H,3483H,3265H DW 883H,9943H,1000H特点特点:程序中含有转移类指令程序中含有转移类指令 关键关键:正确选用转移指令正确选用转移指令 无条件分支程序无条件分支程序 程序设计者程序设计者事先事先设计好的设计好的 LJMP、AJMP 、SJMP、JMP、LCALL、ACALL、RET(I) 有条件分支程序

13、有条件分支程序 根据根据程序执行过程中程序执行过程中对标志位、对标志位、A、内部、内部RAM的某些单元或的某些单元或位的影响结果决定程序的位的影响结果决定程序的。使。使cpu具有具有判断决策判断决策能力能力 JZ/JNZ、CJNE、DJNZ、位控制转移类指令的、位控制转移类指令的有机配合有机配合 注意注意 使用条件转移指令形成分使用条件转移指令形成分之前之前一定安排可供条件转移指令进一定安排可供条件转移指令进行判别的条件。行判别的条件。JC LOOP 正确选定所用的正确选定所用的转移条件转移条件、转移目标地址转移目标地址(标号)及(标号)及转移范转移范围围一、单重分支程序一、单重分支程序一个判

14、断决策框,程序有两条出路,一个判断决策框,程序有两条出路,。由一个条件转移指令实现由一个条件转移指令实现有三种典型单分支结构:有三种典型单分支结构:条件满足?N影响条件Y分支处理1分支处理2顺序程序1顺序程序2开始结束条件满足?N影响条件Y分支处理段1顺序程序1开始顺序程序2结束顺序程序3条件满足?N影响条件Y分支处理段1顺序程序1开始顺序程序2结束顺序程序3补码绝对值补码绝对值条件满足?N影响条件Y处理段例例 求求R2R2中补码绝对值,正数不变,负数变补。中补码绝对值,正数不变,负数变补。 MOV A,R2MOV A,R2 JNBJNB ACC.7,NEXT; ACC.7,NEXT;为正数?

15、为正数? CPL ACPL A ; ;负数变补负数变补 INC AINC A MOV R2,AMOV R2,ANEXT:SJMP NEXT ;NEXT:SJMP NEXT ;结束结束JNB【例【例4-4】比较外部比较外部RAM Data1RAM Data1和和Data2Data2单元的两个无符号数,并将大数存入单元的两个无符号数,并将大数存入Data3Data3单元中,单元中, Data1Data1、Data2Data2和和Data3Data3为连续的单元为连续的单元 ORG 0000HCOM1:MOV A, 40H CJNE A, 41H, L1;两数比较两数比较L1:JCJ2 ;C=1,则

16、则A小转小转BIG2BIG1 MOV42H, A ;大数送大数送42HRETBIG2: XCHA, 41H ;大数送大数送ASJMP BIG1END先看数据放在内部先看数据放在内部RAM的情况的情况data1 equ 1000hcom1:movdptr, #data1movxa, DPTRmov b,ainc DPTRmovx a, DPTRcjne a, b, l1l1: jc big2 ;c=1,则则a小小big1: inc dptrmovx dptr, aretbig2: xch a, bsjmp big1end【例【例4-5】 1、一位十六进制数转换为、一位十六进制数转换为ASCII码

17、码 2、ASCII码转换为码转换为一位一位十六进制数十六进制数09的的ASCII码:码:3039H,AF的的ASCII码:码:4146H。09与与09之间的差值之间的差值30h AF与与AF之间的差值之间的差值37h;1、十六进制转换成、十六进制转换成ASCII码码输入:输入:R2中存放一位十六进制;出口中存放一位十六进制;出口:R2返回返回ASCII值值ORG0000HHEXASC:MOV A, R2;将该十六进制数暂存于将该十六进制数暂存于A中中CJNE A, #0AH, $+3JNCADD_37;若大于等于若大于等于0AH,则加,则加37HADD_30:ADDA, #30H;若小于若小于

18、0AH,则加,则加30HMOVR2, A;保存结果保存结果RET;子程序返回子程序返回ADD_37:ADDA, #37H;大于或等于大于或等于0AH,则加,则加37HMOVR2, A;保存结果保存结果RET;子程序返回子程序返回2、ASCII码转换成十六进制码转换成十六进制输入:输入:R2中存放中存放ASCII码码输出:输出:R2中返回十六进制中返回十六进制ASCHEX:movA,R2 clr c subb A,#30h cjne A,#10,$+3 jc A, HEXASC1 ;A 0X0Y=Y=SGN(X)= 0 SGN(X)= 0 当当 X=0X=0 -1 -1 当当 X0X127,则则

19、DPTR加加256LOW: MOV R2,A;修正值送修正值送R2保存保存 ;取分支地址高取分支地址高8位位 XCH A,R2;AR2 INC A ;取分支地址低八位取分支地址低八位 PUSH ACC ;分支地址低八位入栈保存分支地址低八位入栈保存 MOV A,R2 PUSH ACC ;分支地址高分支地址高8位入栈保存位入栈保存 ;分支地址分支地址PC,转移,转移TAB: DW ADDR0 ;DW ADDR1;高字节地址,低字节地址高字节地址,低字节地址 ADDR0:;程序段程序段0 A = ?0处理一处理二处理1n2、按分支号转移、按分支号转移JMP4: mov R2,#1 mov DPTR

20、,#TBL4 mov A,R2 add A,R2 jnc NADD inc DPHNADD:mov R3,A movc A,A+DPTR xch A,R3 inc A movc A,A+DPTR mov DPL,A mov DPH,R3 clr A jmp A+DPTR(1)用用。设分支号已存入。设分支号已存入R2,使用使用movc A,A+DPTR和和 散转指令配合。散转指令配合。TBL4: DW PRG0 DW PRG1 DW PRG2 DW PRG3PRG0: mov R0,#0 sjmp HaltPRG1: mov R0,#1 sjmp HaltPRG2: mov R0,#2 sjmp

21、 HaltPRG3: mov R0,#3Halt: sjmp $(2)用用。巧妙利用巧妙利用和和两条指令配合;两条指令配合; 设设R7=分支号分支号MTJS:MOV DPTR,#TAB ;指向表首地址;指向表首地址 MOV A,R7 ;分支号送;分支号送A MOVC A,A+DPTR;查表内容送查表内容送A JMP A+DPTR ;实现多分支转移;实现多分支转移TAB:DB ADDR0 -TAB ;DB ADDR1 -TAB DB ADDRn -TAB ADDR0: ;程序段;程序段0 ADDR1: ;程序段;程序段1 ADDR n: ;程序段;程序段n A = ?0处理一处理二处理1nPC

22、= DPTR+A = TAB+ADDRn-TAB = ADDRn(4)4)转移指令表法转移指令表法。用分支转移指令用分支转移指令 JMP A+DPTRJMP A+DPTR。设。设R7R6=分支号分支号MTJS:MOV DPTR,#TAB;指向表首地址;指向表首地址 MOV A,R7 ;分支号高字节;分支号高字节3 MOV B,#03H MUL AB ;乘积不超过;乘积不超过1字节字节 ADD A,DPH MOV DPH,A MOV A,R6 ;分支号低字节;分支号低字节3 MOV B,#03H MUL AB XCH A,B ADD A,DPH ;DPHDPH+(R7、R6)3)高字节高字节 M

23、OV DPH,A XCH A,B ;A(R7、R6)3)低字节低字节TAB: LJMP ADDR0 ;转移指令表转移指令表LJMP ADDR1LJMP ADDRNADDR0: ;程序段;程序段0 ADDR1: ;程序段;程序段1 A+DPTRTAB+R7R6A+DPTRTAB+R7R63 3DPTRTABDPTRTABJMP A+DPTRJMP A+DPTRLJMP ROUT0LJMP ROUT0 LJMP ROUT1LJMP ROUT1LJMP ROUTnLJMP ROUTnR6R6R7R73 3DPLDPLDPHDPHA A+ +A A0 0A AB BTABLTABLTABHTABH 主

24、要特点:主要特点:大大缩短程序,减少占用程序空间;大大缩短程序,减少占用程序空间;程序结构优化,清晰易读,循环结构使程序紧凑;程序结构优化,清晰易读,循环结构使程序紧凑;可以实现多重循环控制,可以实现多重循环控制,循环嵌套循环嵌套;循环程序主要由循环常数循环程序主要由循环常数初始化部分初始化部分、循环体循环体、结束部分结束部分三部分组成三部分组成循环控制 ?循环执行循环结束循环初始化YN一初始化部分一初始化部分循环循环准备工作准备工作。如:清结果单元、设。如:清结果单元、设指针、设循环控制变量初值等。指针、设循环控制变量初值等。二循环体二循环体循环执行部分:需多次重复处理的工作。循环执行部分:

25、需多次重复处理的工作。循环控制部分:循环控制部分: 1.1.修改指针和循环控制变量。修改指针和循环控制变量。 2.2.检测循环条件:满足循环条件,继续循环,否则退出循环。检测循环条件:满足循环条件,继续循环,否则退出循环。三三. .结束部分结束部分 分析、处理和保存循环结果。分析、处理和保存循环结果。至少至少1 1次循环的循环结构:选用次循环的循环结构:选用先执行先执行后判断的循环结构。后判断的循环结构。允许允许0 0次循环的循环结构:选用次循环的循环结构:选用先判断先判断后执行的循环结构。后执行的循环结构。简单循环结构:循环体中不套循环。简单循环结构:循环体中不套循环。【例【例4-8】 :计

26、算:计算1+2+1+2+10+10的和并保存在内的和并保存在内RAMRAM的的Y Y单元单元YEQU20HORG 0000HCLRA;清部分和清部分和MOV R0, #01;置累计初值置累计初值LOOP:CJNER0, #11, AD ;判断是否完成判断是否完成MOV Y, A;保存结果保存结果RET;结束结束AD:ADDA, R0;计算部分和计算部分和INCR0;修改循环计数器修改循环计数器SJMP LOOP;循环循环设有一组数存放在内设有一组数存放在内RAMRAM从从DATADATA开始的连续单元中,数据长度放在开始的连续单元中,数据长度放在DATA1DATA1单元中,使编写程序找出其中的

27、最大数,并存入单元中,使编写程序找出其中的最大数,并存入DATA2DATA2单元单元Data2EQU40HData1EQU41HDataEQU42HORG0000HMOVR0, #Data ;设置地址指针,并指向存放数据的起始单元设置地址指针,并指向存放数据的起始单元MOVData2, R0;将第一个数当作当前最大数将第一个数当作当前最大数DECData1;修改剩余的数据个数修改剩余的数据个数NEXT: INCR0;指向下一个数据单元指向下一个数据单元MOVA, R0;取当前数据取当前数据CJNEA, Data2, COMP;比较当前数与当前最大数比较当前数与当前最大数COMP: JCCON

28、;若当前数小于当前最大数,则继续若当前数小于当前最大数,则继续。MOVData2, A;否则,把当前数当作最大数否则,把当前数当作最大数CON:DJNZData1, NEXT;判断数据是否比较完毕判断数据是否比较完毕RET;比较结束比较结束【例【例4-9】 :求最大数:求最大数内循环控制内循环控制 ?循环工作循环工作循环结束循环结束外循环控制外循环控制 ?内循环初始化内循环初始化开始开始外循环初始化外循环初始化注意循环嵌套注意循环嵌套允许允许外重循环嵌套内重循环外重循环嵌套内重循环循环体循环体不能不能交叉交叉不能不能从循环程序外部跳入循从循环程序外部跳入循环程序内部环程序内部【例【例4-10】

29、软件延时程序软件延时程序1s延时程序延时程序( (设时钟设时钟f=12MHz,T=1s)f=12MHz,T=1s)DEL1s:MOV R3, #10 ;单周期,1TDEL1:MOV R4, #200;单周期,1TDEL2:MOV R5, #248;单周期,1TDEL3:DJNZ R5, DEL3 ;双周期,2TNOP;单周期,1TDJNZ R4, DEL2 ;双周期,2TDJNZ R3, DEL1 ;双周期,2TRET;双周期,2Tt=(2T248)+4T)200+3T)10+3T)1s=1000033s1s1、什么叫程序设计?、什么叫程序设计?程序设计:就是人们把欲解决问题的程序设计:就是人

30、们把欲解决问题的步步骤骤用计算机能接受的用计算机能接受的语言语言出来的出来的过程过程复习提问分析分析确定确定写出写出画出画出编制编制汇编汇编编程编程人人 解决问题解决问题计算机计算机 解决问题解决问题复习提问2、汇编语言程序的四种基本结构是什么?、汇编语言程序的四种基本结构是什么?按编写的先后顺序执行、按编写的先后顺序执行、PC自动加自动加1含有转移类指令、具有含有转移类指令、具有判断决策判断决策能力能力特定功能的独立程序段特定功能的独立程序段 子程序:能完成某项特定功能的独立程序段,可被子程序:能完成某项特定功能的独立程序段,可被反复调用反复调用。 具有具有通用性、完整性通用性、完整性和和独

31、立性独立性. 一、一、子程序子程序结构结构 三、三、子程序子程序参数传递参数传递 二、二、子程序的调用与返回子程序的调用与返回CALL SCALL S调用程序或主程序RET被调用程序或子程序S1.1.提供足够的调用信息提供足够的调用信息: :如:子程序名、子程序功能、入口参如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序资源、子程序中调用的其他子程序名。名。2.2.子程序第一条指令必须为子程序第一条指令必须为标号标号标号标号作为子程序入口地址作为子程序入口地址作为作为子程序名子程序名供主程序调用供主程序调用3.3.子程序

32、最后一条指令必须为子程序最后一条指令必须为RET(I)RET(I)恢复断点,返回主程序,恢复断点,返回主程序,一、子程序结构一、子程序结构 ;子程序名;子程序名 ;子程序功能:;子程序功能: ;占用资源:;占用资源: ;调用的其他子程序名调用的其他子程序名 子程序名:子程序名: .; . . RET(I)入口参数:调用子程序之前,需要主程序传给子程序的参数。入口参数:调用子程序之前,需要主程序传给子程序的参数。出口参数:子程序送回给主调程序的结果参数。出口参数:子程序送回给主调程序的结果参数。 1、调用子程序、调用子程序之前:之前:设置好堆栈,配好入口参数。设置好堆栈,配好入口参数。 2、主程

33、序通过调用指令、主程序通过调用指令:ACALL、 LCALL进入子程序进入子程序 注意现场的注意现场的保护保护 PUSH PSW、A、B、改变、改变R组组 执行子程序操作执行子程序操作嵌套:注意嵌套深度与堆栈区大小的问题嵌套:注意嵌套深度与堆栈区大小的问题 注意现场的注意现场的恢复恢复 POP B 、 A、 PSW 3、子程序用返回指令、子程序用返回指令RET(I)结束子程序结束子程序 并并保证保证堆栈栈顶为调用程序的返回地址。堆栈栈顶为调用程序的返回地址。二、子程序的调用与返回二、子程序的调用与返回注意注意防止自然进入子程序防止自然进入子程序和自然退出子程序和自然退出子程序CPU正在执行子正

34、在执行子程序程序SubACPU正在执行子正在执行子程序程序SubB正在执行主程序正在执行主程序 入口参数传递入口参数传递 无参数传递无参数传递: 主程序和子程序之间不需要参数传递主程序和子程序之间不需要参数传递 通过寄存器传递通过寄存器传递 主程序将参数主程序将参数存入存入A、Rn、DPTR 子程序从子程序从A、Rn、DPTR中中取取参数参数 通过地址传递通过地址传递 主程序将参数主程序将参数存入存入RAM的单元中的单元中 子程序从子程序从RAM的单元中的单元中取取参数参数 通常用通常用R0、R1、DPTR的间接寻址的间接寻址 通过堆栈传递通过堆栈传递 主程序用主程序用PUSH将参数将参数压入

35、压入堆栈;堆栈; 子程序按堆栈指针来间接子程序按堆栈指针来间接访问访问参数参数三、子程序参数传递三、子程序参数传递主程序主程序子程序子程序 出口参数传递出口参数传递 无参数传递无参数传递: 通过寄存器传递通过寄存器传递 通过地址传递通过地址传递 通过堆栈传递通过堆栈传递 方法简单、通用性强方法简单、通用性强 例:例: ORG 0000H Main: MOV SP,#30H MOV R0,#40h MOV R7,#10H LCALL Zero SJMP $;子程序名:子程序名:Zero;功能功能:对内部数据区清零对内部数据区清零;入口参数:入口参数:R0内部数据区首地址内部数据区首地址; R7内

36、部数据区长度内部数据区长度;出口参数:无出口参数:无;占用资源:占用资源:R0,R7;调用的其他子程序名调用的其他子程序名:无无Zero:push A ;现场的保护现场的保护 clr ALoop:mov R0,A inc R0 djnz,R7,Loop POP A ;现场的恢复现场的恢复 ret 【例【例4-11】试编程计算试编程计算y=a12+a22+a102;ai存放在内存放在内RAM20H单单元中且小于元中且小于10,结果按高低顺序存放在,结果按高低顺序存放在R2、R3中。中。循环控制 ?循环执行循环执行循环结束循环初始化YN开始建立栈底建立栈底 SP#60H设置数据指针设置数据指针R0

37、#20H设置循环计数器设置循环计数器R7#10结果单元清零结果单元清零R2、R3 #0A取取ai =R0A调用子程序调用子程序SQRT计算计算ai2R3A+部分和低字节部分和低字节R3R2C+部分和高字节部分和高字节R2修改数据指针指向下一数据单元修改数据指针指向下一数据单元R0 R0+1计数器R7-10?YN结束开始堆栈初始化循环初始化取取ai调用子程序计算调用子程序计算ai2计算计算ai2存入结果单元存入结果单元循环控制 ?YN结束【例【例4-11】ORG0000HMAIN:MOVSP, #60H;堆栈初始化MOVR0, #20H;设置数据指针MOVR7, #10;设置循环计数器MOVR3

38、, #00H;清结果低低字节单元MOVR2, #00H;清结果高高字节单元NEXT: MOVA, R0;取数据ACALL SQRT;调用求平方数子程序ADDA, R3;平方部分和MOVR3, A;保存低低字节CLRA ;部分和高字节加ADDC A, R2;部分和低字节产生的进位MOVR2, A ;保存高高字节INCR0;指向下一个数据单元DJNZR7, NEXT;未完,继续SJMP$试编程计算试编程计算y=a12+a22+a102;ai存放在内存放在内RAM20H单单元中且小于元中且小于10,结果按高低顺序存放在,结果按高低顺序存放在R2、R3中。中。开始建立栈底建立栈底 SP#60H设置数据

39、指针设置数据指针R0#20H设置循环计数器设置循环计数器R7#10结果单元清零结果单元清零R2、R3 #0A取取ai =R0A调用子程序调用子程序SQRT计算计算ai2R3A+部分和低字节部分和低字节R3R2C+部分和高字节部分和高字节R2修改数据指针指向下一数据单元修改数据指针指向下一数据单元R0 R0+1计数器R7-10?YN结束【例【例4-11】试编程计算试编程计算y=a12+a22+a102;ai存放在内存放在内RAM20H单单元中且小于元中且小于10,结果按高低顺序存放在,结果按高低顺序存放在R2、R3中。中。;子程序名:子程序名: SQRT;功能功能:求A平方的子程序;入口参数:入

40、口参数:A;出口参数:出口参数:A;占用资源:占用资源:DPTR;调用的其他子程序名调用的其他子程序名:无无SQRT:MOVDPTR, #TAB;取平方表首地址MOVCA, A+DPTR;查平方表RET;子程序返回TAB: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100END【例【例4-10】通过堆栈传递参数通过堆栈传递参数码制转换码制转换2 2:将内:将内RAM 20HRAM 20H单元中十六进制数转换为两位单元中十六进制数转换为两位ASCIIASCII,结,结果高低顺序存入果高低顺序存入21H21H与与22H22H单元。单元。 54PCLPCHSP34

41、SPSP34ORG0000HMAIN:MOVSP, #60H;设置堆栈初值设置堆栈初值MOVA, 20H;取被转换的取被转换的16进制数进制数SWAPA;交换位置,以便对高位进行转换交换位置,以便对高位进行转换PUSHACC;压入堆栈压入堆栈ACALL HEXASC;调用转换子程序,对高位进行转换调用转换子程序,对高位进行转换POP21H;从堆栈中取出转换结果从堆栈中取出转换结果PUSH20H;将将原数据压入堆栈将将原数据压入堆栈ACALL HEXASC;调用转换子程序,对低位进行转换调用转换子程序,对低位进行转换POP22H;从堆栈中取出转换结果从堆栈中取出转换结果SJMP$;转换结束,等待

42、转换结束,等待HEXASC:MOVR1, SP;转移堆栈指针,因转移堆栈指针,因SP不可修改不可修改DECR1;下移指针下移指针,以便指向被转换数据单元以便指向被转换数据单元DECR1MOVA, R1;从栈区中取出被转换数据从栈区中取出被转换数据ANLA, #0FH ;屏蔽高半字节屏蔽高半字节,只对低半字节转换只对低半字节转换ADDA,#02H;修正查表指针修正查表指针MOVCA, A+PC;查查ASCII表表MOVR1, A;保存转换结果到栈区保存转换结果到栈区RET;转换子程序返回转换子程序返回TAB:DB30H, 31H, 32H, 33H, 34H, 35H, 36H, 37HDB38

43、H, 39H, 41H, 42H, 43H, 44H, 45H, 46HEND源程序的编写要依据源程序的编写要依据8051汇编语言的汇编语言的基本规则基本规则(指令(指令系统),特别要用好常用的系统),特别要用好常用的汇编命令汇编命令(即伪指令),(即伪指令),例如下面的程序段:例如下面的程序段: ORG 0040H MOV A,#7FH MOV R1,#44H END 这里的这里的ORG和和END是两条伪指令,其作用是告诉汇编是两条伪指令,其作用是告诉汇编程序此汇编源程序的程序此汇编源程序的起止起止位置。位置。编辑好的源程序应以编辑好的源程序应以“ . ASM”扩展名存盘,以备汇编扩展名存盘

44、,以备汇编程序调用。程序调用。源程序不允许使用全角字符,注释中除外。源程序不允许使用全角字符,注释中除外。 将汇编语言将汇编语言源程序源程序转换转换为计算机能执行的为计算机能执行的机器码机器码形式的目标程序的过程叫汇编形式的目标程序的过程叫汇编。汇编指令与机器码指令有一一对应的关系。汇编指令与机器码指令有一一对应的关系。常用的汇编有两种方法:手工汇编、机器汇编。常用的汇编有两种方法:手工汇编、机器汇编。汇编程序汇编程序是一种翻译程序,将源程序翻译成目标程序。是一种翻译程序,将源程序翻译成目标程序。源程序源程序(汇编指令程序)(汇编指令程序)目标程序目标程序(机器码指令程序)(机器码指令程序)汇

45、编汇编1、手工汇编:、手工汇编:手工汇编手工汇编时,把程序用助记符指令写出后,通过手工方时,把程序用助记符指令写出后,通过手工方式式查指令编码表查指令编码表,逐个把助记符指令翻译成机器码,然,逐个把助记符指令翻译成机器码,然后把得到的机器码程序(以十六进制形式)键入到单片后把得到的机器码程序(以十六进制形式)键入到单片机开发机中,并进行调试。机开发机中,并进行调试。手工汇编由两次完成手工汇编由两次完成 第一次汇编:确定地址,翻译成各条机器码,字符第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出;标号原样写出; 第二次汇编:标号代真,将字符标号用所计算出的第二次汇编:标号代真,将字符标号

46、用所计算出的具体地址值或偏移量代换。具体地址值或偏移量代换。指令首地址指令首地址 目标程序、目标程序、机器代码机器代码源程序源程序 第一次汇编第一次汇编 第二次汇编第二次汇编 0000 ORG 0000H 0000 7830 7830 MOV R0, #30H 0002 7A0F 7A0F MOV R2, #0FH 0004 752000 752000 MOV 20H, #00H 0007 752100 752100 MOV 21H, #00H 000A E6 E6 MOV A, R0 000B 08 08 AD:INCR0 000C C3 C3 CLRC 000D 36 36 ADDCA,

47、R0 000E 50RT 5002 JNCRT 0010 0520 0520 INC20H 0012 DAAD DAF7 RT:DJNZ R2, AD 0014 F521 F521 MOV 21H, A 0016 END 机器汇编机器汇编是在常用的个人计算机是在常用的个人计算机PC上,使用交叉汇上,使用交叉汇编程序将汇编语言源程序转换为机器码形式的目标程序。编程序将汇编语言源程序转换为机器码形式的目标程序。生成的目标程序由生成的目标程序由PC机传送到开发机上,经调试无误机传送到开发机上,经调试无误后,再固化到单片机的程序存储器后,再固化到单片机的程序存储器ROM中。中。机器汇编机器汇编也分两次

48、扫描过程完成。也分两次扫描过程完成。第一次扫描:第一次扫描: 检查语法错误,确定符号名字;检查语法错误,确定符号名字; 建立使用的全部符号名字表;建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或数)。每一符号名字后跟一对应值(地址或数)。第二次扫描:第二次扫描: 是在第一次扫描基础上,将符号地址转换成真地址(代真)是在第一次扫描基础上,将符号地址转换成真地址(代真) 利用操作码表将助记符转换成相应的目标码利用操作码表将助记符转换成相应的目标码。 源程序经过机器汇编后,形成的若干文件中源程序经过机器汇编后,形成的若干文件中含有两个主要文件,含有两个主要文件,一是列表文件一是列表文件.LST,另一个另一个是目标码文件是目标码文件.HEX。因汇编软件的不同,文件的。因汇编软件的不同,文件的格式及信息会有一些不同。但主要信息如下:格式及信息会有一些不同。但主要信息如下:列表文件:列表文件:地地 址址 目标码目标码 汇编程序汇编程序 ORG 0040H0040H 747F MOV A,#7FH0042H 7944 MOV R1,#44H END目标码文件:目标码文件:起始符起始符 字节数字节数 起始地址起始地址 数据类型数据类型 目标代码目标代码 校验和校验和 :CC AAAA TT DDDD SS

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!