您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > (2012-4)第四章-汇编语言程序设计
华中科技大学电气与电子工程学院Licheng单片机原理及应用技术1单片机原理及应用技术Ceee-HustLiCheng第一章微型计算机基础程序编制的方法和技巧1.1源程序的编辑和汇编1.2程序基本结构1.3常用程序举例1.42单片机原理及应用技术2020年6月13日9时37分34.1程序编制的方法4.1.1程序编制的步骤一、任务分析二、进行算法的优化三、程序总体设计及流程图绘制开始或结束符号工作任务符号判断分支符号程序连接符号程序流向符号程序流向符号单片机原理及应用技术2020年6月13日9时37分44.1.2汇编语言的语句格式语句行由四个字段组成:[标号:]操作码[操作数][;注释]括号内的部分可以根据实际情况取舍。每个字段之间要用分隔符分隔,可以用作分隔符的符号有空格、冒号、逗号、分号等。如:LOOP:MOVA,#7FH;A←7FH4.1程序编制的方法单片机原理及应用技术2020年6月13日9时37分5一、标号标号是语句地址的标志符号,用于引导对该语句的非顺序访问。有关标号的规定为:二、操作码、操作数由指令助记符表示形式决定。•由1~8个ASCII字符组成。第一个字符必须是字母,其余字符可以是字母、数字或其他特定字符;•不能使用已经定义了的符号作为标号。如指令助记符、寄存器符号名称等;•后边必须跟冒号。4.1程序编制的方法单片机原理及应用技术2020年6月13日9时37分6三、注释注释只是对语句的说明。注释字段可以增加程序的可读性。注释字段必须以分号“;”开头,长度不限,当一行书写不下时,可以换行书写,新行开头也要使用分号“;”。四、数据的表示形式数据可以有以下几种表示形式:•二进制数,末尾以字母B标识。如:10001111B;•十进制数,末尾以字母D标识或将字母D省略。如:88D,66;•十六进制数,末尾以字母H标识。如:78H,0A8H(但应注意的是,十六进制数以字母A~F开头时应在其前面加上数字“0”)ASCII码以单引号括起来标识。如:‘AB’,‘1245’4.1程序编制的方法单片机原理及应用技术2020年6月13日9时37分74.2源程序的编辑和汇编一、源程序的编辑源程序的编写要依据80C51汇编语言的基本规则,特别要用好常用的汇编命令(即伪指令),例如下面的程序段:ORG0040HMOVA,#7FHMOVR1,#44HEND这里的ORG和END是两条伪指令,其作用是告诉汇编程序此汇编源程序的起止位置。编辑好的源程序应以“.ASM”扩展名存盘,以备汇编程序调用。4.2.1源程序的编辑与汇编单片机原理及应用技术2020年6月13日9时37分8二、源程序的汇编将汇编语言源程序转换为单片机能执行的机器码形式的目标程序的过程叫汇编。常用的方法有两种:•手工汇编:通过手工方式查指令编码表,逐个把助记符指令翻译成机器码。•机器汇编:使用交叉汇编程序将汇编语言源程序转换为机器码形式的目标程序。4.2源程序的编辑和汇编单片机原理及应用技术2020年6月13日9时37分9伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。它不是单片机执行的指令,所以没有对应的可执行目标码,汇编后产生的目标程序中不会再出现伪指令。4.2.2伪指令一、起始地址设定伪指令ORG格式为:ORG表达式该指令的功能是向汇编程序说明下面紧接的程序段或数据段存放的起始地址。表达式通常为16进制地址,也可以是已定义的标号地址。4.2源程序的编辑和汇编单片机原理及应用技术2020年6月13日9时37分10二、汇编结束伪指令END格式为:END该指令的功能是结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇编程序将不处理。4.2源程序的编辑和汇编单片机原理及应用技术2020年6月13日9时37分11源程序经过机器汇编后,形成的若干文件中含有两个主要文件,一是列表文件,另一个是目标码文件。但主要信息如下:列表文件:地址目标码汇编程序ORG0040H0040H747FMOVA,#7FH0042H7944MOVR1,#44HEND目标码文件:首地址末地址目标码0040H0044H747F79444.2源程序的编辑和汇编单片机原理及应用技术2020年6月13日9时37分12三、定义字节伪指令DB[标号:]DB字节数据表功能是从标号指定的地址开始,在ROM中定义字节数据。该伪指令将字节数据表中的数据根据从左到右的顺序依次存放在指定的单元中。例如:DB“howareyou?”把字符串中的字符以ASCII码的形式存放在连续的ROM单元中。又如:DB-2,-4,-6,8,10,18把6个数转换为十六进制表示(FEH,FCH,FAH,08H,0AH,12H),并连续地存放在6个ROM。4.2源程序的编辑和汇编单片机原理及应用技术2020年6月13日9时37分13四、定义字伪指令DW[标号:]DW字数据表功能是从标号指定的地址单元开始,在ROM中定义字。该伪指令将字或字表中的数据按从左到右的顺序依次存放在指定的存储单元中。注意:高8位存放在低地址单元,低8位存放在高地址单元。例如:ORG1400HDATA:DW324AH,3CH……汇编后,(1400H)=32H,(1401H)=4AH,(1402H)=00H,(1403H)=3CH。4.2源程序的编辑和汇编单片机原理及应用技术2020年6月13日9时37分14五、空间定义伪指令DS[标号:]DS表达式功能是从标号指定的地址单元开始,在程序存储器中保留由表达式所指定的个数的存储单元作为备用的空间,并都填以零值。例如:ORG3000HBUF:DS50……汇编后,从地址3000H开始保留50个存储单元作为备用单元。4.2源程序的编辑和汇编单片机原理及应用技术2020年6月13日9时37分15六、赋值伪指令EQU符号名EQU表达式功能是将表达式的值或特定的某个汇编符号定义为一个指定的符号名。例如:4.2源程序的编辑和汇编LENEQU10SUMEQU21HBLOCKEQU22HCLRAMOVR7,#LENMOVR0,#BLOCKLOOP:ADDA,@R0INCR0DJNZR7,LOOPMOVSUM,AEND该程序的功能是,把BLOCK单元开始存放的10个无符号数进行求和,并将结果存入SUM单元中。单片机原理及应用技术2020年6月13日9时37分16七、位地址符号定义伪指令BIT格式为:符号名BIT位地址表达式功能是将位地址赋给指定的符号名。其中,位地址表达式可以是绝对地址,也可以是符号地址。例如:STBITP1.0将P1.0的位地址赋给符号名ST,在其后的编程中就可以用ST来代替P1.0。4.2源程序的编辑和汇编单片机原理及应用技术2020年6月13日9时37分174.3基本程序结构4.3.1顺序程序顺序程序是指无分支、无循环结构的程序。其执行流程是依指令在存储器中的存放顺序进行的。内部RAM的2AH~2EH单元中存储的数据如图所示。试编写程序实现图示的数据传送结果。78H56H34H12H00H2EH2DH2CH2BH2AHACC78H56H34H12H00H2EH2DH2CH2BH2AHACC00H单片机原理及应用技术2020年6月13日9时37分18方法一:MOVA,2EH;2字节,1个机器周期MOV2EH,2DH;3字节,2个机器周期MOV2DH,2CH;3字节,2个机器周期MOV2CH,2BH;3字节,2个机器周期MOV2BH,#00H;3字节,2个机器周期4.3基本程序结构单片机原理及应用技术2020年6月13日9时37分19方法二:CLRA;1字节,1个机器周期XCHA,2BH;2字节,1个机器周期XCHA,2CH;2字节,1个机器周期XCHA,2DH;2字节,1个机器周期XCHA,2EH;2字节,1个机器周期以上两种方法均可以实现所要求的传送任务。方法一使用14个字节的指令代码,执行时间为9个机器周期;方法二仅用了9个字节的代码,执行时间也减少到了5个机器周期。实际应用中应尽量采用指令代码字节数少、执行时间短的高效率程序,即注意程序的优化。4.3基本程序结构单片机原理及应用技术2020年6月13日9时37分20例有一变量存放在片内RAM的20H单元,其取值范围为:00H~05H。要求编制一段程序,根据变量值求其平方值,并存入片内RAM的21H单元。→#2000HDPTR→(20H)A→(A+DPTR)A→A21H开始结束4.3基本程序结构程序如下:ORG1000HSTART:MOVDPTR,#2000HMOVA,20HMOVCA,@A+DPTRMOV21H,ASJMP$ORG2000HTABLE:DB00,01,04,09,16,25END。20单片机原理及应用技术2020年6月13日9时37分21例双字节无符号数加法。设被加数存放在内部RAM的51H、50H单元,加数存放在内部RAM的61H、60H单元,相加的结果存放在内部RAM的51H、50H单元,进位存放在位寻址区的00H位中。4.3基本程序结构21单片机原理及应用技术2020年6月13日9时37分22程序段如下:MOVR0,#50H;被加数的低字节地址MOVR1,#60H;加数的低字节地址MOVA,@R0;取被加数低字节ADDA,@R1;加上加数低字节MOV@R0,A;保存低字节相加结果INCR0;指向被加数高字节INCR1;指向加数高字节MOVA,@R0;取被加数高字节ADDCA,@R1;加上加数高字节(带进位加)MOV@R0,A;存高字节相加结果MOV00H,C;保存进位。4.3基本程序结构22单片机原理及应用技术2020年6月13日9时37分234.3.2分支程序分支结构可以分成单分支、双分支和多分支几种情况:条件成立?下条指令程序段AYN条件成立?程序段AYN程序段BK=0?分支0YK=1?Y分支1K=2?Y分支2NNN4.3基本程序结构单片机原理及应用技术2020年6月13日9时37分24一、单分支程序例求双字节补码。设在内部RAM的addr1和addr1+1单元存有一个双字节数(高位字节存于高地址单元)。编写程序将其读出取补后再存入addr2和addr2+1单元。4.3基本程序结构方法:首先对低字节取补,然后判其结果是否为全“0”。若是,则高字节取补,否则高字节取反。单片机原理及应用技术2020年6月13日9时37分25START:MOVR0,#addr1;原码低字节地址送R0MOVR1,#addr2;补码低字节地址送R1MOVA,@R0;原码低字节送ACPLA;A内容取补INCAMOV@R1,A;存补码低字节INCR0;调整地址,指向下一单元INCR1JZZERO;(A)=0时转ZEROMOVA,@R0;原码高字节送ACPLASJMPLOOP1ZERO:MOVA,@R0;高字节取补存入addr2+1单元CPLAINCALOOP1:MOV@R1,A;高字节反码存入addr2+1单元SJMP$4.3基本程序结构单片机原理及应用技术2020年6月13日9时37分26二、双分支程序例设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。程序段如下:START:MOVA,30HJZNEXTANLA,#80H;判断符号位JZLPMOVA,#05HADDA,30HMOV30H,ASJMPLPNEXT:MOV30H,#20HLP:SJMP$4.3基本程序结构单片机原理及应用技术2020年6月13日9时37分274.3.3循环程序按某种控制规律重复执行的程序称为循环程序。循环程序有先执行后判断和先判断后执行两种基本结构:置循环初值开始结束循环处理循环修改结束处理循环结束?YN置循环初值开始结束循环处理循环修改结束处理循环结束?YN4.3基本程序结构单片机原理及应用技术2020年6月13日9时37分28一、先执行后判断例50ms延时程序。若晶振频率为12MHz,则一个机器周期为1μs。执行一条DJNZ指
本文标题:(2012-4)第四章-汇编语言程序设计
链接地址:https://www.777doc.com/doc-5871406 .html