您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 7第4章 汇编语言程序设计及仿真调试(1)
1/80增强型8051单片机实用开发技术第4章汇编语言程序设计及仿真调试4.1指令系统4.2汇编语言程序设计4.3典型汇编语言程序设计举例4.4利用KeiluVision集成开发环境调试程序4.5利用ISP工具将程序下载到单片机中验证程序2/80增强型8051单片机实用开发技术4.1指令系统高级语言编程简单,执行效率低,常用在计算和管理的场合。汇编语言(助记符语言)编程繁琐,执行效率高,宜用于需要结构紧凑、反应快速的实时控制场合。助记符一般是由操作码和操作数两部分组成的。操作码反映了指令的功能,操作数代表了指令的操作对象。例如,ADDA,#6AH;A←A+#6AH其中ADD是操作码符号。A和6AH是操作数。前者反映了该指令的功能是做加法,后者则表示相加的对象是A累加器中的内容和立即数6AH。由助记符构成的编程语言一般称为汇编语言。目前大多数单片机的编译系统都支持C语言编程,并可以对编译的代码进行优化。使用C语言编程,具有编写简单、直观易读、通用性好等特点,特别是控制任务比较复杂或者具有大量运算的系统中,C语言更显示出了超越汇编语言的优势。然而,汇编语言是理解和掌握单片机原理及应用的基础,并且,在控制系统不太复杂、实时性要求较高的控制系统中,较多的用户还是使用汇编语言进行程序设计。1、概述4.1.1助记符语言3/80增强型8051单片机实用开发技术2、操作码操作码是指令功能的英文缩写。操作码含义1.传送类:MOVMOVXMOVC传送字节变量(数据存储器、I/O口)外部送数到A程序存储器送数到A2.数据操作类:ADDSUBBMULDIV加带借位减乘除3.程序控制类:AJMP(SJMP、LJMP)JZ、JC、JB(JNZ、JNC、JNB)ACALL(LCALL)RETCJNE绝对转移(短转移、长转移)有条件转移绝对调用(长调用)子程序返回第一操作数与第二操作数比较不等则转移4.逻辑操作类:ANLORLXRL与或异或4/80增强型8051单片机实用开发技术3、操作数操作数是一条指令操作的对象。不同功能的指令,操作对象形式不同。操作数可以是数据,也可以是地址。操作数是指令中给出的数据时,被称为立即数。它有8位和16位二进制数两种。在助记符的数字前加以“#”来标记其是立即数,常用符号“#data”表示。操作数也可以是存放数据的地址,这些地址可以是:1.所选定寄存器工作区内的R7~R0,A、B、C(位)、AB(双字节),DPTR(双字节)等可编址的寄存器。2.内部数据存储器中低128字节,专用寄存器SFR,可寻址的位。3.外部数据存储器空间。4.程序存储器空间。[注意]:编写程序时,操作数的最高位大于9时,在操作数的最高位前要加写0。否则,编译会提示出错。例如:MOVA,#0F8H是正确的,而MOVA,#F8H是不正确的。5/80增强型8051单片机实用开发技术4.1.2指令格式及分类用助记符来描述机器指令的语言称为符号语言或汇编语言,汇编语言是一种面向机器的程序设计语言。其规定的格式如下:[标号:]操作码助记符[第一操作数][,第二操作数][,第三操作数][;注释]标号是表示该指令所在的符号地址,一般是由字母开头的字符串组成。例如:ABCQ3PATD678均为标号的允许格式5AC-PTR+A等均为标号不允许的格式操作码助记符表示了指令的功能。第一操作数、第二操作数都表示操作的对象,这些是指令的核心部分。指令操作码部分是必不可少的。操作数段有的指令可以没有,或者只有一个操作数,例如:RETI;中断返回,无操作数CPLA;累加器逐位取反,只有一个操作数。注释字段是为方便用户阅读程序所加注的说明。1、汇编语言6/80增强型8051单片机实用开发技术2、指令代码的存储格式指令代码是指令的二进制表示方法,是指令在存储器中存放的形式。汇编语言只有经“编辑/汇编”程序翻译成机器语言,才能被执行。STC12C5A60S2单片机指令系统中的指令字长有单字节、双字节、三字节三种。指令字节数越多,所占用内存单元越多。但是指令执行时间长短并不和所占用字节数的多少成比例。例如乘法为单字节指令,但是所需的指令执行时间却最长。单字节指令:操作码例:RET;机器代码:22H双字节指令:操作码操作数例:MOVA,#0FH;机器代码:740FH三字节指令:操作码第一操作数第二操作数例:MOV74H,#0BH;机器代码:75740BH7/80增强型8051单片机实用开发技术3、指令中的符号约定符号含义A累加器ACCB寄存器BC进(借)位标志位,在位操作指令中作为累加器使用direct直接地址bit位地址,内部RAM中的可寻址位和SFR中的寻址位#data8位常数(8位立即数)#data1616位常数(16位立即数)@间接寻址rel8位带符号偏移量。Rn当前工作区(0~3区)的工作寄存器(n=0,1,…,7)Ri可作地址寄存器的工作寄存器R0和R1(i=0,1)(X)X寄存器内容((X))由X寄存器寻址的存储单元的内容→表示数据的传送方向/表示位操作数取反∧表示逻辑与操作∨表示逻辑或操作⊕表示逻辑异或操作8/80增强型8051单片机实用开发技术4.1.3寻址方式指令中的源操作数是立即数,叫做立即寻址。立即数的类型可以是:二进制(B)、十进制、十六进制(H)、整数、序数或者字符。立即数的字长可以是8位或16位。例如:MOVA,#61H这条指令是把61H这个数据送入到累加器A中。例如:MOVDPTR,#2050H这条指令是把2050H这个数据送入到数据指针DPTR中。1.立即寻址操作数是指令的重要组成部分,它指定了参与运算的数或数所在单元地址,而如何得到这个地址就称为寻址方式。一般来说,寻址方式越多,计算机功能越强,灵活性越大。所以寻址方式对机器的性能有重大影响。STC12C5A60S2单片机共有7种寻址方式,描述如下:0111010001100001PC操作码立即数ACC中0E0H61H9/80增强型8051单片机实用开发技术2.直接寻址直接寻址就是在指令中包含了操作数的地址,该地址直接给出了参加运算或传送的单元或位。它可访问三种地址空间:(1)特殊功能寄存器SFR:直接寻址是唯一的访问形式(2)内部数据RAM中的00H~7FH的128个字节单元(3)位地址空间例如:MOVA,60H;把60H单元内容送入累加器A中。1110010101100000操作码直接地址ACC0E0HPC60H程序存储器RAM89H89H10/80增强型8051单片机实用开发技术3.寄存器寻址指定某一可寻址的寄存器的内容为操作数,对寄存器ACC,B,DPTR和CY(进位标志,也是布尔处理机的累加器),其寻址时具体的寄存器已隐含在其操作码中。而对选定的8个工作寄存器R7~R0,则用指令操作码的低3位指明所用的寄存器。在应用中,可以先通过PSW中的RS1、RS0两位来选择寄存器组,再用操作码中低3位来确定是组内哪一个寄存器,达到寻址的目的。例如:INCR5;把寄存器R3的内容加1后再送回R500001101110000RS1RS0PSWALU内部RAMPCD5D6D711/80增强型8051单片机实用开发技术4.寄存器间接寻址指令指定某一寄存器的内容作为操作数地址。STC12C5A60S2单片机中可用来间接寻址的寄存器有:选定工作寄存器区的R0、R1,16位的数据指针DPTR,使用时前面加@表示间接寻址。例如:MOVA,@R0;将R0中的内容所表示的地址单元中的内容送给AMOVX@DPTP,A111001100D5D6D700110111RS1RS00110000000110111内部RAM000021形成8位地址34PSWA12/80增强型8051单片机实用开发技术5.变址寻址由指令指定的偏移量寄存器和变址寄存器DPTR或PC相加所得结果作为操作数地址。例如:MOVCA,@A+PC其中A作为偏移量寄存器,PC作为变址寄存器,A中内容为无符号数和PC相加,从而得到其真正的操作数地址。13/80增强型8051单片机实用开发技术6.相对寻址把指令中给定的地址偏移量与本指令所在单元地址(即程序计数器PC中的内容)相加,即得到真正的程序转移地址。与变址方式不同。该偏移量有正、负号,在该机器指令中必须以补码形式给出,所转移的范围为相对于当前PC值的-128~+127之间。例如:JC80H若C=0,则PC值不变,若进位C=1,则以现行的PC为基地址加上80H得到转向地址。1005H0100000010000000PC+11006HPC+2ALU1007HPC操作码偏移量1007H-80H=0F87H0F87HPC1007H14/80增强型8051单片机实用开发技术7.位寻址支持位单元存取操作是STC12C5A60S2单片机的一个主要特点。位操作指令能对位地址空间的每一位都可进行运算和传送操作。例如:MOVC,P1.0;将P1.0的状态传送到CSETB20.6H;将20H单元的第6位置为1MOVA,50H;50H是字节地址MOVC,50H;50H是位地址MOV60H,50H;50H是字节地址15/80增强型8051单片机实用开发技术4.1.4数据传送类指令数据传送类指令是使用频率最高的一类指令。主要用来给STC12C5A60S2单片机的内部和外部资源赋值,进行堆栈的存取操作等。数据传送类指令执行前后,对程序状态字PSW不产生影响。按其操作方式,又可把它们分为三种:数据传送数据交换栈操作16/80增强型8051单片机实用开发技术1、数据传送指令格式:MOV目的字节,源字节功能:把第二操作数指定的字节变量传送到由第一操作数指定的单元中,不影响源字节,不影响任何别的寄存器或标志。这是最灵活的操作,允许15种源和目的寻址方式组合。(1)MOV指令17/80增强型8051单片机实用开发技术1)立即数送累加器A和内部数据存储器(Rn,内部RAM,SFR)。共有4条指令:MOVA,#data;(A)←#dataMOVdirect,#data;(direct)←#dataMOV@Ri,#data;((Ri))←#dataMOVRn,#data;(Rn)←#data@符号表示间接寻址,((Ri))表示把立即数送到由Ri寄存器的内容所指出的那个RAM单元中去。Ri中i=0或i=1。例1MOV@R0,#56HMOV@R1,#59H假设R0的内容为20H,则执行上述第一条指令后,立即数56H将送入内部数据RAM字节地址为20H的单元中。例2MOVR0,#79H;将立即数79H送到R0中MOVR1,#15H;将立即数15H送到R1中例3利用直接寻址可把立即数送入内部数据RAM任意单元或SFR中任一特殊功能寄存器,如例1用间接寻址给内部RAM20H单元送立即数56H,需两条指令:MOVR0,#20HMOV@R0,#56H用直接寻址只用一条指令:MOV20H,#56H而指令MOVP1,#80H则可把立即数80H直接送入P1(字节地址为90H)口中。18/80增强型8051单片机实用开发技术2)内部数据存储器(Rn,内部RAM,SFR)与累加器A传送数据共有6条指令:MOVA,direct;(A)←(direct)MOVA,@Ri;(A)←((Ri))MOVA,Rn;(A)←(Rn)MOVdirect,A;(direct)←(A)MOV@Ri,A;((Ri))←(A)MOVRn,A;(Rn)←(A)间接寻址@Ri是以Ri的内容作为地址,由于Ri为八位寄存器,寻址范围为0~255。但由于特殊功能寄存器SFR只能被直接寻址,而对于普通的8051单片机来说,在SFR地址范围(128~255)中很多单元又无定义,若对之读写,将得不到确定的值,写入的数也将丢失。所以对内部数据存储器来说间接寻址的真正作用范围实际上只有0~127个单元的内部数据RAM地址。例4指令序列:MOVR1,#82HMOVA,@R1上述指令对于普通8051单片机是不正确的,因为82H是特殊功能寄存器DPL的地址值,对特殊功能寄存器来说,这种间接寻址方式无效。但是,对于
本文标题:7第4章 汇编语言程序设计及仿真调试(1)
链接地址:https://www.777doc.com/doc-3863482 .html