您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 04MCS-51-汇编语言程序设计
MCS-51汇编语言程序设计第四章4.1汇编语言程序设计概述4.2伪指令4.3单片机汇编语言程序的基本机构形式4.4MCS-51单片机汇编语言程序设计举例4.5单片机汇编语言源程序的编辑与汇编教学内容重点及难点单片机汇编语言程序设计的基本概念伪指令单片机汇编语言程序的三种基本结构形式常用汇编语言程序设计4.1汇编语言程序设计概述4.1.1程序结构设计的基本方法高质量、可读性好、存储容量小和执行速度快汇编程序结构设计的基本方法:1.简单程序的设计2.分支程序设计3.循环程序设计4.子程序设计5.查表程序设计6.散转程序设计汇编程序程序设计基本要求:1.任务分析(硬件、软件系统分析)2.确定算法和工作步骤;3.程序总体设计和流程图绘制关于流程图符号:开始、结束----圆角矩形工作任务----矩形判断分支----菱形程序流向----程序连接----开始结束编制程序的步骤4.1汇编语言程序设计概述4.1汇编语言程序设计概述4.分配内存,确定程序与数据区存放地址;5.编写源程序;6.调试、修改,最终确定程序。方法技巧4.1汇编语言程序设计概述1.模块化设计(按功能分:显示、打印、输入、发送等)2.尽量采用循环及子程序结构(节省内存)汇编语言的规范4.1汇编语言程序设计概述1.汇编语言源程序由以下两种指令构成汇编语句(指令语句)伪指令(指示性语句)2.汇编语句的格式:标号:操作码操作数;注释数据表示形式:二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识)3.伪指令:控制汇编用的特殊指令,这些指令不属于指令系统,不产生机器代码。4.2伪指令伪指令:控制汇编程序的指令,但不是控制单片机操作的指令,没有机器码。1.定位伪指令ORG格式:ORGXXXX或标号地址。作用:说明下面紧接的程序段或数据段存放的起始地址。例如:ORG1000H;指示后面的程序或数据块以1000H为起始地址连续存放。若省略ORG伪指令,则该程序段从ROM中0000H单元开始存放。在一个源程序中,可以多次使用ORG伪指令,但地址值由小到大依序排列,不允许空间重叠。2.汇编结束伪指令END格式:END。作用:结束汇编。汇编程序遇到END伪指令后即结束汇编。处于END之后的程序,汇编程序软件将不处理。4.2伪指令4.2伪指令3.赋值伪指令EQU格式:符号名EQU表达式。作用:将表达式的值或特定的某个汇编符号定义为一个指定的符号名。【例】SGEQUR0;SG与R0等值DEEQU40H;DE与40H等值MOVA,SG;(A)←(R0)MOVR7,#DE;(R7)←40H4.2伪指令4.字节数据定义伪指令DB格式:[标号:]DB字节数据表。作用:从标号指定的地址单元开始,在ROM中存放8位字节数据。将字节数据根据从左到右的顺序依次存放在指定的存储单元中,一个数据占一个存储单元。字节数据表可以是字符、十进制、十六进制、二进制等。该伪指令常用于存放数据表格。4.2伪指令例如:ORG1000HSEG1:DB53H,78H,“2”SEG2:DB‘DAY’END则(1000H)=53H(1001H)=78H(1002H)=32H;32H为“2”的ASCII码(1003H)=44H;44H为“D”的ASCII码(1004H)=41H;41H为“A”的ASCII码(1005H)=59H;59H为“Y”的ASCII码如果操作数为数值,其取值范围应为00H~FFH;若为字符串,其长度应限制在80个字符内。4.2伪指令5.字数据定义伪指令DW格式为:[标号:]DW字数据表。作用:从标号指定的地址单元开始,在ROM中定义字数据。将数据根据从左到右的顺序依次存放在指定的存储单元中。应特别注意:16位的二进制数,高8位存放在低地址单元,低8位存放在高地址单元。4.2伪指令6.位地址符号定义伪指令BIT格式为:符号名BIT位地址表达式作用:将位地址赋给指定的符号名。其中,位地址表达式可以是绝对地址,也可以是符号地址。【例】MNBITP1.7G5BIT02H汇编后,位地址P1.7、02H分别赋给变量MN和G5。4.2伪指令7.数据地址赋值伪指令DATA格式为:符号名DATA数或表达式DATA伪指令与EQU类似。但有些差别:•(1)用DATA定义的标识符可以先使用后定义,•而EQU定义的必须先定义后使用。•(2)用EQU可以把一个汇编符号赋给字符名,•而DATA只能把数据赋给字符名。•(3)DATA可以把一个可求值表达式赋给字符名。【例】MAINDATA2000H汇编后MAIN的值为2000H。汇编语言源程序设计通常采用结构化设计方法,任何复杂的程序都可分解为:顺序结构部分分支结构部分循环结构部分4.3单片机汇编语言程序的基本机构形式图3.10顺序程序流程图【例】【功能】求变量X()的平方。【入口参数】X值存放在片内RAM的30H单元【出口参数】X2值存放在片内RAM的31H单元程序框图如图3.10所示。ORG1000HSTART:MOVDPTR,#2000HMOVA,30HMOVCA,@A+DPTRMOV31H,ASJMP$ORG2000HTABLE:DB00,01,04,09,16,25END特点:从第一条指令开始顺序执行,直到最后一条指令4.3.1顺序程序设计4.3单片机汇编语言程序的基本机构形式分支:根据某种标志改变程序执行的顺序。一般分为单分支、多分支。分支流程图如图3.11所示。(a)单分支(b)多分支图3.11分支程序流程图4.3.2分支程序设计4.3单片机汇编语言程序的基本机构形式1.单分支【例】【功能】某装置有自动/手动控制按键,按键状态由P1.0口输入;高电平为自动控制,低电平为手动控制【入口参数】P1.0CY:JBP1.0,AUTOHC:……LJMPCYAUTO:……LJMPCY4.3单片机汇编语言程序的基本机构形式参考程序:ORG1000HVARDATA30HFUNCDATA31HMOVA,VAR;A←XJZDONE;若X=0,则转DONEMOVR0,#0FFH;先设X0,R0=FFHJNBACC.7,NEG;若X0,则转NEGMOVR0,#01H;若X0,R0=1NEG:MOVA,#01H;若X0,则Y=1DONE:MOVFUNC,A;存函数值SJMP$END4.3单片机汇编语言程序的基本机构形式2.多分支包括一般多分支和散转多分支。1)一般多分支【例】【功能】x、y均为8位二进制数,求解:【入口参数】(R0)=x。【出口参数】(R1)=y。101000xyxx4.3单片机汇编语言程序的基本机构形式START:CJNER0,#00H,SUL1;判断R0是否为0,为0转SUL1MOVR1,#00HSJMPSUL2SUL1:JCNEG;小于0转NEGMOVR1,#01HSJMPSUL2NEG:MOVR1,#0FFHSUL2:RET4.3单片机汇编语言程序的基本机构形式4.3单片机汇编语言程序的基本机构形式【分析】用直接转移指令组成一个转移表,然后把菜单号读入累加器(A),转移表首地址放入DPTR中,利用JMP@A+DPTR实现散转。【入口参数】(R3)=存输入键盘码1~9。【出口参数】转移到相应的子程序入口。ORG0030HKEY_JMP:MOVDPTR,#TAB1;子程序入口首地址送DPTRMOVA,R3;把键盘输入缓冲区内容送累加器(A)DECA;由于输入数码为1~9,因此需减1MOVB,#03H4.3单片机汇编语言程序的基本机构形式MULAB;由于长跳转指令LJMP占用3B,;各子程序入口地址相距3BJMP@A+DPTR;根据输入码,执行相应的子程序ORG2000H;程序入口地址表TAB1:LJMPNO1LJMPNO2LJMPNO3LJMPNO4LJMPNO5LJMPNO6LJMPNO7LJMPNO8LJMPNO9END4.3单片机汇编语言程序的基本机构形式(2)利用转向地址表实现转移这种方法将转移地址列成表格,将表格的内容作为转移的目标地址。【例】【功能】根据R3(0~n)的内容转向对应的程序;处理程序的入口符号地址分别为PR0~PRn(n<256)【分析】①将PR0~PRn入口地址列在表格中,每一项占两个单元;②PRn在表中的偏移量为2n,因此将R3的内容乘“2”即得PRn在表中的偏移地址;③从偏移地址2n和2n+1两个单元分别取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP@A+DPTR指令(A先清零)即转移到PRn入口执行。4.3单片机汇编语言程序的基本机构形式【入口参数】(R3)=0~n转移。【出口参数】转移到相应的子程序入口。PR0EQU0110HPR1EQU0220HPR2EQU0330H·······················ORG0030HKEY_JMP:MOVDPTR,#TABMOVA,R3ADDA,R3;(A)←(R3)*2JNCNADDINCDPH;(R3*2)2564.3单片机汇编语言程序的基本机构形式NADD:MOVR3,AMOVCA,@A+DPTRXCHA,R3;转移地址高8位INCAMOVCA,@A+DPTRMOVDPL,A;转移地址低8位MOVDPH,R3CLRAJMP@A+DPTRTAB:DWPR0,PR1,PR2,···········PRnPR0:处理程序0PR1:处理程序1··PRn:处理程序nEND4.3单片机汇编语言程序的基本机构形式(3)利用地址偏移量表实现散转这种方法将转移目标地址与表首地址差列表,作为转移目标地址。【例】【功能】有5个按键0,1,2,3,4,根据按下的键转向不同的处理程序,分别为PR0,PR1,PR2,PR3,PR4。【分析】汇编时,利用了伪指令的数学计算功能,标首地址加上处理程序与标首地址差转到处理程序。【入口参数】(B)=转向程序号(键盘编码)。【出口参数】转移到相应的子程序入口。4.3单片机汇编语言程序的基本机构形式4.3单片机汇编语言程序的基本机构形式ORG0030HKEY_JMP:MOVA,BMOVDPTR,#TABMOVCA,@A+DPTRJMP@A+DPTRTAB:DBPR0-TABDBPR1-TABDBPR2-TABDBPR3-TABDBPR4-TABPR0:处理程序0PR1:处理程序1PR2:处理程序2PR3:处理程序3PR4:处理程序4END4.3单片机汇编语言程序的基本机构形式4.3单片机汇编语言程序的基本机构形式4.3.3循环程序设计循环程序一般由:初始化部分循环体部分--处理部分、修改部分、控制部分结束部分其结构一般有两种:先进入处理部分,再控制循环•至少执行一次循环体先控制循环,再进入处理部分•循环体是否执行,取决于判断结果。开始设置循环初值循环处理循环修改结束处理结束循环结束?开始设置循环初值循环处理循环修改结束处理结束循环结束?NYYN4.3单片机汇编语言程序的基本机构形式4.4.1.1加减运算程序设计多字节加、减运算是应用程序设计中经常要进行的一种运算,加、减运算程序可以分为无符号多字节数加减运算和带符号多字节数加减运算程序两种。无符号多字节加减运算程序4.4MCS-51单片机汇编语言程序设计举例一、算术运算程序[例4-4]假定R2、R3和R4、R5分别存放两个16位的带符号二进制数,其中R2和R4的最高位为两数的符号位。请编写带符号双字节二进制数的加减法运算程序,以BSUB为减法程序入口,以BADD为加法程序入口,以R6、R7保存运算结果。4.4MCS-51单片机汇编语言程序设计举例BSU:MOVA,R4;取减数高字节CPLACC.7;减数符号取反以进行加法MOVR4,ABAD:MOVA,R;取被加数MOVC,ACC.7MOVF0,C;被加数符号存在F0中XRLA,R4;两数高字节异或参考程序:4.4MCS-51单片机汇编语言程序设计举例;保存和AR7,MO
本文标题:04MCS-51-汇编语言程序设计
链接地址:https://www.777doc.com/doc-4709772 .html