您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 单片机应用技术-第4章
4.1指令格式及寻址方式本章内容:4.2数据传送类指令(29条)4.3算术运算类指令(24条)4.4逻辑运算类指令(24条)4.5转移控制类指令(17条)4.6位操作类指令(17条)第4章单片机程序设计4.7伪指令(17条)4.1指令格式及常用符号4.1.1指令格式单字节指令8位编码仅为操作码:指令INCA,编码为04H。A隐含在操作码中。注意:指令中“A”表示累加器,而“ACC”表示累加器对应的地址(E0H)。00000100INCA高5位为操作码,低3位为存放操作数的寄存器编码。如:MOVA,R08位编码含有操作码和寄存器编码编码为11101000B,可表示为E8H(低3位000为寄存器R0的编码)。11101000MOVA,R0寄存器号双字节指令第一字节表示操作码,第二个字节表示参与操作的数据或数据存放的地址。如:MOVA,#50H编码为01110100B,01010000B。其十六进制表示为74H,50H。操作数01010000MOVA,#50H操作码01110100三字节指令指令的第一字节表示该指令的操作码,后两个字节表示参与操作的数据或数据存放的地址。如:MOV20H,#50H编码为01110101B,00100000B,01010000B。可表示为75H,20H,50H。操作数00100000MOV20H,#50H操作码0111010101010000符号指令的格式一般格式:操作助记符[目的操作数][,源操作数][;注释]在两个操作数的指令中,通常目的操作数写在左边,源操作数写在右边。操作数个数无操作数单操作数两操作数三操作数如:ANLA,#40HANL为“与”操作的助记符,立即数“40H”为源操作数,累加器A为目的操作数。注:在指令中,多数情况下累加器用“A”表示,仅在直接寻址方式中,用“ACC”表示累加器在SFR区的具体地址E0H。MOVA,#30H;机器码为74H、30H;MOVACC,#30H;机器码为75H、E0H、30H。符号指令及其注释中常用的符号Rn(n=0~7)-当前工作寄存器组中的寄存器之一;Ri(i=0,1)--当前工作寄存器组中的R0或R1;@---------------间址寄存器前缀;#data-----------8位立即数;#data16--------16位立即数;direct-----------片内低128个RAM单元地址及SFR地址(可用符号名称表示);addr11-----------11位目的地址;addr16-----------16位目的地址;rel-----------------补码形式表示的8位地址偏移量,值在-128~+127范围内;bit----------------片内RAM位地址、SFR的位地址(可用符号名称表示);/-------------------位操作数的取反操作前缀;(×)-----------表示×地址单元或寄存器中的内容;←----------------箭头右边的内容送入箭头左边的单元中。4.1.280C51的寻址方式寻找操作数或指令的地址的方式。寻址方式有七种,即:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、基址寄存器加变址寄存器变址寻址、相对寻址和位寻址。若不特别声明,我们后面提到的寻址方式均指源操作数的寻址方式。寻址方式及对应的存储器空间寻址方式寻址空间立即寻址程序存储器直接寻址片内RAM低128字节、SFR寄存器寻址工作寄存器R0~R7,A,B,DPTR寄存器间址片内RAM:@R0,@R1,SP片外RAM:@R0,@R1,@DPTR变址寻址程序存储器:@A+PC,@A+DPTR相对寻址程序存储器256字节范围内:PC+偏移量位寻址片内RAM的位寻址区(20H~2FH字节地址)可位寻址的SFR操作数在寄存器中,指令中直接给出该寄存器名称。具有较高的传送和运算速度。1寄存器寻址例:MOVA,R0寻址空间R0~R7AB(AB)DPTR例:MOVA,R0;设(R0)=30H,0工作寄存器组00H7FH30H30H80HFFHAE8HFFFFHMOVA,R00000HROMSFRRAM结果:(A)=30H操作码后的字节是操作数的地址,操作数本身放在该地址指示的存储单元中。2直接寻址寻址空间片内RAM(128字节)SFR(常采用符号形式)如:MOVA,50H例:MOVA,50H;设(50H)=3AH50H7FH3AH3AH80HFFHAFFFFHMOVA,50H0000HROMSFRRAM结果:(A)=3AHE5H50H寄存器中内容为地址,从该地址取操作数。3寄存器间接寻址寻址空间片内RAM片外RAM间址寄存器R0或R1DPTR片内RAM片外RAM(256字节)P2口线,页面方式MOVMOVX例:MOVA,@R0;设(R0)=30HE6HFFFFHMOVA,@R00000HROM结果:(A)=30H30H7FH5AH5AH80HFFHASFRRAM30HR0编码中直接给出操作数。操作码之后的操作数称为立即数。4立即寻址寻址空间:ROM立即数单字节、双字节标识:#源操作数例:MOVA,#50H;7FH50H80HFFHAFFFFHMOVA,#50H0000HROMSFRRAM结果:(A)=50H74H50H以一个基地址加上一个偏移量地址形成操作数地址。5变址寻址寻址空间:ROM基址寄存器:DPTRPC偏移量寄存器:A操作数地址:例:MOVCA,@A+DPTR;7FH0FH80HFFHAFFFFHMOVCA,@A+DPTR0000HROMSFRRAM结果:(A)=88H93H88H00H24H2400H+0FH=240FH240FHDPLDPH88H以PC当前值为基准,加上指令中相对偏移量rel形成目标地址。6相对寻址PC目标地址:+relPC的当前值:读出该2字节或3字节的跳转指令后,PC指向的下条指令的地址。rel取值范围是:-128~+127。(补码)例:JCrel;设rel=75H,PSW.7为“1”7FH1000000080HFFHPSW1002HJCrel1000HROMSFRRAM结果:程序转向1077H单元40H75H1001H1077H1000H+02H=1002HPC值字节数1002H+75H=1077H当前PC值新PC值对位地址中内容进行操作。操作的是8位二进制数中的某一位。7位寻址SFR的寻址位常用符号位地址表示,如:CLRACC.0MOV30H,C寻址空间片内RAM中位寻址区SFR中的可寻址位4.2数据传送类指令(29条)一般不影响PSW状态传送类指令分成两大类MOV,一般传送非MOV,特殊传送,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。16位传送将源操作数data16(通常是地址常数)送入目的操作数DPTR中。例如:MOVDPTR,#1234H4.2.1数据传送结果为:(DPH)=12H,(DPL)=34H。8位传送#data不能用作目的字节;源字节与目的字节不相同(除direct外);寄存器寻址与寄存器及其间址间不相互传送。传送关系目的源操作数AARnRndirectdirect@Ri@Ri#data…以A为目的例:若(R1)=20H,(20H)=55H执行MOVA,@R1MOVA,Rndirect@Ri#data结果:(A)=55H。以Rn为目的例:若(50H)=40H执行MOVR6,50HMOVRn,Adirect#data结果:(R6)=40H。以direct为目的例:若(R1)=50H,(50H)=18H执行MOV40H,@R1结果:(40H)=18H。MOVdirect,Rndirect1@Ri#dataA以@Ri为目的例:若(R1)=30H,(A)=20H执行MOV@R1,A结果:(30H)=20HMOV@Ri,Adirect#dataROM查表MOVCA,@A+PC以PC的当前值与偏移量之和作为程序存储器地址,将该地址单元的内容传送到A。指令执行后PC的内容不变。特殊传送指令MOVCA,@A+DPTR以DPTR与偏移量之和作为程序存储器地址,将该地址单元的内容传送到A。指令执行后DPTR的内容不变。读写片外RAM读片外RAMMOVXA,@DPTRMOVXA,@Ri写片外RAMMOVX@DPTR,AMOVX@Ri,A4.2.2堆栈操作指令操作PUSHdirectPOPdirect原则:向地址高端生长,后进先出SP:指向栈顶(活动端),复位值07H例:若(SP)=07H,(40H)=88H执行PUSH40H结果:(SP)=08H,(08H)=88H。4.2.2数据交换指令例:若(R0)=80H,(A)=20H。执行XCHA,R0交换类指令,传送是双向的字节交换XCHA,Rndirect@Ri结果:(A)=80H,(R0)=20H。半字节交换例:若(R0)=30H,(30H)=67H,(A)=20H。执行XCHDA,@R0后,(A)=27H,(30H)=60H。XCHDA,@RiSWAPA例:若(A)=30H,执行SWAPA后,(A)=03H。4.3算术运算类指令(24条)加、减、乘、除及加1和减1等多数以A为源操作数,同时又使A为目的操作数。PSW中的OV、CY、ACCY,无符号整数多字节加、减法、移位等OV,可方便的控制补码运算AC,用于BCD码运算。4.3.1加法指令不带进位加影响:CY、AC、OV和PADDA,Rndirect@Ri#data注:D7、D6位只有一个有进位时,(OV)=1。如:两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(OV)=1。例若(A)=84H,(30H)=8DH,执行指令ADDA,30H之后,由于:结果:(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有进位,D6无进位),(P)=0。(A)10000100+(30H)10001101进位111结果00010001CYAC带进位加源操作数与A的内容相加再与CY相加,结果送入目的操作数A中。ADDCA,Rndirect@Ri#dataCY是在该指令执行之前已存在的值。增1源操作数的内容加1,结果再送回原单元。这些指令中仅INCA影响P标志。INCRndirect@RiDPTRA例:若(CY)=0,A和R2内容见下式。执行指令:ADDA,R2DAA结果:123(BCD数)(A)01010110+(R2)0110011110111101调整01100110结果1001000114.3.2减法指令带借位减SUBBA,Rndirect@Ri#data影响:CY、AC、OV和P注:D7、D6位只有一个有借位时,(OV)=1。如要用此组指令完成不带借位减法,只需先清CY为0。例若(A)=C9H,(R2)=54H,(CY)=1,执行指令SUBBA,R2之后,由于:即:(A)=74H,(CY)=0,(AC)=1,(OV)=1(位6有借位,位7无借位),(P)=0。(A)11001001-(CY)111001000-(R2)01010100结果01110100减1操作数内容减1,结果再送回原单元。仅DECA影响P标志。其余指令都不影响标志位的状态。DECRndirect@RiA4.3.3十进制调整指令对A中刚进行的2个BCD码加法的结果调整。DAA当A中低4位数出现了非BCD码或低4位产生进位(AC=1),则在低4位加6。当A中高4位数出现了非BCD码或高4位产生进位(CY=1),则在高4位加6。调整后,CY表示结果的百位值。4.3.4乘法MULAB例:若(A)=50H,(B)=A0H,执行指令MULAB之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。当乘积大于FFH时,溢出标志位(OV)=1。标志CY总是被清0。XABAB乘数被乘数积4.3.5除法例:若(A)=FBH(251),(B)=12H(18),执行指令DIVAB之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。DIVAB除数为0,商的A和B内容不确定,且(OV)
本文标题:单片机应用技术-第4章
链接地址:https://www.777doc.com/doc-4012373 .html