《單片機(jī)原理 第三章 A1 數(shù)據(jù)傳送類指令》由會員分享,可在線閱讀,更多相關(guān)《單片機(jī)原理 第三章 A1 數(shù)據(jù)傳送類指令(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、3.2 MCS-51指令及功能指令及功能3.2.1 3.2.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令(29(29條條)包括數(shù)據(jù)的傳送、交換、堆棧數(shù)據(jù)的壓入與包括數(shù)據(jù)的傳送、交換、堆棧數(shù)據(jù)的壓入與彈出,是最基本、使用率最高的一類指令。彈出,是最基本、使用率最高的一類指令。該類指令用到的助記符有該類指令用到的助記符有MOVMOV、MOVXMOVX、MOVCMOVC、XCHXCH、XCHDXCHD、SWAPSWAP、PUSHPUSH、POPPOP共八種。共八種。一、一、MOVMOV類指令及功能(類指令及功能(1616條)條)功能:從源操作數(shù)到目的操作數(shù)的數(shù)據(jù)傳送。功能:從源操作數(shù)到目的操作數(shù)的數(shù)據(jù)傳送。3.2
2、MCS-51指令及功能指令及功能1 1、以累加器、以累加器A A為目的操作數(shù)的指令(為目的操作數(shù)的指令(4 4條)條)MOV A,Rn ;RnA,;寄存器;寄存器Rn的內(nèi)容送到累加器的內(nèi)容送到累加器A MOV A,direct;(Direct)A,;直接地址中的內(nèi)容送;直接地址中的內(nèi)容送A MOV A,Ri ;(Ri)A,Ri間址的內(nèi)容送間址的內(nèi)容送A MOV A,#data ;dataA,立即,立即數(shù)送數(shù)送A例:若例:若 R0=50H,(,(50H)=38H執(zhí)行執(zhí)行 MOV A,R0 后后 A=38H執(zhí)行執(zhí)行 MOV A,R0 后后 A=50H2、以寄存器、以寄存器Rn為目的操作數(shù)的指令(為
3、目的操作數(shù)的指令(3條)條)MOV RnMOV Rn,A A ;ARnARn;累加器;累加器A A中的內(nèi)容送寄存器中的內(nèi)容送寄存器RnRnMOV RnMOV Rn,direct direct;(Direct)Rn(Direct)Rn,;直接地址中的內(nèi)容送;直接地址中的內(nèi)容送RnRn MOV Rn MOV Rn,#daTa#daTa;DataRnDataRn,立即數(shù)送,立即數(shù)送RnRn例:例:MOV R7,40H;(40H)R7R73、以直接地址為目的操作數(shù)的指令(、以直接地址為目的操作數(shù)的指令(5條)條)MOV direct,A ;A(direct),A中的內(nèi)容送入直中的內(nèi)容送入直 ;接地址中
4、;接地址中 MOV direct,Rn ;Rn(direct),;Rn寄存器內(nèi)容送入直接地址中寄存器內(nèi)容送入直接地址中 MOV direct,direct ;(direct)(direct),;源操作數(shù)直接地址內(nèi)容送入;源操作數(shù)直接地址內(nèi)容送入 ;目的操作數(shù)的直接地址中;目的操作數(shù)的直接地址中 MOV direct,Ri;(Ri)(direct),Ri間址內(nèi)容送入間址內(nèi)容送入 ;直接地址中;直接地址中 MOV direct,#data ;data(direct),立即數(shù)送入直,立即數(shù)送入直 ;接地址中;接地址中例例 MOV 50H,30H ;(30H)(50H)(50H)MOV P1,30H
5、;(30H)P1P1 MOV SP,#40H ;SP=40H4、以間接地址為目的操作數(shù)的指令(、以間接地址為目的操作數(shù)的指令(3條)條)MOV Ri,A ;A(Ri),A中內(nèi)容送到中內(nèi)容送到 ;Ri間址單元中間址單元中MOV Ri,direct ;(direct)(Ri),直接地址中,直接地址中 ;內(nèi)容送入;內(nèi)容送入Ri間址單元中間址單元中MOV Ri,#data ;data(Ri),;立即數(shù)送入;立即數(shù)送入Ri間址單元中間址單元中練習(xí)練習(xí):編程把編程把30H單元的內(nèi)容送到單元的內(nèi)容送到40H單元中單元中方法一:方法一:MOV 40H,30H方法二:方法二:MOV R0,#40HMOV R0,
6、30H5、十六位數(shù)據(jù)傳送指令、十六位數(shù)據(jù)傳送指令MOV DPTR,#data ;datal6DPTR,;16位常數(shù)送入數(shù)據(jù)指針位常數(shù)送入數(shù)據(jù)指針DPTR中中,;高;高8位送入位送入DPH,低,低8位送入位送入DPL中中 例例 MOV DPTR,#2040H ;2040HDPTR 結(jié)果:結(jié)果:DPH20H,DPL40H DPTR是片外是片外RAM地址指針,只有這一條指令是地址指針,只有這一條指令是傳送傳送16位數(shù)據(jù)。位數(shù)據(jù)。舉例舉例 例例1 R0中有常數(shù)中有常數(shù)40H,而,而40H地址中有常數(shù)地址中有常數(shù)55H MOV A,R0 ;A40H,R0不變。不變。MOV A,R0 ;A55H 而不是而
7、不是40H,指令的功能:把指令的功能:把R0中內(nèi)容為地址的單元中的數(shù)送入中內(nèi)容為地址的單元中的數(shù)送入A,Rn中是中是40H也就是把也就是把40H地址中內(nèi)容地址中內(nèi)容55H送入送入A。例例2 若若(40H)25H,(50H)33H MOV 40H,50H ;(50H)(40H)結(jié)果:結(jié)果:(40H)33H,50H地址中內(nèi)容不變,仍為地址中內(nèi)容不變,仍為33H。舉例舉例 例例3 若若A=40H,R130H M0V R1,A;A(R1)結(jié)果:結(jié)果:(30H)=40H,A與與R1皆不變。皆不變。指令功能是把指令功能是把A中內(nèi)容送入中內(nèi)容送入R1間址的單元,即間址的單元,即R1中中內(nèi)容為地址的單元。內(nèi)容
8、為地址的單元。二、二、MOVC類指令及功能類指令及功能(2條條)查表指令查表指令 MOVC A,A+PC ;PC+1PC,(A十十PC)A MOVC A,A+DPTR ;(A+DPTR)A 功能:該類屬查表指令,利用這兩條指令很方便地查找功能:該類屬查表指令,利用這兩條指令很方便地查找放在程序放在程序 存儲器中數(shù)據(jù)表格的內(nèi)容。存儲器中數(shù)據(jù)表格的內(nèi)容。用用MOVC A,A+PC指令需注意兩點:指令需注意兩點:PC是執(zhí)行完本條指令后的是執(zhí)行完本條指令后的PC值,即值,即PC等于本條指令等于本條指令地址加一。地址加一。A是修正值,等于查表指令和欲查數(shù)據(jù)相間隔字節(jié)數(shù)。是修正值,等于查表指令和欲查數(shù)據(jù)相
9、間隔字節(jié)數(shù)。A的范圍是的范圍是0255。因此該指令只能查找本指令后的因此該指令只能查找本指令后的256B范圍內(nèi)的表格,故稱為近程查表。范圍內(nèi)的表格,故稱為近程查表。二、二、MOVC類指令及功能類指令及功能(2條條)查表指令查表指令 例例1 程序程序 l000H MOV A,#03H ;03HA 1002H MOVC A,A+PC ;PC+1PC1003H ;(A+PC)(3H+1003H)A 數(shù)數(shù) 1004H 02H 據(jù)據(jù) 1005H 04H 表表 1006H 06H 格格 1007H 08H 程序執(zhí)行結(jié)果程序執(zhí)行結(jié)果:A06H 例例2 程序程序 1000H MOV A,#03H ;03HA
10、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 程序執(zhí)行結(jié)果:程序執(zhí)行結(jié)果:A0CH,查到了,查到了3003H單元中的數(shù)據(jù)。單元中的數(shù)據(jù)。用用MOVC A,A+DPTR指令查表特點:指令查表特點:A,DPTR都可以改變,因此可在都可以改變,因此可在64KB范圍內(nèi)范圍內(nèi)查表,故稱為遠(yuǎn)程查表。這條指令比前一條用查表,故稱為遠(yuǎn)程查表。這條指令比前一條用之更方便。之更方便。三、三、MOVX類指令(類
11、指令(4條)條)累加器累加器A與片外數(shù)據(jù)存儲器傳送指令與片外數(shù)據(jù)存儲器傳送指令MOVX A,DPTR ;(DPTR)A,DPTR間址間址 ;單元內(nèi)容送;單元內(nèi)容送A MOVX DPTR,A ;A(DPTR),A中內(nèi)容中內(nèi)容 ;送入;送入DPTR之間址單元之間址單元 MOVX A,Ri ;(Ri)A,;Ri間址單元內(nèi)容間址單元內(nèi)容送送A MOVX Ri,A ;A(R),;A中內(nèi)容送中內(nèi)容送Ri間址單元間址單元功能:功能:這四條指令專門用來與外部數(shù)據(jù)存儲區(qū)傳送數(shù)據(jù)。這四條指令專門用來與外部數(shù)據(jù)存儲區(qū)傳送數(shù)據(jù)。CPU與外部與外部RAM傳送數(shù)據(jù)時只能用間接尋址方式。傳送數(shù)據(jù)時只能用間接尋址方式。例例1
12、 把外部數(shù)據(jù)存儲單元把外部數(shù)據(jù)存儲單元2000H中的數(shù)據(jù)送到中的數(shù)據(jù)送到4000H單元單元中,設(shè)中,設(shè)2000H中有數(shù)據(jù)中有數(shù)據(jù)30H。程序程序 各條指令執(zhí)行結(jié)果各條指令執(zhí)行結(jié)果 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練習(xí):練習(xí):將片外將片外RAM中中2000H單元的數(shù)據(jù)送到片外單元的數(shù)據(jù)送到片外50H單元單元四、交換指令四、交換指令(5條條)XC
13、H A,Rn ;Rn與與A內(nèi)容交換內(nèi)容交換 XCH A,direct ;直接地址內(nèi)容與;直接地址內(nèi)容與A內(nèi)容交換內(nèi)容交換 XCH A,Ri ;Ri間址內(nèi)容與間址內(nèi)容與A內(nèi)容交換內(nèi)容交換 XCHD A,Ri ;Ri間址內(nèi)容低間址內(nèi)容低4位位 ;與;與A中低中低4位內(nèi)容交換位內(nèi)容交換 SWAP A ;A中高中高4位與低位與低4位交換位交換 例例 若若R030H,AF0H,(30H)46H XCH A,R0 結(jié)果:結(jié)果:A30H,R0=F0H,R0與與A內(nèi)內(nèi) 容交換容交換 XCH A,R0 結(jié)果:結(jié)果:A=46H,(30H)F0H,R0中不變中不變 XCHD A,R0 結(jié)果:結(jié)果:AF6H,(30H
14、)40H A與與(30H)中低中低4位交換,高位交換,高4位不變位不變 SWAP A 結(jié)果:結(jié)果:A0FH,A中高低中高低4位互換位互換五、五、堆棧操作指令堆棧操作指令(2條條)PUSH direct ;SP+lSP,(direct)(SP)直接地址內(nèi)容壓入堆棧棧頂直接地址內(nèi)容壓入堆棧棧頂 POP direct ;(SP)(direct),SP-1SP 堆棧棧頂內(nèi)容彈出到直接地址堆棧棧頂內(nèi)容彈出到直接地址功能功能:是把直接地址中的內(nèi)容壓入堆棧保存,或從堆棧中取是把直接地址中的內(nèi)容壓入堆棧保存,或從堆棧中取出出(彈出彈出)數(shù)據(jù)到直接地址中。數(shù)據(jù)到直接地址中。注意:注意:堆棧是用戶設(shè)定的內(nèi)部堆棧是
15、用戶設(shè)定的內(nèi)部RAM中的一塊專用存儲區(qū),使中的一塊專用存儲區(qū),使用堆棧時一定先設(shè)堆棧指針。堆棧遵循后進(jìn)先出的原則安用堆棧時一定先設(shè)堆棧指針。堆棧遵循后進(jìn)先出的原則安排數(shù)據(jù)。壓入數(shù)據(jù)時排數(shù)據(jù)。壓入數(shù)據(jù)時SP先加先加1,再壓入;彈出時,先彈出數(shù),再壓入;彈出時,先彈出數(shù)據(jù)后,據(jù)后,SP再減再減1。例例 設(shè)堆棧指針為設(shè)堆棧指針為30H,為保護(hù)現(xiàn)場把,為保護(hù)現(xiàn)場把A和和Rn中的內(nèi)容壓入堆中的內(nèi)容壓入堆棧保護(hù),然后根據(jù)需要再把兩者彈出。設(shè)棧保護(hù),然后根據(jù)需要再把兩者彈出。設(shè)A中為中為50H,R1中為中為0lH。程序程序 各條執(zhí)行結(jié)果各條執(zhí)行結(jié)果 MOV SP,#30H ;SP30H,設(shè)堆棧指針為設(shè)堆棧指針為30H PUSH A ;SP+lSP31H,;A(SP)即即A(31H),(3lH)50H PUSH R1;SP+1SP;SP=32H,;即即R1(32H),(32H)01H POP R1;(SP)R1,即即(32H)R1,;R10lH,SP-1SP3lH POP A ;(SP)A,(31H)A,;A50H,SP-1SP30H 從此例可以看出壓入、彈出過程中從此例可以看出壓入、彈出過程中SP的變化規(guī)律的變化規(guī)律