您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 第4章 51内核单片机汇编语言程序设计
12第4章51内核单片机汇编语言程序设计4.1、汇编指令格式4.2、寻址方式4.3、指令系统4.4、汇编程序常用伪指令4.5、汇编语言程序设计3一、基本概念•指令——使单片机完成基本操作的命令。•程序——完成某项特定任务的指令的集合。高级语言:汇编语言:机器语言:程序设计语言:用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。独立于机器,面向过程,接近自然语言和数学表达式。第四章51内核单片机汇编语言程序设计4汇编程序功能源程序(汇编指令程序)汇编目标程序(机器语言程序)汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。(翻译)•手工汇编•机器汇编(常用)汇编的两种方式5关于机器汇编的说明两次扫描过程。第一次扫描:检查语法错误,确定符号名字;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。第二次扫描:在第一次扫描基础上,将符号地址转换成地址(代真);利用操作码表将助记符转换成相应的目标码。6源程序目标程序地址ORG1000HSTART:MOVR0,2FHMOVR2,#00HMOVA,@R0MOVR3,AINCR3SJMPNEXTLOOP:INCR0CJNE@R0,#44H,NEXTINCR2NEXT:DJNZR3,LOOPMOV2AH,R2SJMP$END第一次汇编第二次汇编1000A82F10027A001004E61005FB10060B100780NEXT100908100AB644NEXT100D0A100EDBLOOP10108A2A101280FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE7•时间属性:指一条指令执行完毕所需要的时间•空间属性:指一条指令存储于程序存储器中所占的字节数•功能属性:指一条指令所对应的一个特定的操作功能指令的三种属性STC系列单片机采用了80C51内核,其指令集与MCS—51系列单片机完全相同,本章介绍的指令系统可适用于所有51内核的单片机。8指令的构成指令=操作码+操作数操作码——表示该指令所能执行的操作功能。操作数——表示参加操作的数的本身或操作数所在的地址。汇编语言指令基本格式[标号:]操作码助记符[目的操作数][,源操作数][;注释]4.1汇编指令格式9描述符号:Rn——工作寄存器R0~R7Ri——间接寻址寄存器R0、R1Direct——直接地址,包括内部128BRAM单元地址、所有SFR地址。#data——8位立即数#data16——16位立即数addr16——16位目的地址addr11——11位目的地址rel——用补码表示的8位相对偏移量bit——可直接位寻址的位10/bit——指定位求反,再参与逻辑操作,但取反后不影响该位的原值(x)——x中的内容((x))——x中的地址中的内容→——表示操作流程,将箭尾一方内容送入箭头所指一方的单元中去$——当前指令地址114.2寻址方式•寻址方式——寻找操作数或寻找操作数所在存储单元地址的方式•共七种寻址方式:寄存器寻址直接寻址立即数寻址寄存器间接寻址变址寻址相对寻址位寻址必须掌握12•操作数以常数的形式直接出现在指令中,用“#”作前缀;•该常数与操作码一起存放在ROM中,可以立即得到并执行。•例如:MOVA,#52H74HA立即数操作码程序存储器PC+1PC52H4.2.1立即(数)寻址52H13•例如:MOVDPTR,#5678HDPTR由两个特殊功能寄存器DPH和DPL组成90H56H78H56H78HPCPC+1PC+2操作码低位立即数高位立即数程序存储器SFRDPLDPH注意:1.只有源操作数能使用立即寻址方式。2.立即数长度必须小于或等于目的操作数的长度。14•操作数存放在R0~R7、A或DPTR中;•B寄存器在乘、除法指令中是寄存器寻址,在数据传送指令中是直接寻址。•其他SFR的寻址方式不属于寄存器寻址。•例如:MOVA,R54.2.2寄存器寻址101PC操作码程序存储器内部RAMR5AXXXXR6R71110115•指令中直接给出操作数的地址,数据存放在该地址对应的存储单元中。•直接寻址方式可以访问的范围:4.2.3直接寻址片内RAM低128B单元(00H——7FH)SFR(既可用单元地址形式给出,也可用寄存器符号的形式给出)注意:直接寻址方式是访问特殊功能寄存器的唯一方法。16•MOVP0,A(P0代表符号地址,是直接寻址方式)•例如:MOVA,63H4.2.3直接寻址74H63HPCPC+1操作码直接地址程序存储器内部RAM63HAXXMOV80H,AXX17•可用作地址指针的工作寄存器是R0、R1,以及DPTR•例如:MOVA,@R1;A←((R1))PC操作码程序存储器内部RAMA11100114.2.4寄存器间接寻址•指令中寄存器的内容作为操作数存放的地址•间接寻址寄存器前用“@”表示前缀1R130H30H58H58H18使用该方式访问数据存储器时注意:访问片内RAM只能用R0和R1作指针;若片内扩展RAM或片外RAM仅有256B单元时,既可以用R0或R1作指针间接访问,也可用DPTR作指针间接访问;大于256B时只能以DPTR作指针间接访问。19•操作数地址=变地址+基地址•基地址寄存器:DPTR或PC;变址寄存器:A•该寻址方式常用于访问程序存储器,查表。•例如:MOVCA,@A+DPTRPC操作码程序存储器SFR32HALUA5H4.2.5变址寻址10010011DPHDPL32A5H32A5HA23H+23H=32C8H32C8H2FH2FH设DPTR=32A5H,A=23H20•用于相对转移指令中•以当前PC值作为基地址,与指令中给定的相对偏移量rel相加,以所得之和作为目的位置的地址•当前PC值=源地址+转移指令所占的字节数(实际上是转移指令的下一条指令的地址)•rel:以补码表示的有符号单字节数(-128~127),负数表示从当前地址向下转移,正数表示从当前地址向上转移。4.2.6相对寻址21PC操作码程序存储器PCALU2050HPC+12051HPC+2偏移量rel=08H•例如:JZ08H;rel为正数,从当前地址向上转移当A=0时,PC←PC+2+rel//转移当A≠0时,PC←PC+2//程序顺序执行2052H205AH2052H08H+08H=205AHPC205AHXX2052H60H22PC操作码程序存储器PCALU2050HPC+12051HPC+2偏移量rel=F4H•例如:JZF4H;rel为负数,从当前地址向下转移当A=0时,PC←PC+2+rel//转移当A≠0时,PC←PC+2//程序顺序执行2052H2046H2052HF4H+FFF4H=2046HPC2046HXX2052H60H23•操作数是二进制位•在指令中直接给出位地址,利用位处理器对某一位进行数据传送、逻辑运算等操作•例如:MOVC,07H;C←(07H)PC操作码程序存储器C20H00PC+1PSWSFRX4.2.7位寻址07H07XA2H24两种位寻址区:(1)内部RAM中的位寻址区:字节地址为20H~2FH;(2)SFR的可寻址位。位地址的几种表示方法:1)直接使用位地址;如:PSW的位6可表示为0D6H2)字节地址带位号;或0D0H.63)SFR名带位号;或PSW.64)位符号地址表示;或AC25数据传送指令共29条,包括:普通传送指令、数据交换指令和堆栈操作指令程序存储器ROM特殊功能寄存器SFR片内RAM128字节扩展数据存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHD4.3指令系统4.3.1数据传送指令注意:该类指令只有以A为目的操作数的指令影响PSW中的P标志位,其它数据传送指令对各标志位无影响。26回忆操作数描述符:direct,Rn,@Ri,#data,DPTR等。1)以A为目的操作数的传送指令MOVA,#dataMOVA,directMOVA,RnMOVA,@RiMOVRn,#dataMOVRn,directMOVRn,A1、普通传送指令片内RAM传送指令MOV;A←(Rn);A←data;A←(direct);A←((Ri))2)以Rn为目的操作数的传送指令;Rn←A;Rn←data;Rn←(direct)27MOVdirect,RnMOVdirect,@Ri4)以@Ri为目的操作数的传送指令MOV@Ri,#data;(Ri)←dataMOV@Ri,direct;(Ri)←(direct)MOV@Ri,A;(Ri)←(A)MOVDPTR,#data16;唯一的16位数据传送指令。(direct)←(A)MOVdirect,A;3)以direct为目的操作数的传送指令MOVdirect,#data(direct)←dataMOVdirect,direct(direct)←(direct)(direct)←(Rn)(direct)←((Ri))5)以DPTR为目的操作数的传送指令28MOVRn,RnMOV@Ri,@RiMOVRn,@RiMOV#data,A××××注意:1)在数据传送指令中目的操作数和源操作数中不能同时出现工作寄存器。2)SFR只能用直接寻址方式访问。3)片内RAM高128B(80H-FFH)只能用寄存器间接寻址方式访问。【例4-1】写出将R0的内容送到R5中的程序段。MOVA,R0MOVR5,A29扩展数据存储器传送指令对片内扩展RAM或片外扩展RAM及外部接口电路进行数据传送的相关指令:MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A执行过程中会使/WR、/RD有效。;A←((Ri));A←((DPTR));((Ri))←A;((DPTR))←A(读)(读)(写)(写)注意:1)通过DPTR间接寻址,可以对整个64KB片外RAM访问。2)通过@Ri间接寻址,只能对扩展RAM的低256字节访问,如果地址范围大于256B时,应谨防地址冲突。30【例4-2】试编写一程序段,实现将片外RAM地址为01E0H开始的16个单元中的内容传送到片内扩展RAM地址为04FFH开始的单元中。参考程序为:MOVR2,#10HMOVP2,#01HMOVR0,#0E0HMOVDPTR,#04FFHLOOP:ORLAUXR,#00000010BMOVXA,@R0ANLAUXR,#11111101BMOVX@DPTR,AINCR0INCDPTRDJNZR2,LOOPD7D6D5D4D3D2D1D0T0x12T1x12UART_M0x6BRTRS2SMODBRTx12EXTRAMS1BRSEXTRAM=1时,访问片外扩展RAM31程序存储器传送指令MOVC(查表指令)MOVCA,@A+DPTRMOVCA,@A+PCMOVC含义是传送常数。(A)+(DPTR)或PC当前值=一个16位的地址,将该ROM地址中的内容传送给A。以DPTR为基地址的指令,可在ROM的64KB范围内查表;(常用)以PC为基地址的指令只能在(PC)+1为基点的256B范围内查表;(不推荐)使用第一条指令前,需事先将表首地址存入DPTR中,相对于表首偏移量存入A寄存器中。32例如:(A)=30H,当前地址1000HMOVCA,@A+PC;A←(????H)例如:ORG8000HMOVA,#30HMOVCA,@A+PC;A←(????H)……ORG8030HDB41H,42H,43H,44H,45H例如:(DPTR)=8100H,(A)=40HMOVCA,@A+DPTR;A←(????H)80331031阅读以下三个程序段,并回答????的内容。814033【例4-3】将ROM02FFH单元的内容送片内RAM的50H单元中。参考程序如下:MOVA,#0MOVDPTR,#02FFHMOVCA,@A+DPTRMOV50H,A34【例4-4】设data是一个BCD码常数,试用查表法获得其相应的ASCII码。将0-9的ASCII
本文标题:第4章 51内核单片机汇编语言程序设计
链接地址:https://www.777doc.com/doc-3955581 .html