您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 3 MCS-51单片机的汇编语言指令系统
第3章MCS-51单片机的汇编语言指令系统3.1指令格式及其符号说明单片机汇编语言:助记符语言单片机的指令:是CPU用于控制功能部件完成某一指定动作的指示和命令指令系统:单片机全部指令的集合111条指令,实现51种基本操作3.1.1指令格式指令格式:指令的表示方法两部分操作码:用来规定指令进行什么操作操作数:指令操作的对象•汇编语言指令格式[标号:]操作码助记符[目的操作数][,源操作数][;注释]指令的符号地址确定指令进行何种操作指令操作的对象指令操作的对象对指令功能的说明注意:注释编写的时候要注意一定要以分号“;”开始。3.1.1常用符号说明1、单字节指令指令的指令代码只有一个字节,操作码和操作数信息同在其中。如:INCDPTR10100011MOVA,Rn11101rrr一字节指令49条3.1.3指令的字节无操作数含有操作数2、双字节指令包括二个字节,其中第一个字节为操作码,第二个字节为操作数如:MOVA,#data指令代码:01110100立即数双字节指令共45条3、三字节指令三字节指令中,操作码占一个字节操作数占两个字节操作数既可能是数据,也可能是地址如:ANLdirect,#data01010011直接地址立即数三字节指令共17条3.2单片机寻址方式寻址:就是如何得到操作数的所在单元的地址3.2.1立即寻址方式操作数在指令中直接给出,出现在指令中的操作数称为立即数如;MOVA,#dataMOVA,#3AHMOVDPTR,#data163.2.2直接寻址方式操作数直接以单元地址的形式给出如:MOVA,3AH寻址范围:(1)内部RAM低128单元(2)特殊功能寄存器例如:MOVA,50HMOVA,P1MOVA,90H上面指令中的50H、P1、90H均是直接寻址方式。3.2.3寄存器寻址方式操作数在寄存器中MOVA,R0寻址范围:(1)工作寄存器:4组R0~R7(2)部分特殊功能寄存器:如A、B、DPTR等3.2.4寄存器间接寻址方式寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的如:MOVA,@R0寻址范围:(1)内部RAM低128单元,高128单元(52子系列)(2)外部RAM64KB如MOVXA,@DPTR(3)外部RAM的低256单元(4)堆栈操作指令(PUSH、POP),以堆栈作间址寄存器的间接寻址方式MOVXA,@R03.2.5变址寻址方式变址寻址是为了访问程序存储器中的数据表格如;MOVCA,@A+DPTR把DPTR和A的内容相加,再把所得到的程序存储器地址单元的内容送A假定指令执行前(A)=02H,(DPTR)=0100H则操作数地址为0100H+02H=0102H假定指令执行前(A)=02H,(DPTR)=0100H则操作数地址为0100H+02H=0102H故指令执行的结果是A的内容为38HROM寻址方式说明:(1)只能对程序存储器进行寻址,寻址范围64KB(2)变址寻址的指令只有3条:MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR(3)变址寻址的指令都是一字节指令3.2.6相对寻址方式为解决程序转移而专门设置的,为转移指令所采用目的地址=转移指令地址+转移指令字节数+rel偏移量rel是一个带符号的8位二进制补码数,表示的数的范围是:-128~+127指令:SJMPrel3.2.7位寻址方式位处理功能,可以对数据位进行操作如:MOVC,3AH把3AH位的状态送进位位C寻址范围:(1)内部RAM中的位寻址区单元地址为20H~2FH,共16个单元128位,位地址是00H~7FH(2)专用寄存器的可寻址位可供寻址的专用寄存器共有11个,实有寻址位83位寻址位在指令中的4种表示方法:(1)直接使用位地址。例如PSW寄存器位5地址为0D5H(2)位名称表示方法。例如PSW寄存器位5是F0标志位用F0表示(3)单元地址加位数的表示方法。例如,0D0H单元(即PSW寄存器)位5,为0D0H.5(4)专用寄存器符号加位数的表示方法。例如PSW寄存器的位5,表示为PSW.53.3MCS-51单片机指令系统指令111条,分为五大类:数据传送类指令(29)条算术运算类指令(24条)逻辑运算及移位类指令(24条)控制转移类指令(17条)位操作类指令(17条)3.3.1数据传送类指令(29条)MOV目的操作数,源操作数源操作数:累加器A、通用寄存器Rn、直接地址direct、间址寄存器和立即数目的操作数:累加器A、通用寄存器Rn、直接地址direct、间址寄存器1.普通传送指令1)片内数据存储器传送指令(16条)(1)以A为目的操作数的指令(4条)MOVA,#data;A←dataMOVA,direct;A←(direct)MOVA,Rn;A←(Rn)MOVA,@Ri;A←((Ri))例3.1指令:MOVA,#40H;A←40H立即寻址MOVA,40H;A←(40H)直接寻址MOVA,R0;A←(R0)寄存器寻址MOVA,@R0;A←((R0))寄存器间接寻址(2)以Rn为目的操作数的指令(3条)MOVRn,#data;Rn←dataMOVRn,direct;Rn←(direct)MOVRn,A;Rn←(A)例3.2指令:MOVR2,#7AH;R2←7AH立即寻址MOVR2,7AH;R2←(7AH)直接寻址MOVR3,A;R3←(A)寄存器寻址(3)以直接地址为目的操作数的指令(5条)MOVdirect,#data;direct←dataMOVdirect,direct;direct←(direct)MOVdirect,A;direct←(A)MOVdirect,Rn;direct←(Rn)MOVdirect,@Ri;direct←((Ri))例3.3.3指令:MOV02H,#80H;02H←80H立即寻址MOV0E0H,80H;0E0H←(80H)直接寻址MOVP2,A;P2←(A)寄存器寻址MOV60H,R2;60H←(R2)寄存器寻址MOV40H,@R0;40H←((R0))寄存器间接寻址(4)以寄存器间接寻址为目的操作数的指令(3条)MOV@Ri,#data;(Ri)←dataMOV@Ri,direct;(Ri)←(direct)MOV@Ri,A;(Ri)←(A)例3.3.4指令:MOV@R0,#70H;(R0)←70H立即寻址MOV@R0,70H;(R0)←(70H)直接寻址MOV@R1,A;(R0)←(A)寄存器寻址(5)16位数据传送指令(1条)MOVDPTR,#data16;DPTR←data16例3.3.5指令:MOVDPTR,#1234H;(DPH)←12H,;(DPL)←34H立即寻址2)片外数据存储器传送指令(4条)(1)使用DPTR进行间接寻址(2)使用Ri进行间接寻址MOVXA,@DPTR;A←((DPTR))MOVX@DPTR,A;(DPTR)←AMOVXA,@Ri;A←((Ri))MOVX@Ri,A;(Ri)←A说明:(1)MCS-51指令系统中没有专用的存储器读写指令,实际上外部数据存储器数据传送指令就是外部RAM的读写指令(2)外部RAM数据传送指令与内部RAM数据传送指令相比,在指令助记符中增加了“X”,“X”是代表外部之意(3)外部RAM的数据传送,只能通过累加器A进行例3.6要求把外部RAM60H单元中的数据8BH传送到内部RAM50H中,试编程。解法1:MOVR0,#60H;(R0)=60HMOVXA,@R0;(A)=8BHMOV50H,A;(50H)=8BH解法2:MOVDPTR,#0060H;(DPTR)=0060HMOVXA,@DPTR;(A)=8BHMOV50H,A;(50H)=8BH3)程序存储器传送指令(2条)2条访问存储器的查表指令MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC;A←((A)+(PC))例3.7已知程序存储器中以TAB为起点地址的空间存放着0~9的ASCII码,累加器A中存放着一个0~9之间的BCD码数据。要求用查表的方法获得A中数据的ASCII码。解法1:MOVDPTR,#TABMOVCA,@A+DPTRRETTAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H解法2:INCAMOVCA,@A+PCRETTAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39Hb3b2b1b0b6b5b40000010100111001011101110000000100100011010001010110011110001001101010111100110111101111NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSIDLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUSSP!“#$%&‘()*+’-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWSYZ[\]ˆ_`abcdefghijklmnopqrstuvwsyz{|}~DEL(1)整字节交换指令源操作数与累加器A进行8位数据交换,共有3条指令:XCHA,Rn;(A)(Rn)XCHA,direct;(A)(direct)XCHA,@Ri;(A)((Ri))(2)半字节交换指令源操作数与累加器A进行低4位的半字节数据交换,只有1条指令:XCHDA,@Ri;(A)3~0((Ri))3~0(3)累加器高低半字节交换指令累加器A的高低半个字节进行数据交换,只有1条指令:SWAPA;(A)3~0(A)7~42.数据交换指令(5条)例3.8已知(A)=12H,(R1)=30H,内部RAM(30H)=34H,分析指令执行结果。XCHA,30H;(A)=34H,(30H)=12HXCHA,@R1;(A)=12H,(30H)=34HXCHDA,@R1;(A)=14H,(30H)=32HSWAPA;(A)=41H3.堆栈操作指令•入栈操作的过程是:先将堆栈指针自动加1,然后数据压入堆栈。•出栈操作与此相反,先从堆栈中将数据弹出,送给direct单元,然后指针自动减1。•无论是入栈操作还是出栈操作,其操作对象只能是用direct形式表示的内部数据存储空间地址(00H~7FH)或某个特殊功能寄存器。汇编格式机器语言格式操作功能字节数周期数PUSHdirect11000000directSP←(SP)+1(SP)←(direct)22POPdirect11010000directdirect←((SP))SP←(SP)-122•设某主程序和子程序SUB1中均要用到累加器A及地址指针DPTR,则在子程序中可以使用下列方式实现对现场数据的保护和恢复。•PUSHACC;保护现场•PUAHDPH•PUSHDPL•…;子程序若干指令•POPDPL;恢复现场•POPDPH•POPACC例3.9设(20H)=55H,(30H)=66H,试利用堆栈作为缓冲器,编制程序交换20H和30H单元中的内容。解:MOVSP,#60H;令栈底地址为60H,即SP=60HPUSH20H;SP←(SP)+1,SP=61H,(61H)←55HPUSH30H;SP←(SP)+1,SP=62H,(62H)←66HPOP20H;20H←66H,SP←(SP)﹣1,SP=61HPOP30H;30H←55H,SP←(SP)﹣1,SP=60H执行结果:SP=60H,(20H)=66H,(50H)=55H。3.3.2算术运算类指令(共24条)1、加法指令1)不带进位的加法指令ADDA,#data;A←(A)+dataADDA,direct;A←(A)+(direct)ADDA,Rn;A←(A)+(Rn)ADDA,@Ri;A←(A)+((Ri))加法运算的结果会影响程序状态字寄存器PSW,其中包括:①如果运算结果的最高位第7位有进位,则进位标志CY置“1”,反之,CY清“0”;②如果运算结果的第3位有进位,则辅助进
本文标题:3 MCS-51单片机的汇编语言指令系统
链接地址:https://www.777doc.com/doc-3623843 .html