第3章 MCS-51 單片機指令系統_第1頁
第3章 MCS-51 單片機指令系統_第2頁
第3章 MCS-51 單片機指令系統_第3頁
第3章 MCS-51 單片機指令系統_第4頁
第3章 MCS-51 單片機指令系統_第5頁
已閱讀5頁,還剩77頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、二、指令字長和指令周期二、指令字長和指令周期指令字長是指存儲這條指令所占的存儲單元的個數。指令字長是指存儲這條指令所占的存儲單元的個數。指令字長有單字節、雙字節和三字節三種。指令字長有單字節、雙字節和三字節三種。例:例:RETRET;單字節指令;單字節指令 00100010 22H 00100010 22H 例:例:MOV AMOV A,#0FH#0FH;雙字節指令;雙字節指令 例:例:MOV 55HMOV 55H,#0AH#0AH;三字節指令;三字節指令 機器周期:機器周期: 指令字節數越多,所占存儲單元越多,但指令周期并指令字節數越多,所占存儲單元越多,但指令周期并不與指令所占字節數成比例

2、。不與指令所占字節數成比例。例:例:f=12MHZ T=1usf=12MHZ T=1us指令周期:執行一條指令所需的時間。指令周期:執行一條指令所需的時間。例:例:MUL ABMUL AB;乘法指令,是單字節指令,但指令;乘法指令,是單字節指令,但指令周期為周期為4 4個機器周期。個機器周期。 凡以字母凡以字母A-FA-F開頭的十六進制數均需加前導開頭的十六進制數均需加前導0 0 尋址方式是指尋址方式是指CPUCPU尋找操作數或操作數地址的方法尋找操作數或操作數地址的方法一、直接尋址一、直接尋址指令中直接給出操作數所在的單元地址或位地址指令中直接給出操作數所在的單元地址或位地址1 1、可訪問的

3、存儲空間、可訪問的存儲空間1.1 1.1 內部內部RAMRAM低低128128單元(單元(00H-7FH00H-7FH)例:例:MOV AMOV A,50H50H; (50H50H) (A A) MOV A MOV 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個位地址空間個位地址空間。 內部內部RA

4、MRAM中可位尋址的中可位尋址的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 (D

5、PHDPH),),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只有在執行只有在執行乘除法乘除法指令時,才是寄存器尋指令時,才是寄存器尋址方式址方式四、寄存器間接尋址四、寄存器間接尋址間接尋址是由指令指定某一間接尋址是由指令指定某一寄存器的內容寄存器的內

6、容作為操作數作為操作數的的地址地址。該地址指定的單元內容作為被尋找的操作數。該地址指定的單元內容作為被尋找的操作數。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=

7、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)=

8、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的單元地址,的單元地址,而對特殊功能寄存器只能直接尋址,而對特殊功能寄存器只能直接尋址,不能間接尋址。不能間接尋址。 五五 基

9、址加變址寄存器間接尋址(變址尋址)基址加變址寄存器間接尋址(變址尋址) 變址尋址是以數據指針變址尋址是以數據指針DPTRDPTR或程序指針或程序指針PCPC作為基址寄作為基址寄存器,以累加器存器,以累加器A A作為變址寄存器,并以兩者內容相作為變址寄存器,并以兩者內容相加形成新的加形成新的1616位地址作為操作數地址,再尋址該地址,位地址作為操作數地址,再尋址該地址,讀取數據。讀取數據。 變址尋址指令:變址尋址指令:MOVC AMOVC A,A+PCA+PC MOVC A MOVC A,A+DPTR A+DPTR 37H 37H 例:(例:(A A)=50H=50H,PC=3F00HPC=3F

10、00H,(,(3F51H3F51H)=37H=37H MOVC A MOVC A,A+PC ;A+PC ; (A)=? (A)=? 變址尋址方式只能對程序存儲器進行尋址,因此變址尋址方式只能對程序存儲器進行尋址,因此只能用于讀取數據,而不能用于存放數據,它主只能用于讀取數據,而不能用于存放數據,它主要用于查表性質的訪問。要用于查表性質的訪問。 六六 相對尋址相對尋址 它以它以PCPC值加上指令中給出的相對偏移量(值加上指令中給出的相對偏移量(rel)rel)形成轉形成轉移地址。相對偏移量是一個帶符號的移地址。相對偏移量是一個帶符號的8 8位二進制數,位二進制數,以補碼形式出現。以補碼形式出現。

11、 相對轉移指令滿足條件后相對轉移指令滿足條件后, , 轉移的地址(一般稱為目轉移的地址(一般稱為目的地址)的地址) 目的地址目的地址 = = 當前當前PCPC值值 + rel + rel = = 源地址源地址 + + 轉移指令字節數轉移指令字節數 + rel+ rel例如:例如: JZ 08HJZ 08H 累加器累加器A A為零條件滿足后為零條件滿足后, , 從源地址(從源地址(2050H2050H)分別)分別向下、向下、 向上轉移向上轉移1010個單元。個單元。例:例:rel=75H ,CY=1rel=75H ,CY=12002H:JC rel;(2002H:JC rel;(如如CY=1CY

12、=1,則跳轉到,則跳轉到PC+relPC+rel處去執行程序處去執行程序) 結果結果: :程序轉向(程序轉向(PCPC)+2+rel=2002H+2+75H=2079H+2+rel=2002H+2+75H=2079H單元去執行單元去執行 相對尋址用于訪問程序存儲器,只出現在轉移指相對尋址用于訪問程序存儲器,只出現在轉移指令中。尋址不是尋找操作數的地址,而是要得到令中。尋址不是尋找操作數的地址,而是要得到程序跳轉地址程序跳轉地址PCPC值。值。 七七 位尋址位尋址 1 1 位尋址范圍:內部位尋址范圍:內部RAMRAM的位尋址區,共的位尋址區,共1616個單元的個單元的128128位,單元地址為:

13、位,單元地址為:20H-2FH20H-2FH,位地址為:,位地址為:00H-7FH00H-7FH ;特殊功能寄存器特殊功能寄存器SFRSFR可供位尋址的專用寄存器可供位尋址的專用寄存器1111個,個,實用位地址實用位地址8383位。位。 2 2 位地址在指令中的位地址在指令中的4 4種表達方式種表達方式 2.1 2.1 直接使用位地址直接使用位地址 MOV C MOV C,0D6H0D6H; 2.2 2.2 位名稱表示法位名稱表示法 MOV C MOV C,ACAC; 2.3 2.3 單元地址加位的表示法單元地址加位的表示法 MOV C MOV C,0D0H.6; 0D0H.6; 2.4 2.

14、4 專用寄存器符號加位的表示法專用寄存器符號加位的表示法 MOV C MOV C,PSW.6PSW.6 表表31 7 種尋址方式及使用空間種尋址方式及使用空間 MCS51 MCS51單片機指令系統分為單片機指令系統分為: : 數據傳送類指令、數據傳送類指令、 算術運算類指令、邏輯運算及移位類指令、控制轉算術運算類指令、邏輯運算及移位類指令、控制轉移類指令和位操作(布爾操作)指令移類指令和位操作(布爾操作)指令5 5大類大類, , 共計共計111111條指令。現按其分類分別介紹各條指令的格式、條指令。現按其分類分別介紹各條指令的格式、 功能、對狀態標志的影響以及應用。功能、對狀態標志的影響以及應

15、用。 3 MCS-513 MCS-51單片機指令系統單片機指令系統AA累加器。累加器。 BB寄存器寄存器, , 用于用于MULMUL和和DIVDIV指令中。指令中。 CC進位標志或進位位。進位標志或進位位。 間接尋址寄存器或基址寄存器的前綴間接尋址寄存器或基址寄存器的前綴, , 如如Ri,DPTRRi,DPTR。 /位操作數的前綴位操作數的前綴, , 表示對該位取反。表示對該位取反。 (X X) X X中的內容。中的內容。 (X X)由由X X尋址的單元中的內容。尋址的單元中的內容。 箭頭左邊的內容被箭頭右邊的內容所代替。箭頭左邊的內容被箭頭右邊的內容所代替。 RnRn寄存器區中的寄存器區中的

16、8 8個工作寄存器個工作寄存器R0R0R7, R7, 即即n=0n=07 7。RiRi寄存器區中的寄存器區中的2 2個寄存器個寄存器R0R0、R1, i=0R1, i=0、1 1。direct8direct8位內部位內部RAMRAM單元的地址單元的地址, , 它可以是一個內它可以是一個內部數據區部數據區RAMRAM單元單元(00H(00H7FH)7FH)或特殊功能寄存器地址或特殊功能寄存器地址datadata指令中的指令中的8 8位常數。位常數。 data16data16指令中的指令中的1616位常數。位常數。 addr1616addr1616位的目的地址位的目的地址, , 用于用于LJMP,

17、 LCALLLJMP, LCALL指令指令, , 可指向可指向64KB64KB程序存儲器地址空間。程序存儲器地址空間。 addr1111addr1111位的目的地址位的目的地址, , 用于用于AJMP, ACALLAJMP, ACALL指指令。目的地址必須與下一條指令的第一個字節在令。目的地址必須與下一條指令的第一個字節在同一個同一個2 KB2 KB程序存儲器地址空間之內。程序存儲器地址空間之內。 rel 8rel 8位帶符號的偏移量字節位帶符號的偏移量字節, , 用于用于SJMPSJMP和所和所有條件轉移指令中。偏移量相對于下一條指令的有條件轉移指令中。偏移量相對于下一條指令的第一個字節計算

18、第一個字節計算, , 在在128128+127+127范圍內取范圍內取bitbit內部數據內部數據RAMRAM或特殊功能寄存器中的可直接或特殊功能寄存器中的可直接尋址位。尋址位。 DPTRDPTR數據指針數據指針, , 可用作可用作 16 16 位的地址寄存器。位的地址寄存器。 一一 數據傳送指令數據傳送指令 1 1 內部數據傳送指令(內部數據傳送指令(MOVMOV) 指令格式:指令格式:MOV MOV 目的操作數,目的操作數, 指令的源操作數和目的操作數都在單片機內部。可以指令的源操作數和目的操作數都在單片機內部。可以是片內是片內RAMRAM地址,也可以是特殊功能寄存器地址,也可以是特殊功能

19、寄存器SFRSFR的地址的地址 指令的功能是把源操作數指定的字節變量復制到目的指令的功能是把源操作數指定的字節變量復制到目的操作數所規定的單元或寄存器中,源字節不變。操作數所規定的單元或寄存器中,源字節不變。 1.1 1.1 立即數傳送指令立即數傳送指令 源操作數為立即數源操作數為立即數 八位立即數傳送指令:八位立即數傳送指令: MOV AMOV A,#DATA#DATA; DATADATA (A A) 例:例:MOV AMOV A,#02H#02H; MOV RnMOV Rn,#DATA#DATA; DATADATA (RnRn) n=0-7n=0-7 例:例:MOV RMOV R3 3,#

20、02H#02H; 例:例:MOV 30HMOV 30H,#02H#02H; MOV MOV RiRi,#DATA#DATA; DATADATA ((Ri(Ri)) ) 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 R4MO

21、V 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 內

22、部數據存儲器與累加器內部數據存儲器與累加器A A之間傳送數據之間傳送數據 MOV AMOV A,Rn;(Rn) (A),n=0-7Rn;(Rn) (A),n=0-7 MOV RnMOV Rn,A;(A) (Rn),n=0-7A;(A) (Rn),n=0-7 MOV AMOV A,Ri;Ri;((Ri)(Ri)) (A),i=0,1(A),i=0,1 MOV MOV RiRi,A;A;(A A) ((Ri)(Ri)),i=0,1,i=0,1 MOV AMOV A,direct;direct;(directdirect) (A),(A), MOV directMOV direct,A;(A) A;

23、(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;(Rn) (direct),n=0-7Rn;(Rn) (direct),n=0-7 MOV RnMOV Rn,direct;(direct) (Rn),n=0-7direct;(dire

24、ct) (Rn),n=0-7 MOV directMOV direct,Ri;Ri;((Ri)(Ri)) (direct),i=0,1(direct),i=0,1 MOV MOV RiRi,direct;direct;(directdirect) ((Ri)(Ri)),i=0,1,i=0,1 MOV direct2MOV direct2,direct1;direct1;(direct1direct1) (direct2),(direct2), 1.3 1.3 內部內部RAMRAM中中Rn,SFRRn,SFR與片內與片內RAMRAM之間的數據傳送之間的數據傳送 例:設內部例:設內部RAMRAM中

25、中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

26、=10H (40H40H)=0CAH =0CAH (P2P2)=0CAH =0CAH 1.4 1.4 內部數據傳送指令的使用內部數據傳送指令的使用 DirectDirect直接地址直接地址 RiRi間接地址間接地址 Rn Rn 寄存器寄存器 #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) M

27、OVX 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; ((Ri)(Ri) (A)(A) MOVX MOVX Ri,ARi,A; (A

28、)A) (DPTR)(DPTR) 說明:若外部擴展說明:若外部擴展RAMRAM小于等于小于等于256256單元,用單元,用RiRi間接間接尋址進行數據傳送,尋址進行數據傳送,8 8位地址線足夠使用。位地址線足夠使用。若外部擴展較大的若外部擴展較大的RAMRAM區域,須用區域,須用P2P2口輸出高口輸出高8 8位地址,位地址,用用RiRi表示低八位地址,表示低八位地址,P0P0口分時作低口分時作低8 8位地址線和數位地址線和數據線,據線,P2P2口應事先預置。口應事先預置。 例:若外部例:若外部RAMRAM中,(中,(20FFH20FFH)=30H=30H,(,(2100H2100H)=15H=

29、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 2000H

30、MOVX 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)內容相加,得到程序存儲)內容相加,得到程序存儲器某單元地址,再把該地址單元內容送累加器器某單元地址,再把該地址

31、單元內容送累加器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,

32、# #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 例:將片內例:將片內RAM40HRAM40H單元內容送至片外單元內容送至片外50H50H單元中單元中; ; 將片外將片外2350H2350H單元內容送片內單元內容送片內

33、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;MOV R0, #50HMOV R0, #50HMOVX AMOVX A,R0R0; MOV 41HMOV 41H,A A; 4 4 堆棧及堆棧指令堆棧及堆棧指令 4.1 4.1 堆棧的功能堆棧的功能計算機在轉去執行子程序或中斷服務程序后,很可能計算機在轉去執行子程序或中斷服務程序后,很可能要使用單片機的某些寄存單元,這樣就會破壞這些寄要使用單片機的某些寄存單元,這

34、樣就會破壞這些寄存單元中原有內容。為了既能在子程序中或中斷服務存單元中原有內容。為了既能在子程序中或中斷服務程序中使用這些寄存單元,又能保證在返回主程序之程序中使用這些寄存單元,又能保證在返回主程序之后恢復這些寄存單元的原有內容,后恢復這些寄存單元的原有內容,CPUCPU在執行中斷服務在執行中斷服務之前要把單片機中各有關寄存器中內容保存起來,這之前要把單片機中各有關寄存器中內容保存起來,這就是所謂保護現場。斷點和現場的內容保存在堆棧中。就是所謂保護現場。斷點和現場的內容保存在堆棧中。 4.24.2 堆棧指針堆棧指針SPSP 數據寫入堆棧稱為數據寫入堆棧稱為入棧入棧,數據從堆棧中讀出稱為,數據從

35、堆棧中讀出稱為出棧出棧堆棧的最大特點就是堆棧的最大特點就是“后進先出后進先出”。 堆棧有棧頂和棧底之分,棧底地址一經設定后固定堆棧有棧頂和棧底之分,棧底地址一經設定后固定不變。不論是數據進棧還是數據出棧,都是對棧頂不變。不論是數據進棧還是數據出棧,都是對棧頂單元進行的。為了指示棧頂地址,要設置堆棧指針單元進行的。為了指示棧頂地址,要設置堆棧指針SPSP。SPSP的內容為棧頂地址。的內容為棧頂地址。SPSP為為8 8位,它在片內位,它在片內RAM128RAM128個字節中開辟棧區,并隨時跟蹤棧頂地址。個字節中開辟棧區,并隨時跟蹤棧頂地址。系統復位后,系統復位后,SPSP初始化為初始化為07H07

36、H。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,試利用堆棧實現,試利用堆棧實現30

37、H30H和和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 使用棧操作指令,應注意指令操作碼后緊跟直接地址,

38、使用棧操作指令,應注意指令操作碼后緊跟直接地址,要注意書寫格式。如:要注意書寫格式。如:PUSH ACCPUSH ACC;POP ACC POP ACC 5 5 數據交換指令數據交換指令 5.1 5.1 整字節交換指令整字節交換指令 XCH AXCH A,RnRn;(;(RnRn) (A A) XCH AXCH A,RiRi;(;((Ri)(Ri)) (A A) XCH AXCH A,directdirect;(;(directdirect) (A A) 例:已知外部例:已知外部RAMRAM的的20H20H單元中有一個數單元中有一個數X X,內部,內部RAMRAM的的20H20H單元中有一個數

39、單元中有一個數Y Y,試利用字節交換指令編出,試利用字節交換指令編出可以使它們互相交換的程序。可以使它們互相交換的程序。MOV P2, #00H;MOV P2, #00H;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;(;((Ri)(Ri))

40、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 SW

41、AP 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,2

42、0H20H; 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 數據傳送類指令助記符與操作 二、算術運算指令二、算術運算指令1 1 加法指令加法指令 ADD AADD A,Rn;(Rn)+Rn;(Rn)+(A A) (A),n=0-7(A),n=0-7 ADD AADD A,Ri;

43、Ri;((Ri)(Ri))+ +(A A) (A),i=0,1(A),i=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 AAD

44、DC A,Rn;(Rn)+Rn;(Rn)+(A A)+ +(CYCY) (A),n=0-7(A),n=0-7 ADDC AADDC A,Ri;Ri;((Ri)(Ri))+ +(A A)+ +(CYCY) (A),i=0,1(A),i=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 帶進位的加法指令帶進位的加法指令 帶進位加法運算指令常用于多字節加法運算,結果對帶進位加法運算指令

45、常用于多字節加法運算,結果對PSWPSW中的標志位(中的標志位(CYCY,ACAC,OVOV,P P)產生影響。)產生影響。SUBB ASUBB A,Rn;(A)-Rn;(A)-(RnRn)- -(CYCY) (A),n=0-7(A),n=0-7 SUBB ASUBB A,Ri;Ri;(A A)- -((Ri)(Ri))- -(CYCY) (A),i=0,1(A),i=0,1 SUBB ASUBB A,direct;direct;(A A)- -(directdirect)- -(CYCY) (A)(A) SUBB ASUBB A,#DATA;(A)-DATA-#DATA;(A)-DATA-(

46、CYCY) (A)A) 2 2 帶借位的減法指令帶借位的減法指令 結果對結果對PSWPSW中的標志位(中的標志位(CYCY,ACAC,OVOV,P P)產生影響。)產生影響。INC A;(A)+1 (A)INC A;(A)+1 (A) INC RnINC Rn,(,(RnRn)+1 (Rn),n=0-7+1 (Rn),n=0-7 INC direct;INC direct;(directdirect)+1 (direct)+1 (direct) INC INC Ri;Ri;((Ri)(Ri))+1 +1 ((Ri)(Ri)),i=0,1,i=0,1 INC DPTR;INC DPTR;(DPT

47、RDPTR)+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 AM

48、OV 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 RnDEC Rn,(,(RnRn)-1 (Rn),n=0-7-1 (Rn),n=0-7 DEC direct;DEC direct;(directdirect)-1 (direct)-1 (direct) DEC DEC Ri;Ri;((Ri)(Ri))-1 -1 ((Ri)(Ri)),i

49、=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 乘法指令乘法指令

50、 MUL AB MUL AB 指令功能是把累加器指令功能是把累加器A A和寄存器和寄存器B B中兩個中兩個8 8位無符號數位無符號數相乘,積的高八位存在相乘,積的高八位存在B B寄存器中,積的低八位存在寄存器中,積的低八位存在累加器累加器A A中。中。 運算結果對運算結果對CYCY、OVOV、P P標志位產生影響:標志位產生影響:進位標志位進位標志位CYCY總是清總是清“0”0”;P P標志仍為累加器標志仍為累加器A A的奇偶校驗位;的奇偶校驗位;當積大于當積大于255255(B B中的內容不為中的內容不為0 0),則),則OV=1OV=1,否則,否則OV=0 OV=0 例:設(例:設(A A

51、)=90H=90H,(,(B B)=62H=62H MUL AB MUL AB; 結果:(結果:(A A)=20H=20H,(,(B B)=37H=37H,OV=1OV=1,CY=0CY=0,P=1 P=1 6 6 除法指令除法指令 DIV AB DIV AB 指令功能是把累加器指令功能是把累加器A A中中8 8位無符號整數除以寄存器位無符號整數除以寄存器B B中中8 8位無符號整數,所得商存在位無符號整數,所得商存在A A中,余數存在中,余數存在B B中。中。 運算結果對運算結果對CYCY、OVOV、P P標志位產生影響:標志位產生影響:進位標志位進位標志位CYCY總是清總是清“0”0”;P

52、 P標志仍為累加器標志仍為累加器A A的奇偶校驗位;的奇偶校驗位;當除數為當除數為0 0時,除法沒有意義,則時,除法沒有意義,則OV=1OV=1,否則,否則OV=0 OV=0 例:設(例:設(A A)=65H=65H,(,(B B)=14H=14H DIV AB DIV AB; 結果:(結果:(A A)=05H=05H,(,(B B)=01H=01H,OV=0OV=0,CY=0CY=0,P=0 P=0 6 6 二二- -十進制調整指令十進制調整指令 DA ADA A; 調整規律如下:調整規律如下:若若AC=1AC=1或(或(A A)0-3 0-3 9 9,則(,則(A A)+06H +06H

53、(A A););若若CY=1CY=1或(或(A A)4-7 4-7 9 9,則(,則(A A)+60H +60H (A A););該指令用于壓縮該指令用于壓縮BCDBCD碼加法運算的十進制調整,使用碼加法運算的十進制調整,使用時應注意幾點:時應注意幾點:本指令使用時跟在本指令使用時跟在ADDADD或或ADDCADDC后;后;不能用不能用DADA指令對指令對BCDBCD碼減法操作進行直接調整;碼減法操作進行直接調整;本指令不影響溢出標志位本指令不影響溢出標志位OVOV; 例:執行下列程序后,求例:執行下列程序后,求30H30H、A A單元的內容單元的內容MOV AMOV A,#85H#85H;A

54、DD AADD A,#59H#59H;DA ADA A;MOV 30HMOV 30H,A A;CLR ACLR A;ADDC AADDC A,#00H#00H;(A A)=85H=85H(A A)=DEH=DEH(A A)=44H=44H(30H30H)=44H=44H(A A)=00H=00H(A A)=01H=01H三三 邏輯運算指令邏輯運算指令 1 1 邏輯與運算指令邏輯與運算指令 ANL AANL A,Rn;(Rn) Rn;(Rn) (A A) (A),n=0-7(A),n=0-7 ANL AANL A,direct;(direct) direct;(direct) (A) (A)(A

55、) (A) ANL AANL A,Ri;Ri;((Ri)(Ri))(A) (A),i=0,1(A) (A),i=0,1 ANL A,#DATA;ANL A,#DATA;(A A)DATA DATA (A A) ANL directANL direct,A;A;(directdirect)(A) (A) (directdirect) ANL directANL direct,#DATA;(direct) #DATA;(direct) DATA DATA (direct),direct), 例:(例:(R0R0)=30H=30H,(,(30H30H)=0AAH=0AAH,執行如下指令后累,執行如下

56、指令后累加器加器A A和和30H30H單元中的內容是什么?單元中的內容是什么?MOV AMOV A,#0FFH#0FFH;ANL AANL A,R0R0; 結果:(結果:(A A)=30H=30H,(,(30H30H)=0AAH=0AAH MOV AMOV A,#0FH#0FH;ANL AANL A,30H30H; 結果:結果:(A)=0AH,(30H)=0AAH(A)=0AH,(30H)=0AAH 邏輯與指令主要用于從某個存儲單元取出某幾位而把邏輯與指令主要用于從某個存儲單元取出某幾位而把其他位變其他位變0 0。2 2 邏輯或運算指令邏輯或運算指令 ORL AORL A,Rn;(Rn) Rn

57、;(Rn) (A A) (A),n=0-7(A),n=0-7 ORL AORL A,direct;(direct) direct;(direct) (A) (A)(A) (A) ORL AORL A,Ri;Ri;((Ri)(Ri)) (A) (A),i=0,1(A) (A),i=0,1 ORL A,#DATA;ORL A,#DATA;(A A)DATA DATA (A A) ORL directORL direct,A;A;(directdirect) (A) (A) (directdirect) ORL directORL direct,#DATA;(direct) #DATA;(direc

58、t) DATA DATA (direct),direct), 邏輯或指令可用于對某個存儲單元,使其中某些位變邏輯或指令可用于對某個存儲單元,使其中某些位變為為“1”1”,而其余位不變。,而其余位不變。 例:設(例:設(A A)=0AAH=0AAH,(,(P1P1)=0FFH=0FFH,試編程把累加器,試編程把累加器A A中低四位送中低四位送P1P1口低四位,口低四位,P1P1口高四位不變。口高四位不變。 MOV R0MOV R0,A A; ANL AANL A,#0FH#0FH;ANL P1ANL P1,#0F0H#0F0H;ORL P1ORL P1,A A; MOV AMOV A,R0R0;

59、 (R0R0)=0AAH=0AAH (A A)=0AH=0AH (P1P1)=0F0H=0F0H (P1P1)=0FAH=0FAH (A A)=0AAH=0AAH 2 2 邏輯異或運算指令邏輯異或運算指令 XRL AXRL A,Rn;(Rn) Rn;(Rn) (A A) (A),n=0-7(A),n=0-7 XRL AXRL A,direct;(direct) (A) (A)direct;(direct) (A) (A) XRL AXRL A,Ri;Ri;((Ri)(Ri)) (A) (A),i=0,1(A) (A),i=0,1 XRL A,#DATA;XRL A,#DATA;(A A) DA

60、TA DATA (A A) XRL directXRL direct,A;A;(directdirect) (A) (A) (directdirect) XRL directXRL direct,#DATA;(direct) DATA #DATA;(direct) DATA (direct),direct), 邏輯或指令可用于對某個存儲單元,使其中某些位變邏輯或指令可用于對某個存儲單元,使其中某些位變反,而其余位不變。反,而其余位不變。 例:外例:外RAMRAM(30H30H)=0AAH=0AAH,現欲令它高四位不變,低,現欲令它高四位不變,低四位取反。四位取反。 MOV R0MOV R0,#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論