资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,3.2 MCS-51指令及功能,3.2.1 数据传送指令(29条),包括数据的传送、交换、堆栈数据的压入与弹出,是最根本、使用率最高的一类指令。,该类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP共八种。,一、MOV类指令及功能16条,功能:从源操作数到目的操作数的数据传送。,3.2 MCS-51指令及功能,1、以累加器A为目的操作数的指令4条,MOV A,Rn ;RnA,,;存放器Rn的内容送到累加器A,MOV A,direct;(Direct)A,,;直接地址中的内容送A,MOV A,Ri ;(Ri)A,Ri间址的内容送A,MOV A,#data ;dataA,立即数送A,例:假设 R0=50H,50H=38H,执行 MOV A,R0 后 A=38H,执行 MOV A,R0 后 A=50H,2、以存放器Rn为目的操作数的指令3条,MOV Rn,A ;ARn;,;累加器A中的内容送存放器Rn,MOV Rn,direct;(Direct)Rn,;直接地址中的内容送Rn,MOV Rn,#daTa;DataRn,立即数送Rn,例:MOV R7,40H;(40H)R7,3、以直接地址为目的操作数的指令5条,MOV direct,A ;A(direct),A中的内容送入直,;接地址中,MOV direct,Rn ;Rn(direct),,;Rn存放器内容送入直接地址中,MOV direct,direct ;(direct)(direct),,;源操作数直接地址内容送入,;目的操作数的直接地址中,MOV direct,Ri;(Ri)(direct),Ri间址内容送入,;直接地址中,MOV direct,#data ;data(direct),立即数送入直,;接地址中,例,MOV 50H,30H ;(30H),(50H),MOV P1,30H,;,(30H),P1,MOV SP,#40H ;SP=40H,4、以间接地址为目的操作数的指令3条,MOV Ri,A ;A(Ri),A中内容送到,;Ri间址单元中,MOV Ri,direct ;(direct)(Ri),直接地址中,;内容送入Ri间址单元中,MOV Ri,#data ;data(R,i,),,;立即数送入R,i,间址单元中,练习:编程把30H单元的内容送到40H单元中,方法一:,MOV 40H,30H,方法二:,MOV R0,40H,MOV R0,30H,5、十六位数据传送指令,MOV DPTR,#data ;datal6DPTR,,;16位常数送入数据指针DPTR中,;高8位送入DPH,低8位送入DPL中,例 MOV DPTR,#2040H ;2040HDPTR,结果:DPH20H,DPL40H,DPTR是片外RAM地址指针,只有这一条指令是传送16位数据。,举例,例1 R0中有常数40H,而40H地址中有常数55H,MOV A,R0 ;A40H,R0不变。,MOV A,R0 ;A55H 而不是40H,,指令的功能:把R0中内容为地址的单元中的数送入A,Rn中是40H也就是把40H地址中内容55H送入A。,例2 假设(40H)25H,(50H)33H,MOV 40H,50H ;(50H)(40H),结果:(40H)33H,50H地址中内容不变,仍为33H。,举例,例3 假设A=40H,R130H,M0V R1,A;A(R1),结果:(30H)=40H,A与R1皆不变。,指令功能是把A中内容送入R1间址的单元,即R1中内容为地址的单元。,二、MOVC类指令及功能(2条)查表指令,MOVC A,A+PC ;PC+1PC,(A十PC)A,MOVC A,A+DPTR ;(A+DPTR)A,功能:该类属查表指令,利用这两条指令很方便地查找放在程序 存储器中数据表格的内容。,用MOVC A,A+PC指令需注意两点:,PC是执行完本条指令后的PC值,即PC等于本条指令地址加一。,A是修正值,等于查表指令和欲查数据相间隔字节数。A的范围是0255。因此该指令只能查找本指令后的256B范围内的表格,故称为近程查表。,二、MOVC类指令及功能(2条)查表指令,例1 程序,l000H MOV A,#03H ;03HA,1002H MOVC A,A+PC ;PC+1PC1003H,;(A+PC)(3H+1003H)A,数 1004H 02H,据 1005H 04H,表 1006H 06H,格 1007H 08H,程序执行结果:A06H,例2 程序,1000H MOV A,#03H ;03HA,1002H MOV DPTR,#3000H ;3000HDPTR,l005H MOVC A,A+DPTR ;,;(A+DPTR)(03H+3000H),;(3003H)A,TAB:3001H:0AH,3002H:0BH,3003H:0CH,3004H:0DH,程序执行结果:,A0CH,查到了3003H单元中的数据。,用MOVC A,A+DPTR指令查表特点:,A,DPTR都可以改变,因此可在64KB范围内查表,故称为远程查表。这条指令比前一条用之更方便。,三、MOVX类指令4条,累加器A与片外数据存储器传送指令,MOVX A,DPTR ;(DPTR)A,DPTR间址,;单元内容送A,MOVX DPTR,A ;A(DPTR),A中内容,;送入DPTR之间址单元,MOVX A,Ri ;(Ri)A,,;Ri间址单元内容送A,MOVX Ri,A ;A(R),,;A中内容送Ri间址单元,功能:,这四条指令专门用来与外部数据存储区传送数据。CPU与外部RAM传送数据时只能用间接寻址方式。,例1 把外部数据存储单元2000H中的数据送到4000H单元中,设2000H中有数据30H。,程序 各条指令执行结果,MOV DPTR,#2000H ;2000HDPTR,,;DPTR2000H,MOVX A,DPTR ;(DPTR)A即(2000H)A,,;A30H,MOV DPTR,#4000H ;4000HDPTR,,;DPTR4000H,MOVX DPTR,A ;A(DPTR),(4000H)30H,练习:,将片外RAM中2000H单元的数据送到片外50H单元,四、交换指令(5条),XCH A,Rn ;Rn与A内容交换,XCH A,direct ;直接地址内容与A内容交换,XCH A,Ri ;Ri间址内容与A内容交换,XCHD A,Ri ;Ri间址内容低4位,;与A中低4位内容交换,SWAP A ;A中高4位与低4位交换,例 假设R030H,AF0H,(30H)46H,XCH A,R0,结果:A30H,R0=F0H,R0与A内 容交换,XCH A,R0,结果:A=46H,(30H)F0H,R0中不变,XCHD A,R0,结果:AF6H,(30H)40H,A与(30H)中低4位交换,高4位不变,SWAP A,结果:A0FH,A中上下4位互换,五、堆栈操作指令(2条),PUSH direct ;SP+lSP,(direct)(SP),直接地址内容压入堆栈栈顶,POP direct ;(SP)(direct),SP-1SP,堆栈栈顶内容弹出到直接地址,功能:,是把直接地址中的内容压入堆栈保存,或从堆栈中取出(弹出)数据到直接地址中。,注意:,堆栈是用户设定的内部RAM中的一块专用存储区,使用堆栈时一定先设堆栈指针。堆栈遵循后进先出的原那么安排数据。压入数据时SP先加1,再压入;弹出时,先弹出数据后,SP再减1。,例 设堆栈指针为30H,为保护现场把A和Rn中的内容压入堆栈保护,然后根据需要再把两者弹出。设A中为50H,R1中为0lH。,程序 各条执行结果,MOV SP,#30H ;SP30H,设堆栈指针为30H,PUSH ACC ;SP+lSP31H,;A(SP)即A(31H),(3lH)50H,PUSH R1;SP+1SP;SP=32H,,;即R1(32H),(32H)01H,POP R1;(SP)R1,即(32H)R,0,,,;R10lH,SP-1SP3lH,POP ACC ;(SP)A,(31H)A,,;A50H,SP-1SP30H,从此例可以看出压入、弹出过程中SP的变化规律,
展开阅读全文