《微机原理及应用第四章汇编语言程序设计基础.ppt》由会员分享,可在线阅读,更多相关《微机原理及应用第四章汇编语言程序设计基础.ppt(54页珍藏版)》请在三一办公上搜索。
1、第四章 汇编语言程序设计基础,4-1 汇编语言程序设计方法,4-2 汇编语言程序结构,4-3 汇编语言的编辑与汇编,4-1 汇编语言程序设计方法,2 程序设计步骤,1 程序及程序设计,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、出来的过程。,编程语言机器语言汇编语言高级语言(字符型图形化),2、程序设计步骤,分析课题确定算法和数据结构确定操作步骤画流程图编制源程序调试程序,分析课题:对具体问题具体分析,并抽象出数学模型 确定算法:解决同一问题有多种方法,从中选择一种最佳的方法 确定数据结构:合理安排数据结构,合理选择和分配内存空间、工作寄存器以及I/O接口地址 程序模块:把整个问题分成若干个功能模块,画出层次图及通信 画流程图:以图示形式表示解决具体问题的思路和方法 编制源程序:精心挑选合适的指令和操作数的寻址方式用注释行说明程序,便于阅读、调试和修改。调试程序:,流程图图例,起止框处理框判断框连线,4-2 汇编语言
3、程序结构,程序设计方法结构化设计,三种基本控制结构,顺序结构选择结构循环结构一个子程序结构子程序中断服务子程序,程序开发方法自顶向下方法先顶层开发先写主程序,后写子程序自底向上方法先底层开发先写子程序,后写主程序混合方法,程序设计:就是人们用计算机能接受的语言,把欲解决问题的算法和步骤描述出来的过程。,编程语言机器语言汇编语言高级语言(字符型图形化),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单元。,STREQU50H;头文件ORG0000HMOVR1,#STRMOVA,R1;取50H单元中的数据ANLA,#0FH;拆字,屏蔽高4位SWAP A;高、低4位互换INCR1;指向51H单元XCHA,R1;51H单元内容与累加器内容
5、互换ANLA,#0FH;拆字,取原51H单元的低4位ORLA,R1;拼字INC R1MOVR1,A;存结果RETEND,【例4-1】拆字、拼字程序将片内RAM 50H单元的低4位取出当作高4位,与51H单元的低4位合成一个字节后存入52H单元。,STREQU50H;头文件ORG0000HMOVR1,#STR;指向50H单元MOVA,R1;取50H单元中的数据SWAPA;高、低4位互换INCR1;指向51H单元XCHDA,R1;拆字,拼字;51H单元的低4位;与A的低4位内容互换INC R1;指向52H单元MOVR1,A;存结果RETEND,【例4-2】数制转换将片内RAM 30H单元的无符号二
6、进制数转换成BCD码数,结果按高低顺序依次存放到33H、32H、31H单元。,ORG0000HHEX_D:MOVA,30H;取原数据数MOVB,#10DIVAB;二进制数除10MOV31H,B;将余数(BCD码的个位)送31HMOVB,#10DIVAB;商再继续除10MOV32H,B;将余数(BCD码的十位)送32HMOV33H,A;将商(BCD码的百位)送33HRET,【例4-3】查表程序 关键在:组织具有规律性的表格 求R1中数(015)的平方,结果仍放回到R1中。,ORG 0000HTAB1:MOV A,R1 ADD A,#02H;加上地址偏移量 MOVC A,A+PC;查表 MOV R
7、1,A RET DB 00H,01H,04H,09H;平方表 DB 10H,19H,24H,31H;续表 DB 40H,51H;续表,【例4-3】查表程序求R1中数(015)的平方,结果仍放回到R1中。,ORG0000HTAB2:PUSHDPH;保存DPTR的原值PUSHDPLMOVDPTR,#TAB;取平方表首地址MOVA,R1MOVCA,A+DPTR;查平方表MOVR1,APOPDPL;恢复DPTR的原值POPDPHRETTAB:DB00H,01H,04H,09H;平方表DB10H,19H,24H,31HDB40H,51H,以PC为指针查表程序输入参数:R2 输出参数:R3R4,TB1:m
8、ov 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 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 输出参数:R2R3,LTB2:mov DPTR,#TAB2 mov A,R3 clr C rlc A mov R3,A xch
9、 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,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,4-2-2 分支结构程序设计,特点:程序中含有转移类指令 关键:正确选用转移指令,无条件分支程序程序设计者事先设计好的流向LJMP、AJMP、SJMP、JMP、LCALL、ACALL、R
10、ET(I)有条件分支程序根据程序执行过程中对标志位、A、内部RAM的某些单元或位的影响结果决定程序的流向。使cpu具有判断决策能力JZ/JNZ、CJNE、DJNZ、位控制转移类指令的有机配合,注意 使用条件转移指令形成分之前一定安排可供条件转移指令进行判别的条件。JC LOOP 正确选定所用的转移条件、转移目标地址(标号)及转移范围,一、单重分支程序,一个判断决策框,程序有两条出路,二选一。由一个条件转移指令实现,有三种典型单分支结构:,补码绝对值,例 求R2中补码绝对值,正数不变,负数变补。MOV A,R2 JNB ACC.7,NEXT;为正数?CPL A;负数变补 INC A MOV R2
11、,ANEXT:SJMP NEXT;结束,JNB,【例4-4】无符号数的比较比较外部RAM Data1和Data2单元的两个无符号数,并将大数存入Data3单元中,Data1、Data2和Data3为连续的单元,ORG 0000HCOM1:MOVA,40H CJNEA,41H,L1;两数比较L1:JCJ2;C=1,则A小转BIG2BIG1 MOV42H,A;大数送42HRETBIG2:XCHA,41H;大数送ASJMPBIG1END,先看数据放在内部RAM的情况,data1 equ 1000hcom1:movdptr,#data1movxa,DPTRmov b,ainc DPTRmovx a,D
12、PTRcjne a,b,l1l1:jc big2;c=1,则a小big1:inc dptrmovx dptr,aretbig2:xch a,bsjmp big1end,【例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值ORG0000HHEXASC:MOVA,R2;将该十六进制数暂存于A中CJNE
13、 A,#0AH,$+3JNCADD_37;若大于等于0AH,则加37HADD_30:ADDA,#30H;若小于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;A10转移 subb A,#07hASCHEX1:ret,二、多重分支程序,程序有两条以上的出路,多选一。,2、按分支号
14、转移,使用散转指令JMP A+DPTR(1)转向地址表法:DW(2)转向地址偏移量表法:DB(3)查表与RET指令结合 MOVC和RET(4)转移指令表法:LJMP或AJMP,1、多次使用条件转移指令,形成两个以上判断框。CJNE指令和JC、JNC有机配合 JB、JNB、JBCJZ、JNZ,1、多次使用条件转移指令,形成两个以上判断框。,例 求符号函数Y=SGN(X)输入X存入40H,输出Y存入41H中+1 当 X0Y=SGN(X)=0 当 X=0-1 当 X0,SYMB:MOV A,40H;取X JZ STOR;X=0,Y=X JB ACC.7,MINUS;X0 MOV A,#1;X0,Y=
15、+1STOR:MOV 41H,A;保存Y RETMINUS:MOV A,#0FFH;X0,Y=-1 SJMP STOR,要点:将流程图按条件NO优先方式拉直 在流程图汇合处和转移目的地址处加标号,比较内部RAM Data1和Data2单元内以补码形式表示的带符号数,并将大数存入BIG单元,小数存入SMALL单元,若相等,则建立起标志位F0,Data1EQU40hData2EQU41hBIGEQU30HSMALLEQU31HORG0000HCOM2:MOVA,Data1 XRLA,Data2JNZSTEP1;两数不等,转STEP1SETBF0;两数相等,F0置位RETSTEP1:JBACC.7,
16、TEST;两数异号,转TESTXRLA,Data2;两数同号,恢复Data1SUBBA,Data2;比较JCSTEP3;Data1小,转STEP3STEP2:MOVBIG,Data1;Data1大MOVSMALL,Data2 RETTEST:XRLA,Data2;恢复Data1JNBACC.7,STEP2;Data1为正,大,转STEP2STEP3:MOVSMALL,Data1MOVBIG,41HRET,【例4-6】带符号数的比较:XRL指令和JNZ、JB、JNC有机配合,分支号R2=0,程序转移到PROG0处;当分支号R2=1,程序转移到PROG1处;当分支号R2=n,程序转移到PROGn处
17、。,【例4-7】散转程序:使用JMP 实现多分支程序转移,ORG0000HMOVDPTR,#TAB;取转移地址表首地址MOVA,R2;取变量值ADDA,R2;对变量乘2修正JMPA+DPTRTAB:AJMPPROG0AJMPPROG1AJMPPROGn-1AJMPPROGn,行李计价:当G5,M=G3;当G5,M=G3+(G-5)(5-3),FRT:MOV A,40H;取行李重量计价单位kg MOV R3,A MOV B,#03H;M=G3 MUL AB MOV R2,A;暂存3G MOV A,R3;取回G CJNE A,#05H,L1;G5?WETC:MOV 41H,R2;存结果M RETL
18、1:JC WETC;是,转至WETC SUBB A,#05H;否则M=3G+2(G-5)RLC A ADD A,R2 MOV R2,A SJMP WETC,例:某车站托运行李,规定重量不超过5kg,每公斤按3元计价,若超过5kg,其超重部分每公斤加收2元。试编制程序,当行李重量为G时,计算托运费M,CJNE指令和JC、JNC有机配合,2、按分支号转移,如:分支号A=0,程序转移到ADDR0处;当分支号A=1,程序转移到ADDR1处;当分支号A=n,程序转移到ADDRn处。,(1)、(3)用转向地址表法。由PUSH同RET指令配合;设分支号已存入A。MTJS:MOV DPTR,#TAB;取表首地
19、址 CLR C;分支号2 RLC A JNC LOW;若A127,则转移 INC DPH;若A127,则DPTR加256LOW:MOV R2,A;修正值送R2保存 MOVC A,A+DPTR;取分支地址高8位 XCH A,R2;AR2 INC A MOVC A,A+DPTR;取分支地址低八位 PUSH ACC;分支地址低八位入栈保存 MOV A,R2 PUSH ACC;分支地址高8位入栈保存 RET;分支地址PC,转移TAB:DW ADDR0;分支转移地址表DW ADDR1;高字节地址,低字节地址 ADDR0:;程序段0,2、按分支号转移,JMP4:mov R2,#1 mov DPTR,#TB
20、L4 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和 jmp 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 HaltPRG3
21、:mov R0,#3Halt:sjmp$,(2)用地址偏移量表法。巧妙利用JMP A+DPTR和MOVC A,A+DPTR两条指令配合;设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 ADDRn:;程序段n,PC=DPTR+A=TAB+ADDRn-TAB=ADDRn,(4)转移指令表法。用分支转移指令 JMP A+DPTR。
22、设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)高字节 MOV DPH,A XCH A,B;A(R7、R6)3)低字节 JMP A+DPTR;实现多分支转移TAB:LJMP ADDR0;转移指令表LJMP ADDR1LJMP ADDRNADDR0:;程序段0 ADDR1:;程序段1,4-2-3 循环结构程序设
23、计,主要特点:大大缩短程序,减少占用程序空间;程序结构优化,清晰易读,循环结构使程序紧凑;可以实现多重循环控制,循环嵌套;循环程序主要由循环常数初始化部分、循环体、结束部分三部分组成,一、循环程序的构成二、单重循环程序三、多重循环程序,一、循环程序的构成,一初始化部分循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。,二循环体循环执行部分:需多次重复处理的工作。循环控制部分:1.修改指针和循环控制变量。2.检测循环条件:满足循环条件,继续循环,否则退出循环。三.结束部分 分析、处理和保存循环结果。至少1次循环的循环结构:选用先执行后判断的循环结构。允许0次循环的循环结构:选用先判断后
24、执行的循环结构。,二、单重循环程序简单循环结构:循环体中不套循环。,【例4-8】:计算1+2+10的和并保存在内RAM的Y单元,YEQU20HORG0000HCLRA;清部分和MOVR0,#01;置累计初值LOOP:CJNER0,#11,AD;判断是否完成MOVY,A;保存结果RET;结束AD:ADDA,R0;计算部分和INCR0;修改循环计数器SJMPLOOP;循环,设有一组数存放在内RAM从DATA开始的连续单元中,数据长度放在DATA1单元中,使编写程序找出其中的最大数,并存入DATA2单元,Data2EQU40HData1EQU41HDataEQU42HORG0000HMOVR0,#D
25、ata;设置地址指针,并指向存放数据的起始单元MOVData2,R0;将第一个数当作当前最大数DECData1;修改剩余的数据个数NEXT:INCR0;指向下一个数据单元MOVA,R0;取当前数据CJNEA,Data2,COMP;比较当前数与当前最大数COMP:JCCON;若当前数小于当前最大数,则继续。MOVData2,A;否则,把当前数当作最大数CON:DJNZData1,NEXT;判断数据是否比较完毕RET;比较结束,【例4-9】:求最大数,三、多重循环程序,注意循环嵌套允许外重循环嵌套内重循环循环体不能交叉不能从循环程序外部跳入循环程序内部,【例4-10】软件延时程序1s延时程序(设时
26、钟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;双周期,2T,t=(2T248)+4T)200+3T)10+3T)1s=1000033s1s,1、什么叫程序设计?程序设计:就是人们把欲解决问题的算法和步骤用计算机能接受的语言描述出来的过程,复习提问,问题,分析,算法,确定,步骤,写出,流程图,画出,源程序,编制,目标程序,汇编
27、,程序存储器,编程,人 解决问题,计算机 解决问题,复习提问,2、汇编语言程序的四种基本结构是什么?顺序结构:按编写的先后顺序执行、PC自动加1分支结构:含有转移类指令、具有判断决策能力循环结构:重复执行某段程序子程序结构:具有特定功能的独立程序段,4-2-4 子程序结构程序设计,子程序:能完成某项特定功能的独立程序段,可被反复调用。具有通用性、完整性和独立性.,一、子程序结构,三、子程序参数传递,二、子程序的调用与返回,1.提供足够的调用信息:如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。2.子程序第一条指令必须为标号标号作为子程序入口地址作
28、为子程序名供主程序调用3.子程序最后一条指令必须为RET(I)恢复断点,返回主程序,,一、子程序结构,标准子程序的格式:;子程序名;子程序功能:;入口参数:;出口参数:;占用资源:;调用的其他子程序名子程序名:.;.RET(I),入口参数:调用子程序之前,需要主程序传给子程序的参数。出口参数:子程序送回给主调程序的结果参数。,1、调用子程序之前:设置好堆栈,配好入口参数。2、主程序通过调用指令:ACALL、LCALL进入子程序注意现场的保护 PUSH PSW、A、B、改变R组执行子程序操作嵌套:注意嵌套深度与堆栈区大小的问题注意现场的恢复 POP B、A、PSW3、子程序用返回指令RET(I)
29、结束子程序并保证堆栈栈顶为调用程序的返回地址。,二、子程序的调用与返回,注意防止自然进入子程序和自然退出子程序,入口参数传递无参数传递:主程序和子程序之间不需要参数传递通过寄存器传递主程序将参数存入A、Rn、DPTR子程序从A、Rn、DPTR中取参数通过地址传递主程序将参数存入RAM的单元中子程序从RAM的单元中取参数通常用R0、R1、DPTR的间接寻址通过堆栈传递主程序用PUSH将参数压入堆栈;子程序按堆栈指针来间接访问参数,三、子程序参数传递主程序子程序,出口参数传递无参数传递:通过寄存器传递通过地址传递通过堆栈传递,通过寄存器和地址传递,方法简单、通用性强例:ORG 0000HMain:
30、MOV SP,#30H MOV R0,#40h MOV R7,#10H LCALL Zero SJMP$,;子程序名:Zero;功能:对内部数据区清零;入口参数:R0内部数据区首地址;R7内部数据区长度;出口参数:无;占用资源: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中。,【例4-11】通过寄存器传递,ORG0000
31、HMAIN:MOVSP,#60H;堆栈初始化MOVR0,#20H;设置数据指针MOVR7,#10;设置循环计数器MOVR3,#00H;清结果低字节单元MOVR2,#00H;清结果高字节单元NEXT:MOVA,R0;取数据ACALLSQRT;调用求平方数子程序ADDA,R3;平方部分和MOVR3,A;保存低字节CLRA;部分和高字节加ADDCA,R2;部分和低字节产生的进位MOVR2,A;保存高字节INCR0;指向下一个数据单元DJNZR7,NEXT;未完,继续SJMP$,试编程计算y=a12+a22+a102;ai存放在内RAM20H单元中且小于10,结果按高低顺序存放在R2、R3中。,【例4
32、-11】通过寄存器传递,试编程计算y=a12+a22+a102;ai存放在内RAM20H单元中且小于10,结果按高低顺序存放在R2、R3中。,;子程序名:SQRT;功能:求A平方的子程序;入口参数: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:将内RAM 20H单元中十六进制数转换为两位ASCII,结果高低顺序存入21H与22H单元。,54,PCL,PCH,
33、SP,34,SP,SP,34,ORG0000HMAIN:MOVSP,#60H;设置堆栈初值MOVA,20H;取被转换的16进制数SWAPA;交换位置,以便对高位进行转换PUSHACC;压入堆栈ACALLHEXASC;调用转换子程序,对高位进行转换POP21H;从堆栈中取出转换结果PUSH20H;将将原数据压入堆栈ACALLHEXASC;调用转换子程序,对低位进行转换POP22H;从堆栈中取出转换结果SJMP$;转换结束,等待,HEXASC:MOVR1,SP;转移堆栈指针,因SP不可修改DECR1;下移指针,以便指向被转换数据单元DECR1MOVA,R1;从栈区中取出被转换数据ANLA,#0FH
34、;屏蔽高半字节,只对低半字节转换ADDA,#02H;修正查表指针MOVCA,A+PC;查ASCII表MOVR1,A;保存转换结果到栈区RET;转换子程序返回TAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46HEND,4.3 汇编语言的编辑与汇编,、汇编语言源程序的编辑、源程序的汇编,、汇编语言源程序的编辑,源程序的编写要依据8051汇编语言的基本规则(指令系统),特别要用好常用的汇编命令(即伪指令),例如下面的程序段:ORG 0040H MOV A,#7FH MOV R1,#44H END 这里的ORG和E
35、ND是两条伪指令,其作用是告诉汇编程序此汇编源程序的起止位置。编辑好的源程序应以“.ASM”扩展名存盘,以备汇编程序调用。源程序不允许使用全角字符,注释中除外。,、源程序的汇编,将汇编语言源程序转换为计算机能执行的机器码形式的目标程序的过程叫汇编。,汇编指令与机器码指令有一一对应的关系。常用的汇编有两种方法:手工汇编、机器汇编。汇编程序是一种翻译程序,将源程序翻译成目标程序。,、源程序的汇编,1、手工汇编:手工汇编时,把程序用助记符指令写出后,通过手工方式查指令编码表,逐个把助记符指令翻译成机器码,然后把得到的机器码程序(以十六进制形式)键入到单片机开发机中,并进行调试。手工汇编由两次完成第一
36、次汇编:确定地址,翻译成各条机器码,字符标号原样写出;第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。,手工汇编举例,指令首地址 目标程序、机器代码源程序 第一次汇编 第二次汇编 0000 ORG0000H 0000 7830 7830 MOVR0,#30H 0002 7A0F 7A0F MOVR2,#0FH 0004 752000 752000 MOV20H,#00H 0007 752100 752100 MOV21H,#00H 000A E6 E6 MOVA,R0 000B 08 08 AD:INCR0 000C C3 C3 CLRC 000D 36 36 ADDCA,
37、R0 000E 50RT 5002 JNCRT 0010 0520 0520 INC20H 0012 DAAD DAF7 RT:DJNZR2,AD 0014 F521 F521 MOV21H,A 0016 END,机器汇编是在常用的个人计算机PC上,使用交叉汇编程序将汇编语言源程序转换为机器码形式的目标程序。生成的目标程序由PC机传送到开发机上,经调试无误后,再固化到单片机的程序存储器ROM中。,机器汇编也分两次扫描过程完成。第一次扫描:检查语法错误,确定符号名字;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。第二次扫描:是在第一次扫描基础上,将符号地址转换成真地址(代真)利用操作码表将助记符转换成相应的目标码。,2、机器汇编,源程序经过机器汇编后,形成的若干文件中含有两个主要文件,一是列表文件.LST,另一个是目标码文件.HEX。因汇编软件的不同,文件的格式及信息会有一些不同。但主要信息如下:,列表文件:地 址 目标码 汇编程序 ORG 0040H0040H 747F MOV A,#7FH0042H 7944 MOV R1,#44H END目标码文件:起始符 字节数 起始地址 数据类型 目标代码 校验和:CC AAAA TT DDDD SS,2、机器汇编,
链接地址:https://www.31ppt.com/p-6284466.html