第3章 MCS-51 单片机的指系统.ppt
第第3章章 MCS-51单片机的指令系统单片机的指令系统1 指令系统概述指令系统概述一、指令格式一条用助记符表示的汇编语言,一般由操作码和操作数两部分组成。操作码表示指令的功能,操作数表示指令的操作对象。例:LOOP:ADD A,#50H;执行加法 操作码 标号 目的操作数 源操作数 注释 在指令格式中方括号中的内容为可选项,不一定都有.二、指令字长和指令周期二、指令字长和指令周期指令字长是指存储这条指令所占的存储单元的个数。指令字长是指存储这条指令所占的存储单元的个数。指令字长有单字节、双字节和三字节三种。指令字长有单字节、双字节和三字节三种。例:例:RETRET;单字节指令;单字节指令 00100010 22H 00100010 22H 例:例:MOV AMOV A,#0FH#0FH;双字节指令;双字节指令 例:例:MOV 55HMOV 55H,#0AH#0AH;三字节指令;三字节指令 机器周期:机器周期:MCS-51MCS-51MCS-51MCS-51规定一个机器周期由规定一个机器周期由规定一个机器周期由规定一个机器周期由12121212振荡周期组振荡周期组振荡周期组振荡周期组成。成。成。成。T T机器周期机器周期机器周期机器周期=1/f1/f振荡振荡振荡振荡12指令字节数越多,所占存储单元越多,但指令周期并不指令字节数越多,所占存储单元越多,但指令周期并不与指令所占字节数成比例。与指令所占字节数成比例。例:例:f=12MHZ T=1usf=12MHZ T=1us指令周期:执行一条指令所需的时间。指令周期:执行一条指令所需的时间。例:例:MUL ABMUL AB;乘法指令,是单字节指令,但指令;乘法指令,是单字节指令,但指令周期为周期为4 4个机器周期。个机器周期。凡以字母凡以字母A-FA-F开头的十六进制数均需加前导开头的十六进制数均需加前导0 0 2 2 寻址方式寻址方式寻址方式是指寻址方式是指CPUCPU寻找操作数或操作数地址的方法寻找操作数或操作数地址的方法一、直接寻址一、直接寻址指令中直接给出操作数所在的单元地址或位地址指令中直接给出操作数所在的单元地址或位地址1 1、可访问的存储空间、可访问的存储空间1.1 1.1 内部内部RAMRAM低低128128单元(单元(00H-7FH00H-7FH)例:例:MOV AMOV A,0D0H0D0H;(D0HD0H)(A A)MOV AMOV A,PSWPSW;(PSWPSW)(A A)1.2 1.2 特殊功能寄存器区,可以以单元地址给出,也可用特殊功能寄存器区,可以以单元地址给出,也可用寄存器符号形式给出。(寄存器符号形式给出。(A A,ABAB,DPTRDPTR除外)除外)例:例:MOV AMOV A,70H70H;(70H70H)(A A)1.3 2111.3 211个位地址空间个位地址空间。内内部部RAMRAM中可位寻址的中可位寻址的20H-2FH20H-2FH对应的对应的128128个位地址和个位地址和1111个个SFRSFR中中8383个可用的位地址空间个可用的位地址空间 例:例:MOV AMOV A,30H30H;30H30H是单元地址是单元地址 例:例:MOV CMOV C,30H30H;30H30H是位地址是位地址 二、立即寻址二、立即寻址 操作数为立即数。立即数前加操作数为立即数。立即数前加“#”#”,以区别地址,以区别地址例:例:MOV AMOV A,#7AH#7AH;7AH 7AH (A A)MOV DPTRMOV DPTR,#1234H#1234H;12H 12H (DPHDPH),),34H 34H (DPLDPL)三、寄存器寻址三、寄存器寻址操作数在寄存器中。操作数在寄存器中。寻址范围:寻址范围:1 1 四组工作寄存器四组工作寄存器R0-R7R0-R7共共3232个工作寄存器个工作寄存器 例:例:MOV AMOV A,R0R0;(;(R0R0)(A A)2 2 特殊功能寄存器中有:特殊功能寄存器中有:A A,ABAB,DPTRDPTR,CYCY寄存器寄存器B B只有在执行只有在执行乘除法乘除法指令时,才是寄存器寻指令时,才是寄存器寻址方式址方式四、寄存器间接寻址四、寄存器间接寻址间接寻址是由指令指定某一间接寻址是由指令指定某一寄存器的内容寄存器的内容作为操作数的作为操作数的地址地址。该地址指定的单元内容作为被寻找的操作数。该地址指定的单元内容作为被寻找的操作数。MCS-51MCS-51用于间接寻址的寄存器有用于间接寻址的寄存器有R0R0、R1R1、堆栈指针、堆栈指针SPSP、数据指针数据指针DPTR DPTR 1 1、内部、内部RAMRAM低低128128单元,地址范围单元,地址范围00H-7FH00H-7FH,用,用RiRi(i=0i=0、1 1)和和SPSP作为间址寄存器作为间址寄存器例:例:(R0)=30H(R0)=30H,(30H)=20H(30H)=20H MOV A MOV A,R0R0;结果:(结果:(A A)=20H=20H;2 2 与与P2P2口配合,用口配合,用RiRi指示低指示低8 8位地址,可寻址片外数据位地址,可寻址片外数据存储器或存储器或I/OI/O的的64K64K区域区域 例:(例:(P2P2)=20H=20H,(,(R0)=10H,(2010H)=30H R0)=10H,(2010H)=30H MOVX A,MOVX A,R0;R0;结果:(结果:(A A)=30H =30H 3 DPTR 3 DPTR 间接寻址寄存器,可寻址片外程序存储器、数间接寻址寄存器,可寻址片外程序存储器、数据存储器、据存储器、I/OI/O的的64KB64KB区域区域.例:(例:(DPTRDPTR)=4000H=4000H,(,(4000H4000H)=50H=50H MOVX A,MOVX A,DPTR;DPTR;结果:(结果:(A A)=50H =50H 寄存器间接寻址方式不能用于对特殊功能寄寄存器间接寻址方式不能用于对特殊功能寄存器区存器区SFRSFR的寻址的寻址 例:例:MOV R0MOV R0,#0F0H#0F0H;MOV AMOV A,R0R0;以上指令不能执行,因为以上指令不能执行,因为0F0H0F0H为特殊功能寄存器为特殊功能寄存器B B的单元地址,的单元地址,而对特殊功能寄存器只能直接寻址,而对特殊功能寄存器只能直接寻址,不能间接寻址。不能间接寻址。五五 基址加变址寄存器间接寻址(变址寻址)基址加变址寄存器间接寻址(变址寻址)变址寻址是以数据指针变址寻址是以数据指针DPTRDPTR或程序指针或程序指针PCPC作为基址寄作为基址寄存器,以累加器存器,以累加器A A作为变址寄存器,并以两者内容相作为变址寄存器,并以两者内容相加形成新的加形成新的1616位地址作为操作数地址,再寻址该地址,位地址作为操作数地址,再寻址该地址,读取数据。读取数据。变址寻址指令:变址寻址指令:MOVC AMOVC A,A+PCA+PC MOVC AMOVC A,A+DPTR A+DPTR 37H 37H 例:(例:(A A)=50H=50H,PC=3F00HPC=3F00H,(,(3F51H3F51H)=37H=37H MOVC A MOVC A,A+PC;A+PC;(A)=?(A)=?变址寻址方式只能对程序存储器进行寻址,因此变址寻址方式只能对程序存储器进行寻址,因此只能用于读取数据,而不能用于存放数据,它主只能用于读取数据,而不能用于存放数据,它主要用于查表性质的访问。要用于查表性质的访问。六六 相对寻址相对寻址 它以它以PCPC值加上指令中给出的相对偏移量(值加上指令中给出的相对偏移量(relrel)形成转形成转移地址。相对偏移量是一个带符号的移地址。相对偏移量是一个带符号的8 8位二进制数,以位二进制数,以补码形式出现。补码形式出现。相相对对转转移移指指令令满满足足条条件件后后,转转移移的的地地址址(一一般般称称为为目目的地址)的地址)目的地址目的地址 =当前当前PCPC值值 +relrel =源地址源地址 +转移指令字节数转移指令字节数 +relrel例如:例如:JZ 08HJZ 08H 累累加加器器A A为为零零条条件件满满足足后后,从从源源地地址址(2050H2050H)分分别别向下、向下、向上转移向上转移1010个单元。个单元。例:例:relrel=75H,CY=1=75H,CY=12002H:JC 2002H:JC relrel;(;(如如CY=1CY=1,则跳转到,则跳转到PC+relPC+rel处去执行程序处去执行程序)结果结果:程序转向(程序转向(PCPC)+2+rel=2002H+2+75H=2079H+2+rel=2002H+2+75H=2079H单元去执行单元去执行 相对寻址用于访问程序存储器,只出现在转移指相对寻址用于访问程序存储器,只出现在转移指令中。寻址不是寻找操作数的地址,而是要得到令中。寻址不是寻找操作数的地址,而是要得到程序跳转地址程序跳转地址PCPC值。值。七七 位寻址位寻址 1 1 位寻址范围:内部位寻址范围:内部RAMRAM的位寻址区,共的位寻址区,共1616个单元的个单元的128128位,单元地址为:位,单元地址为:20H-2FH20H-2FH,位地址为:,位地址为:00H-7FH00H-7FH ;特殊功能寄存器;特殊功能寄存器SFRSFR可供位寻址的专用寄存器可供位寻址的专用寄存器1111个,个,实用位地址实用位地址8383位。位。2 2 位地址在指令中的位地址在指令中的4 4种表达方式种表达方式 2.1 2.1 直接使用位地址直接使用位地址 MOV CMOV C,0D6H0D6H;2.2 2.2 位名称表示法位名称表示法 MOV CMOV C,ACAC;2.3 2.3 单元地址加位的表示法单元地址加位的表示法 MOV CMOV C,0D0H.6;0D0H.6;2.4 2.4 专用寄存器符号加位的表示法专用寄存器符号加位的表示法 MOV CMOV C,PSW.6PSW.6 目的操作数寻址方式少,源操作数寻址方式多。在指目的操作数寻址方式少,源操作数寻址方式多。在指目的操作数寻址方式少,源操作数寻址方式多。在指目的操作数寻址方式少,源操作数寻址方式多。在指令中一般说的寻址方式是指源操作数的寻址方式。令中一般说的寻址方式是指源操作数的寻址方式。令中一般说的寻址方式是指源操作数的寻址方式。令中一般说的寻址方式是指源操作数的寻址方式。表表31 7 种寻址方式及使用空间种寻址方式及使用空间 MCSMCS5151单单片片机机指指令令系系统统分分为为:数数据据传传送送类类指指令令、算算术术运运算算类类指指令令、逻逻辑辑运运算算及及移移位位类类指指令令、控控制制转转移移类类指指令令和和位位操操作作(布布尔尔操操作作)指指令令5 5大大类类,共共计计111111条条指指令令。现现按按其其分分类类分分别别介介绍绍各各条条指指令令的的格格式式、功能、对状态标志的影响以及应用。功能、对状态标志的影响以及应用。3 MCS-513 MCS-51单片机指令系统单片机指令系统A A累加器。累加器。B B寄存器寄存器,用于用于MULMUL和和DIVDIV指令中。指令中。C C进位标志或进位位。进位标志或进位位。间间接接寻寻址址寄寄存存器器或或基基址址寄寄存存器器的的前前缀缀,如如 Ri,DPTRRi,DPTR。/位操作数的前缀位操作数的前缀,表示对该位取反。表示对该位取反。(X X)X X中的内容。中的内容。(X X)由由X X寻址的单元中的内容。寻址的单元中的内容。箭头左边的内容被箭头右边的内容所代替。箭头左边的内容被箭头右边的内容所代替。RnRn寄存器区中的寄存器区中的8 8个工作寄存器个工作寄存器R0R0R7,R7,即即n=0n=07 7。RiRi寄存器区中的寄存器区中的2 2个寄存器个寄存器R0R0、R1,i=0R1,i=0、1 1。directdirect8 8位位内内部部RAMRAM单单元元的的地地址址,它它可可以以是是一一个个内内部数据区部数据区RAMRAM单元单元(00H(00H7FH)7FH)或特殊功能寄存器地址或特殊功能寄存器地址datadata指令中的指令中的8 8位常数。位常数。data16data16指令中的指令中的1616位常数。位常数。addr16addr161616位位的的目目的的地地址址,用用于于LJMP,LJMP,LCALLLCALL指指令令,可指向可指向64KB64KB程序存储器地址空间。程序存储器地址空间。addr1111addr1111位位的的目目的的地地址址,用用于于AJMP,AJMP,ACALLACALL指指令令。目目的的地地址址必必须须与与下下一一条条指指令令的的第第一一个个字字节节在在同一个同一个2 KB2 KB程序存储器地址空间之内。程序存储器地址空间之内。relrel 8 8位位带带符符号号的的偏偏移移量量字字节节,用用于于SJMPSJMP和和所所有有条条件件转转移移指指令令中中。偏偏移移量量相相对对于于下下一一条条指指令令的的第一个字节计算第一个字节计算,在在128128+127+127范围内取范围内取bitbit内内部部数数据据RAMRAM或或特特殊殊功功能能寄寄存存器器中中的的可可直直接接寻址位。寻址位。DPTRDPTR数据指针数据指针,可用作可用作 16 16 位的地址寄存器。位的地址寄存器。一一 数据传送指令数据传送指令 1 1 内部数据传送指令(内部数据传送指令(MOVMOV)指令格式:指令格式:MOV MOV 目的操作数目的操作数,指令的源操作数和目的操作数都在单片机内部。可以是指令的源操作数和目的操作数都在单片机内部。可以是片内片内RAMRAM地址,也可以是特殊功能寄存器地址,也可以是特殊功能寄存器SFRSFR的地址的地址 指令的功能是把源操作数指定的字节变量复制到目的操指令的功能是把源操作数指定的字节变量复制到目的操作数所规定的单元或寄存器中,源字节不变。作数所规定的单元或寄存器中,源字节不变。1.1 1.1 立即数传送指令立即数传送指令 源操作数为立即数源操作数为立即数 八位立即数传送指令:八位立即数传送指令:MOV AMOV A,#DATA#DATA;DATADATA (A A)例:例:MOV AMOV A,#02H#02H;MOV MOV RnRn,#DATA#DATA;DATADATA (RnRn)n=0-7n=0-7 例:例:MOV RMOV R3 3,#02H#02H;例:例:MOV 30HMOV 30H,#02H#02H;MOV MOV RiRi,#DATA#DATA;DATADATA ((RiRi))i=0i=0,1 1 例:例:MOV MOV R1R1,#02H#02H;MOV directMOV direct,#DATA#DATA;DATADATA (direct)direct)立即数的高八位送立即数的高八位送DPHDPH,低八位送,低八位送DPLDPL。例例:(:(R0R0)=30H=30H,求,求A A,R4R4,30H30H,31H31H的内容的内容 MOV AMOV A,#10H#10H;MOV R4MOV R4,#36H#36H;MOV MOV R0R0,#7AH#7AH;MOV 31HMOV 31H,#01H#01H;结果:(结果:(A A)=10H=10H,(,(R4R4)=36H=36H,(,(30H30H)=7AH=7AH (31H31H)=01H =01H 1616位立即数传送指令位立即数传送指令MOV DPTRMOV DPTR,#DATA16#DATA16;例:例:MOV DPTRMOV DPTR,#2500H#2500H;结果:(结果:(DPTRDPTR)=2500H=2500H,(,(DPHDPH)=25H=25H,(,(DPLDPL)=00H=00H1.2 1.2 内部数据存储器与累加器内部数据存储器与累加器A A之间传送数据之间传送数据 MOV AMOV A,Rn;(RnRn;(Rn)()(A),nA),n=0-7=0-7 MOV MOV RnRn,A;(A)(A;(A)(Rn),nRn),n=0-7=0-7 MOV AMOV A,RiRi;((RiRi))(A),iA),i=0,1=0,1 MOV MOV RiRi,A;A;(A A)((RiRi)),i=0,1,i=0,1 MOV AMOV A,direct;direct;(directdirect)(A),(A),MOV directMOV direct,A;(A)A;(A)(direct),direct),例例:(A)=40H,(40H)=42H:(A)=40H,(40H)=42HMOV R0,A;MOV R0,A;MOV A,MOV A,R0R0 ;MOV 30HMOV 30H,A A;求(求(30H30H)=?(R0R0)=40H =40H (A A)=42H=42H(30H30H)=42H =42H MOV directMOV direct,Rn;(RnRn;(Rn)()(direct),ndirect),n=0-7=0-7 MOV MOV RnRn,direct;(directdirect;(direct)()(Rn),nRn),n=0-7=0-7 MOV directMOV direct,RiRi;((RiRi))(direct),idirect),i=0,1=0,1 MOV MOV RiRi,direct;direct;(directdirect)((RiRi)),i=0,1,i=0,1 MOV direct2MOV direct2,direct1;direct1;(direct1direct1)(direct2),(direct2),1.3 1.3 内部内部RAMRAM中中Rn,SFRRn,SFR与片内与片内RAMRAM之间的数据传送之间的数据传送 例:设内部例:设内部RAMRAM中中30H30H单元的内容为单元的内容为40H40H,40H40H单元的内容单元的内容为为10H10H,P1P1口作输入口,输入数据为口作输入口,输入数据为0CAH0CAH。求。求R0R0,R1R1,A A,B B,40H40H,P2P2各单元中的内容。各单元中的内容。MOV R0MOV R0,#30H#30H;MOV AMOV A,R0R0;MOV R1MOV R1,A A;MOV BMOV B,R1R1;MOV MOV R1R1,P1P1;MOV P2MOV P2,P1P1;(R0R0)=30H =30H (A A)=40H =40H (R1R1)=40H =40H (B B)=10H =10H (40H40H)=0CAH =0CAH (P2P2)=0CAH =0CAH 1.4 1.4 内部数据传送指令的使用内部数据传送指令的使用 DirectDirect直接地址直接地址 RiRi间接地址间接地址 RnRn 寄存器寄存器#data#data 立即数立即数 A A 累加器累加器 例:例:MOV MOV R1R1,R3R3;2 2 外部数据存储器(或外部数据存储器(或I/OI/O)的读写指令)的读写指令 2.1 2.1 用用DPTRDPTR进行间接寻址的指令进行间接寻址的指令 MOVX A,MOVX A,DPTRDPTR;((DPTR)(DPTR)(A)(A)MOVX MOVX DPTR,ADPTR,A;(A)A)(DPTR)(DPTR)DPTRDPTR为为1616位数据指针,该指令可寻址外部位数据指针,该指令可寻址外部RAM64KRAM64K范围范围(0000H-0FFFFH0000H-0FFFFH),地址低),地址低8 8位由位由P0P0口输出,地址高口输出,地址高8 8位位由由P2P2口输出,数据通过口输出,数据通过P0P0口读入或写出。口读入或写出。2.2 2.2 用用RiRi进行间接寻址的指令进行间接寻址的指令 MOVX A,MOVX A,RiRi;((RiRi)(A)(A)MOVX MOVX Ri,ARi,A;(A)A)(DPTR)(DPTR)说明:若外部扩展说明:若外部扩展RAMRAM小于等于小于等于256256单元,用单元,用RiRi间接寻间接寻址进行数据传送,址进行数据传送,8 8位地址线足够使用。位地址线足够使用。若外部扩展较大的若外部扩展较大的RAMRAM区域,须用区域,须用P2P2口输出高口输出高8 8位地址,位地址,用用RiRi表示低八位地址,表示低八位地址,P0P0口分时作低口分时作低8 8位地址线和数位地址线和数据线,据线,P2P2口应事先预置。口应事先预置。例:若外部例:若外部RAMRAM中,(中,(20FFH20FFH)=30H=30H,(2100H2100H)=15H=15H(2000H2000H)=10H=10H,求,求A A中的内容中的内容 MOV DPTRMOV DPTR,#20FFH#20FFH;INC DPTRINC DPTR;MOVX AMOVX A,DPTRDPTR;结果:(结果:(A A)=15H =15H MOV P2MOV P2,#20H#20H;MOV R0MOV R0,#0FFH#0FFH;INC R0INC R0;MOVX AMOVX A,R0R0;结果:(结果:(A A)=10H =10H 外部外部RAMRAM之间不能直接传送数据,必须通过累加器之间不能直接传送数据,必须通过累加器A A传送传送 例:例:MOVX 2000HMOVX 2000H,2001H2001H;3 3 程序存储器与累加器程序存储器与累加器A A传送数据指令传送数据指令 MOVC A,MOVC A,A+DPTRA+DPTR;((A)+(DPTR)(A)+(DPTR)(A)(A)MOVC A,MOVC A,A+PCA+PC;(A)+(PC)(A)+(PC)(A)(A)指令功能是把累加器指令功能是把累加器A A作为变址寄存器,将其中的内容作为变址寄存器,将其中的内容与基址寄存器(与基址寄存器(DPTRDPTR、PCPC)内容相加,得到程序存储器)内容相加,得到程序存储器某单元地址,再把该地址单元内容送累加器某单元地址,再把该地址单元内容送累加器A A。例:已知累加器例:已知累加器A A中有一个中有一个0-90-9范围内的数,用查表指令范围内的数,用查表指令编出能查出该数平方值的程序。设平方表表头的地址为编出能查出该数平方值的程序。设平方表表头的地址为2000H2000H。MOV DPTRMOV DPTR,#2000H#2000H;MOVC AMOVC A,A+DPTRA+DPTR;2000H2000H:DB 0DB 02001H2001H:DB 1DB 12002H2002H:DB 4DB 42003H2003H:DB 9DB 92009H2009H:DB 81DB 811FFBH1FFBH:ADD AADD A,#02H02H;1FFDH1FFDH:MOVC AMOVC A,A+PCA+PC;1FFEH1FFEH:2000H2000H:DB 0DB 02001H2001H:DB 1DB 12002H2002H:DB 4DB 42003H2003H:DB 9DB 92009H2009H:DB 81DB 81修正量修正量=表头首地址表头首地址-PC-PC当前值当前值=2000H-1FFEH=02H =2000H-1FFEH=02H 4 4 堆栈及堆栈指令堆栈及堆栈指令 4.1 4.1 堆栈的功能堆栈的功能计算机在转去执行子程序或中断服务程序后,很可能要计算机在转去执行子程序或中断服务程序后,很可能要使用单片机的某些寄存单元,这样就会破坏这些寄存单使用单片机的某些寄存单元,这样就会破坏这些寄存单元中原有内容。为了既能在子程序中或中断服务程序中元中原有内容。为了既能在子程序中或中断服务程序中使用这些寄存单元,又能保证在返回主程序之后恢复这使用这些寄存单元,又能保证在返回主程序之后恢复这些寄存单元的原有内容,些寄存单元的原有内容,CPUCPU在执行中断服务之前要把在执行中断服务之前要把单片机中各有关寄存器中内容保存起来,这就是所谓保单片机中各有关寄存器中内容保存起来,这就是所谓保护现场。断点和现场的内容保存在堆栈中。护现场。断点和现场的内容保存在堆栈中。4.24.2 堆栈指针堆栈指针SPSP 数据写入堆栈称为数据写入堆栈称为入栈入栈,数据从堆栈中读出称为,数据从堆栈中读出称为出栈出栈堆栈的最大特点就是堆栈的最大特点就是“后进先出后进先出”。堆栈有栈顶和栈底之分,栈底地址一经设定后固定堆栈有栈顶和栈底之分,栈底地址一经设定后固定不变。不论是数据进栈还是数据出栈,都是对栈顶不变。不论是数据进栈还是数据出栈,都是对栈顶单元进行的。为了指示栈顶地址,要设置堆栈指针单元进行的。为了指示栈顶地址,要设置堆栈指针SPSP。SPSP的内容为栈顶地址。的内容为栈顶地址。SPSP为为8 8位,它在片内位,它在片内RAM128RAM128个字节中开辟栈区,并随时跟踪栈顶地址。个字节中开辟栈区,并随时跟踪栈顶地址。系统复位后,系统复位后,SPSP初始化为初始化为07H07H。4.3 4.3 堆栈操作指令堆栈操作指令 进栈指令用于保护片内某个单元的内容,出栈指令用于进栈指令用于保护片内某个单元的内容,出栈指令用于恢复片内某个单元的内容。恢复片内某个单元的内容。PUSH directPUSH direct;(SPSP)+1 +1 (SPSP),(),(directdirect)((SPSP))POP directPOP direct;((SP)(SP))(directdirect),(SP,(SP)-1 (SP)-1 (SP)堆栈编制采用向上生成方式,即栈底占用较低地址,栈堆栈编制采用向上生成方式,即栈底占用较低地址,栈顶占用较高地址。顶占用较高地址。例:设(例:设(30H30H)=03H=03H,(,(40H40H)=04H=04H,试利用堆栈实现,试利用堆栈实现30H30H和和40H40H单元的数据交换。单元的数据交换。MOV SPMOV SP,#50H#50H;PUSH 40HPUSH 40H;PUSH 30HPUSH 30H;POP 40HPOP 40H;POP 30HPOP 30H;(SPSP)=50H =50H (SPSP)=51H=51H,(,(51H51H)=04H =04H (SPSP)=52H=52H,(,(52H52H)=03H =03H (40H40H)=03H=03H,(,(SPSP)=51H =51H (30H30H)=04H=04H,(,(SPSP)=50H =50H 使用栈操作指令,应注意指令操作码后紧跟直接地址,使用栈操作指令,应注意指令操作码后紧跟直接地址,要注意书写格式。如:要注意书写格式。如:PUSH ACCPUSH ACC;POP ACC POP ACC 5 5 数据交换指令数据交换指令 5.1 5.1 整字节交换指令整字节交换指令 XCH AXCH A,RnRn;(;(RnRn)(A A)XCH AXCH A,RiRi;(;((RiRi))(A A)XCH AXCH A,directdirect;(;(directdirect)(A A)例:已知外部例:已知外部RAMRAM的的20H20H单元中有一个数单元中有一个数X X,内部,内部RAMRAM的的20H20H单元中有一个数单元中有一个数Y Y,试利用字节交换指令编出,试利用字节交换指令编出可以使它们互相交换的程序。可以使它们互相交换的程序。MOV R1MOV R1,#20H#20H;MOVX AMOVX A,R1R1;(R1R1)=20H =20H (A A)=X =X (A A)=Y=Y,内,内RAMRAM(20H20H)=X =X 外外RAMRAM(20H)=Y 20H)=Y XCH AXCH A,R1R1;MOVX MOVX R1R1,A A;5.2 5.2 低半字节交换指令低半字节交换指令 XCHD AXCHD A,RiRi;(;((RiRi))0-30-3 (A A)0-3 0-3 累加器累加器A A低四位与片内低四位与片内RAMRAM某单元的低四位交换,高四位某单元的低四位交换,高四位不变。不变。例:(例:(R1R1)=30H=30H,(,(A A)=67H=67H,(,(30H30H)=84H=84H XCHD A XCHD A,R1R1;结果:(结果:(A A)=64H=64H,(,(30H30H)=87H=87H5.3 5.3 累加器累加器A A高低半字节交换指令高低半字节交换指令SWAP ASWAP A;(;(A A)0-30-3 (A A)4-74-7 例:设(例:设(A A)=0F7H=0F7H SWAP A SWAP A;结果:(结果:(A A)=7FH=7FH例:已知外部例:已知外部RAM2020HRAM2020H单元有一个数单元有一个数X X,内部,内部RAM20HRAM20H单单元有一个数元有一个数Y Y,试编出可以使它们互相交换的程序。,试编出可以使它们互相交换的程序。MOV P2MOV P2,#20H#20H;MOV R1MOV R1,#20H#20H;MOVX AMOVX A,R1R1;XCH AXCH A,R1R1;MOVX MOVX R1R1,A A;MOV DPTRMOV DPTR,#2020H#2020H;MOVX AMOVX A,DPTRDPTR;XCH AXCH A,20H20H;MOVX MOVX DPTRDPTR,A A;例:已知片内例:已知片内50H50H单元中有一个单元中有一个0-90-9的数,试编程把它变的数,试编程把它变为相应的为相应的ASCIIASCII码。码。MOV R0MOV R0,#50H#50H;MOV AMOV A,#30H#30H;XCHD AXCHD A,R0R0;MOV MOV R0R0,A A;表32 数据传送类指令助记符与操作 例:将片内例:将片内RAM40HRAM40H单元内容送至片外单元内容送至片外50H50H单元中,单元中,将片外将片外2350H2350H单元内容送片内单元内容送片内41H41H单元单元MOV AMOV A,40H40H;MOV P2MOV P2,#00H#00H;MOV R0MOV R0,#50H#50H;MOVX MOVX R0R0,A A;MOV P2MOV P2,#23H#23H;MOVX AMOVX A,R0R0;MOV 41HMOV 41H,A A;二、算术运算指令二、算术运算指令1 1 加法指令加法指令 ADD AADD A,Rn;(RnRn;(Rn)+)+(A A)(A),nA),n=0-7=0-7 ADD AADD A,RiRi;((RiRi))+(A A)(A),iA),i=0,1=0,1 ADD AADD A,direct;direct;(directdirect)+(A A)(A)(A)ADD AADD A,#DATA;(A)+DATA#DATA;(A)+DATA (A)A)1.1 1.1 不带进位的加法指令不带进位的加法指令 参加运算的两个操作数都是参加运算的两个操作数都是8 8位二进制数,操作结果也位二进制数,操作结果也是一个是一个8 8位二进制数,且对位二进制数,且对PSWPSW中的标志位(中的标志位(CYCY,ACAC,OVOV,P P)产生影响。)产生影响。ADDC AADDC A,Rn;(RnRn;(Rn)+)+(A A)+(CYCY)(A),nA),n=0-7=0-7 ADDC AADDC A,RiRi;((RiRi))+(A A)+(CYCY)(A),iA),i=0,1=0,1 ADDC AADDC A,direct;direct;(directdirect)+(A A)+(CYCY)(A)(A)ADDC AADDC A,#DATA;(A)+DATA+#DATA;(A)+DATA+(CYCY)(A)A)1.2 1.2 带进位的加法指令带进位的加法指令 带进位加法运算指令常用于多字节加法运算,结果对带进位加法运算指令常用于多字节加法运算,结果对PSWPSW中的标志位(中的标志位(CYCY,ACAC,OVOV,P P)产生影响。)产生影响。SUBB ASUBB A,Rn;(ARn;(A)-)-(RnRn)-(CYCY)(A),nA),n=0-7=0-7 SUBB ASUBB A,RiRi;(A A)-((RiRi))-(CYCY)(A),iA),i=0,1=0,1 SUBB ASUBB A,direct;direct;(A A)-(directdirect)-(CYCY)(A)(A)SUBB ASUBB A,#DATA;(A)-DATA-#DATA;(A)-DATA-(CYCY)(A)A)2 2 带借位的减法指令带借位的减法指令 结果对结果对PSWPSW中的标志位(中的标志位(CYCY,ACAC,OVOV,P P)产生影响。)产生影响。INC A;(A)+1 (A)INC A;(A)+1 (A)INC INC RnRn,(,(RnRn)+1 (+1 (Rn),nRn),n=0-7=0-7 INC direct;INC direct;(directdirect)+1 (direct)+1 (direct)INC INC RiRi;((RiRi))+1 +1 ((RiRi)),i=0,1,i=0,1 INC DPTR;INC DPTR;(DPTRDPTR)+1 (DPTR),+1 (DPTR),3 3 加加1 1指令指令 例:设例:设20H20H、21H21H单元存放一个单元存放一个1616位二进制数位二进制数X1X1(高(高8 8位位存于存于21H21H单元),单元),30H30H、31H31H单元存放另一个单元存放另一个1616位二进制位二进制数数X2X2(高(高8 8位存于位存于31H31H单元),求单元),求X1+X2X1+X2,和存于,和存于20H20H和和21H21H。设两数之和不超过。设两数之和不超过1616位。位。MOV R0MOV R0,#20H#20H;MOV R1MOV R1,#30H#30H;MOV AMOV A,R0R0;ADD AADD A,R1R1;MOV MOV R0R0,A A;INC R0INC R0;INC R1INC R1;MOV AMOV A,R0R0;ADDC AADDC A,R1R1;MOV MOV R0R0,A A;DEC A;(A)-1 (A)DEC A;(A)-1 (A)DEC DEC RnRn,(,(RnRn)-1 (-1 (Rn),nRn),n=0-7=0-7 DEC direct;DEC direct;(directdirect)-1 (direct)-1 (direct)DEC DEC RiRi;((RiRi))-1 -1 ((RiRi)),i=0,1,i=0,1 4 4 减减1 1指令指令 例:试分析执行程序后,例:试分析执行程序后,R1R1,7EH7EH,7FH7FH各单元的内容各单元的内容 MOV R1MOV R1,#7FH#7FH;MOV 7EHMOV 7EH,#00H#00H;MOV 7FHMOV 7FH,#40H#40H;DEC DEC R1R1;DEC R1DEC R1;DEC DEC R1R1;(R1R1)=7FH=7FH (7EH7EH)=00H=00H (7FH7FH)=40H=40H (7FH7FH)=3FH=3FH (R1R1)=7EH=7EH (7EH7EH)=0FFH=0FFH 5 5 乘法指令乘法指令 MUL AB MUL AB 指令功能是把累加器指令功能是把累加器A A和寄存器和寄存器B B中两个中两个8 8位无符号数相位无符号数相乘,积的高八位存在乘,积的高八位存在B B寄存器中,积的低八位存在累加寄存器中,积的低八位存在累加器器A A中。中。运算结果对运算结果对CYCY、OVOV、P P标志位产生影响:标志位产生影响:进位标志位进