單片機教程3-MCS-51指令系統ppt課件_第1頁
單片機教程3-MCS-51指令系統ppt課件_第2頁
單片機教程3-MCS-51指令系統ppt課件_第3頁
單片機教程3-MCS-51指令系統ppt課件_第4頁
單片機教程3-MCS-51指令系統ppt課件_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、3.1 概述7 7種尋址方式,種尋址方式,111111條指令條指令字節(jié)數字節(jié)數運算速度運算速度單字節(jié)指令:單字節(jié)指令:4949條條雙字節(jié)指令:雙字節(jié)指令:4545條條三字節(jié)指令:三字節(jié)指令:1717條條單周期指令:單周期指令:6464條條雙周期指令:雙周期指令:4545條條周圍期指令:周圍期指令: 2 2 條條第三章 MCS-51指令系統功能功能數據傳送類:數據傳送類:2929條條算術運算類:算術運算類:2424條條邏輯運算類:邏輯運算類:2424條條控制轉移類:控制轉移類:1717條條位操作類:位操作類: 1717條條常用符號Rn:任務存放器中的存放器R0、R1R7之一,Ri:任務存放器中的

2、存放器R0或R1#data:8位立刻數#data16:16位立刻數direct:片內RAM或SFR的地址8位間接尋址存放器Bit:片內RAM或SFR的位地址addr11:11位目的地址addr16:16位目的地址rel: 補碼方式的8位地址偏移量。 偏移范圍為-128127/:位操作指令中,該位求反后參與操作,不影響該位X:片內RAM的直接地址或存放器(X):相應地址單元中的內容:箭頭左邊的內容送入箭頭右邊的單元內 3.2 3.2 尋址方式尋址方式3.2.1 3.2.1 立刻尋址立刻尋址Immediate AddressingImmediate Addressing 操作數就包含在指令代碼中,

3、在操作碼之后,稱為操作數就包含在指令代碼中,在操作碼之后,稱為立刻數,用立刻數,用“表示。表示。 MCS-51MCS-51 如:如:MOV P1, #80HMOV P1, #80H MOV R7, #0F5H MOV R7, #0F5H MOV DPTR MOV DPTR,#1245H#1245H操作數存在程序存儲器中 3.2.2 3.2.2 直接尋址直接尋址 Direct AddressingDirect Addressing直接運用數所在單元的地址找到了操作數,直接運用數所在單元的地址找到了操作數,所以稱所以稱這種方法為直接尋址。這種方法為直接尋址。操作數在操作數在SFRSFR、內部、內部

4、RAMRAM、位地址空間。、位地址空間。如:如: MOV AMOV A,00H00H MOV C MOV C,60H60H MOV A MOV A,0F0H0F0H3.2.3 存放器尋址存放器尋址 Register Addressing對選定的任務存放器對選定的任務存放器R0R0R7R7、累加器、累加器A A、通用存放器、通用存放器B B、地址存放器地址存放器DPTRDPTR中的數進展操作。中的數進展操作。 例:例:MOV AMOV A,R0R0;將;將R0R0任務存放器中的數據送到累加器任務存放器中的數據送到累加器A A中去。中去。提一個問題:我們知道,任務存放器就是內存單元提一個問題:我們

5、知道,任務存放器就是內存單元的一部分,假設我們選擇任務存放器組的一部分,假設我們選擇任務存放器組0 0,那么,那么R0R0就是就是RAMRAM的的00H00H單元,那么這樣一來,單元,那么這樣一來,MOV AMOV A,00H 00H 和和 MOV AMOV A,R0R0不就沒什么區(qū)別了嗎?不就沒什么區(qū)別了嗎? 確實,這兩條指令執(zhí)行的結果是完全一樣的,確實,這兩條指令執(zhí)行的結果是完全一樣的,都是將都是將00H00H單元中的內容送到單元中的內容送到A A中去,但是執(zhí)行的過中去,但是執(zhí)行的過程不同,執(zhí)行第一條指令需求程不同,執(zhí)行第一條指令需求2 2個機器周期,而第二個機器周期,而第二條那么只需求條

6、那么只需求1 1個機器周期,第一條指令變成最終的個機器周期,第一條指令變成最終的目的碼要兩個字節(jié)目的碼要兩個字節(jié)E5H 00HE5H 00H,而第二條那么只,而第二條那么只需一個字節(jié)需一個字節(jié)E8HE8H就可以了。就可以了。3.2.4 存放器間接尋址存放器間接尋址 Register Indirect Addressing把地址放在另外一個存放器中,根據這個存放器中的數值把地址放在另外一個存放器中,根據這個存放器中的數值決議該到哪個單元中取數據。決議該到哪個單元中取數據。 R0R0,R1-8R1-8位地址,片內低位地址,片內低128128字節(jié)或片外字節(jié)或片外DPTR-16DPTR-16位,片外位

7、,片外64KB64KB MCS-51 MCS-51如:如: MOV AMOV A,R0R0MOVX AMOVX A,R0R0MOVX AMOVX A,DPTRDPTR操作數在片內RAM中操作數在片外RAM中操作數在片外RAM中以以DPTRDPTR或或PCPC為基址存放器,累加器為基址存放器,累加器A A為變址存放器。把兩為變址存放器。把兩者內容相加,結果作為操作數的地址。者內容相加,結果作為操作數的地址。 常用于查表操作。常用于查表操作。 MCS-51MCS-51 MOVC A MOVC A, A+DPTR A+DPTR ;(A+DPTR) A (A+DPTR) A MOVC A MOVC A

8、, A+PCA+PC; PC+1 PCPC+1 PC,(A+PC)A(A+PC)A3.2.5 變址尋址變址尋址(基址基址+變址變址)Base-Register-plus-Index-Register-Indirect Addressing操作數在程序存儲器中E0A程序存儲區(qū)2040H 9320E0H 472041H DPH 20DPL 00ALU如:MOVC A,A+DPTR設DPTR=2000H,A=E0H20E0H47指令代碼3.2.6 相對尋址相對尋址 將將PCPC中的當前內容與指令第二字節(jié)給出的數相加,結中的當前內容與指令第二字節(jié)給出的數相加,結 果作為跳轉指令的轉移地址轉移目的地址。

9、果作為跳轉指令的轉移地址轉移目的地址。 PCPC中的當前內容稱為基地址本指令后的字節(jié)地址中的當前內容稱為基地址本指令后的字節(jié)地址 指令第二字節(jié)給出的數據稱為偏移量,指令第二字節(jié)給出的數據稱為偏移量,1 1字節(jié)帶符號數字節(jié)帶符號數. . 常用于跳轉指令。常用于跳轉指令。 如如: JC 23H: JC 23H 假設假設C=0C=0,不跳轉;,不跳轉; C=1C=1,跳轉,跳轉. .Relative Addressing改動PC程序存儲區(qū)ALU如:JC 231025H1000H 401025H 451001H 23 1024H 471002H 3023H1002H指令代碼當前PC 對片內對片內RAM

10、RAM的位尋址區(qū)和某些可位尋址的特殊的位尋址區(qū)和某些可位尋址的特殊功能存放器進展位操作時的尋址方式。功能存放器進展位操作時的尋址方式。 如如: SETB 3DH; : SETB 3DH; 將將27H.527H.5位置位置1 1 CLR C CLR C ;CyCy位清位清0 03.2.7 3.2.7 位尋址位尋址 Bit AddressingBit Addressing操作數在片內RAM位地址區(qū)或SFR某些位中尋址方式涉及的存儲器空間尋址方式涉及的存儲器空間3.3 3.3 數據傳送類指令數據傳送類指令2929條條 Data Transfer InstructionData Transfer In

11、struction MCS-51 MCS-51 助記符:助記符: 助記符:助記符: MOVMOV、MOVXMOVX、MOVC MOVC XCH XCH、XCHDXCHD、SWAP SWAP PUSH PUSH、POP POP 源操作數尋址方式源操作數尋址方式5 5種:種: 立刻尋址、直接尋址、存放器尋址、立刻尋址、直接尋址、存放器尋址、 存放器間接尋址、變址尋址。存放器間接尋址、變址尋址。 目的操作數尋址方式目的操作數尋址方式3 3種:種: 直接尋址、存放器尋址、存放器間接尋址直接尋址、存放器尋址、存放器間接尋址 除了目的操作數為除了目的操作數為ACCACC的指令影響奇偶標志的指令影響奇偶標志

12、P P外,普外,普通不影響通不影響標志位。標志位。3.3.1 3.3.1 十六位數的傳送指令十六位數的傳送指令1 1條條MOV DPTRMOV DPTR,#data16#data1680518051是一種是一種8 8位機,這是獨一的一條位機,這是獨一的一條1616位立刻數傳送指位立刻數傳送指令。功能:將一個令。功能:將一個1616位的立刻數送入位的立刻數送入DPTRDPTR中去。其中中去。其中高高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL。 例:例:MOV DPTRMOV DPTR,#1234H#1234H執(zhí)行完了之后執(zhí)行完了之后DPHDPH中的值為中的值為12H12

13、H,DPLDPL中的值為中的值為34H34H。假設我們分別向假設我們分別向DPHDPH,DPLDPL送數,那么結果也一樣。送數,那么結果也一樣。 如下面兩條指令:如下面兩條指令: MOV DPHMOV DPH,#35H#35H MOV DPL MOV DPL,#12H#12H。 那么就相當于執(zhí)行了那么就相當于執(zhí)行了 MOV DPTRMOV DPTR,#3512H#3512H。3.3.2 3.3.2 累加器累加器A A與片外與片外RAMRAM之間的數據傳送類指令之間的數據傳送類指令(4(4條條) ) MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A闡明: 1

14、.在51中,與外部存儲器RAM打交道的只可以是A累加器。一切需求送入外部RAM的數據必需求經過A送去,而一切要讀入的外部RAM中的數據也必需經過A讀入。 在此我們可以看出內外部RAM的區(qū)別了,內部RAM間可以直接進展數據的傳送,而外部那么不行。 比如,要將外部RAM中某一單元設為0100H單元的數據送入另一個單元設為0200H單元,也必需先將0100H單元中的內容讀入A,然后再送到0200H單元中去。 2. 2.要讀或寫外部的要讀或寫外部的RAMRAM,當然也必需求知道,當然也必需求知道RAMRAM的地址,的地址,在后兩條指令中,地址是被直接放在在后兩條指令中,地址是被直接放在DPTRDPTR

15、中的。而前兩條中的。而前兩條指令,由于指令,由于RiRi即即R0R0或或R1R1只是只是8 8位的存放器,所以只提位的存放器,所以只提供低供低8 8位地址。高位地址。高8 8位地址由位地址由P2P2口來提供??趤硖峁?3.3.運用時應先將要讀或寫的地址送入運用時應先將要讀或寫的地址送入DPTRDPTR或或RiRi中,然后中,然后再用讀寫命令。再用讀寫命令。 例:將外部例:將外部RAMRAM中中100H100H單元中的內容送入外部單元中的內容送入外部RAMRAM中中200H200H單元中。單元中。MOV DPTRMOV DPTR,#0100H#0100HMOVX AMOVX A,DPTRDPT

16、RMOV DPTRMOV DPTR,#0200H#0200HMOVX DPTRMOVX DPTR,A A3.3.3 讀程序存儲器指令讀程序存儲器指令2條條 MOVC A,A+DPTR MOVC A,A+PC 本組指令是將ROM中的數送入A中。本組指令也被稱為查表指令,常用此指令來查一個已做好在ROM中的表格闡明:查找到的結果被放在A中,因此,本條指令執(zhí)行前后,A 中的值不一定一樣。例:有一個數在R0中,要求用查表的方法確定它的平方值此 數的取值范圍是0-5MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR . ORG 0100HDB 0,1,4,9,16,25假設假設R

17、0中的值為中的值為2,那么最終地址為那么最終地址為100H+2為為102H,到到102H單元中找到單元中找到的是的是4。3.3.4 堆棧操作堆棧操作2條條PUSH direct PUSH direct ;SPSPSP+1SP+1,(SP)(SP)(direct)(direct)POP direct ; (direct) POP direct ; (direct) (SP), SP (SP), SPSP-1SP-1第一條為壓入指令,就是將第一條為壓入指令,就是將directdirect中的內容送入堆棧中,中的內容送入堆棧中,第二條為彈出指令,就是將堆棧中的內容送回到第二條為彈出指令,就是將堆棧中

18、的內容送回到directdirect中。中。例:例: MOV SPMOV SP,#5FH#5FH MOV A MOV A,#100#100 MOV B MOV B,#20#20 PUSH ACC PUSH ACC PUSH B PUSH B 那么執(zhí)行第一條那么執(zhí)行第一條PUSH ACCPUSH ACC指令是這樣的:將指令是這樣的:將SPSP中的值中的值加加1 1,即變?yōu)?,即變?yōu)?0H60H,然后將,然后將A A中的值送到中的值送到60H60H單元中,因此執(zhí)單元中,因此執(zhí)行完本條指令后,內存行完本條指令后,內存60H60H單元的值就是單元的值就是100100,同樣,執(zhí)行,同樣,執(zhí)行PUSH BP

19、USH B時,是將時,是將SP+1SP+1,即變?yōu)椋醋優(yōu)?1H61H,然后將,然后將B B中的值送入到中的值送入到61H61H單元中,即執(zhí)行完本條指令后,單元中,即執(zhí)行完本條指令后,61H61H單元中的值變?yōu)閱卧械闹底優(yōu)?020。1.1.給出每條指令執(zhí)行后的結果給出每條指令執(zhí)行后的結果 MOV 23H,#30HMOV 12H,#34HMOV R0,#23HMOV R7,12HMOV R1,#12HMOV A,R0MOV 34H,R1MOV 45H,34HMOV DPTR,#6712HMOV 12H,DPHMOV R0,DPLMOV A,R0;(23H)=30H;(12H)=34H;R0=2

20、3HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXDPHDPHDPLDPL45H45H34H34H23H23H12H12HR7R7R1R1R0R0XXXXXXXXXXXXXXXX30303434XXXXXXXX2323XXXXXXXXXXXXXXXX30303434343412122323676712123434343430303434343412122323676712123434343430306767343412121212;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=67H;R0=12H;A

21、=67H內部RAM3.4 3.4 算術運算類指令算術運算類指令(24(24條條) ) Arithmetic Operations Arithmetic Operations 主要對主要對8 8位無符號數;也可用于帶符號數運算。位無符號數;也可用于帶符號數運算。 包括:加、減、乘、除、加包括:加、減、乘、除、加1 1、減、減1 1運算指令運算指令 影響影響PSWPSW有關位。有關位。 3.4.1 加法指令ADD AADD A,#data #data ; A AdataAdataAADD AADD A,direct direct ; A A(direct )A(direct )AADD AADD

22、A,Rn Rn ; A ARnARnAADD AADD A,Ri Ri ; A A(Ri)A(Ri)A用途:將用途:將A A中的值與源操作數所指內容相加,最終結果中的值與源操作數所指內容相加,最終結果 存在存在A A中。中。1.不帶進位位的加法指令4條2.帶進位位的加法指令4條ADDC AADDC A,RnRn; A ARnRnCYACYAADDC AADDC A,directdirect ; A A(direct )(direct )CYACYAADDC AADDC A,RiRi; A A(Ri)(Ri)CYACYAADDC AADDC A,#data#data; A AdatadataCY

23、ACYA用途:將用途:將A A中的值和其后面的值以及進位位中的值和其后面的值以及進位位C C中的值相加,中的值相加, 最終結果存在最終結果存在A A,常用于多字節(jié)數運算中。,常用于多字節(jié)數運算中。闡明:由于闡明:由于5151單片機是一種單片機是一種8 8位機,所以只能做位機,所以只能做8 8位的數學位的數學運算,但運算,但8 8位運算的范圍只需位運算的范圍只需02550255,這在實踐任務中是不,這在實踐任務中是不夠的,因此就要進展擴展,普通是將夠的,因此就要進展擴展,普通是將2 2個個8 8位位( (兩字節(jié)兩字節(jié)) )的數的數學運算合起來,成為一個學運算合起來,成為一個1616位的運算,這樣

24、,可以表達的位的運算,這樣,可以表達的數的范圍就可以到達數的范圍就可以到達065535065535。例: 先做先做67H+A0H=107H67H+A0H=107H,而,而107H107H顯然超越了顯然超越了0FFH0FFH,因此最終保管在因此最終保管在A A中的是中的是07H07H,而,而1 1那么到了那么到了PSWPSW中中的的CYCY位了。換言之,位了。換言之,CYCY就相當于是就相當于是100H100H。 然后再做然后再做10H + 30H + CY10H + 30H + CY,結果是,結果是41H41H,所以,所以最終的結果是最終的結果是4107H4107H。1067H+30A0H10

25、67H+30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H設:1067H存在R1R0中, 30A0H存在R3R2中,計算R1R0+R3R2,結果存在R5R4中。MOV A,R0ADD A,R2 ;R0+R2A和CYMOV R4,AMOV A,R1ADDC A,R3 ;R1+R3+CYA和CYMOV R5,A又例: 先做先做67H+20H=87H67H+20H=87H,沒有超越,沒有超越0FFH0FFH,因此最終,因此最終保管在保管在A A中的是中的是87H

26、87H,而,而PSWPSW中的中的CY=0CY=0。 然后再做然后再做10H + 30H + CY10H + 30H + CY,結果是,結果是40H40H,所以,所以最終的結果是最終的結果是4087H4087H。1067H+3020H1067H+3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087HDA ADA A在進展在進展BCDBCD碼加法運算時,跟在碼加法運算時,跟在ADDADD和和ADDCADDC指令指令之后,用于對累加器之后,用于對累加器A A中剛進

27、展的兩個中剛進展的兩個BCDBCD碼的加法碼的加法的結果進展十進制調整。的結果進展十進制調整。例:例:A=0001 0101BCDA=0001 0101BCD代表十進制數代表十進制數1515 ADD AADD A,#8#83. 十進制調整指令1條; A=1DH; A=1DH,按二進制規(guī)律加,按二進制規(guī)律加; A=23H; A=23H,按十進制規(guī)律加,按十進制規(guī)律加DA ADA A3.4.2 減法指令8條SUBB ASUBB A,RnRn ; A ARnRnCYACYASUBB ASUBB A,direct direct ; A A(direct )(direct )CYACYASUBB ASU

28、BB A,RiRi ; A A(Ri)(Ri)CYACYASUBB ASUBB A,#data#data; A AdatadataCYACYA將將A A中的值減去源操作數所指內容以及進位位中的值減去源操作數所指內容以及進位位C C中的中的值,最終結果存在值,最終結果存在A A中。中。如:如: SUBB ASUBB A,R2R2設:設: A=C9HA=C9H,R2=55HR2=55H,CY=1CY=1,執(zhí)行指令之后,執(zhí)行指令之后,A A中的值為中的值為73H73H。1. 帶借位的減法指令4條闡明:沒有不帶借位的減法指令,假設需求做闡明:沒有不帶借位的減法指令,假設需求做不帶位的減法指令在做第一次

29、相減時,只需將不帶位的減法指令在做第一次相減時,只需將CYCY清零即可。清零即可。對帶符號數,要留意對帶符號數,要留意OVOV標志。標志。OV=1OV=1,出錯。,出錯。3.5 邏輯運算類指令24條主要用于對主要用于對2 2個操作數按位進展邏輯操作,結果送到個操作數按位進展邏輯操作,結果送到A A或直接尋址單元?;蛑苯訉ぶ穯卧?。 主要操作主要操作 與、或、異或、移位、取反、清零等。與、或、異或、移位、取反、清零等。 對標志位的影響對標志位的影響 除了目的操作數為除了目的操作數為ACCACC的指令影響奇偶標志的指令影響奇偶標志P P外,外,普通不影響標志位。普通不影響標志位。Logic Oper

30、ations3.5.1 3.5.1 邏輯或指令邏輯或指令6 6條條ORL A,Rn ;ARnAORL A,direct ;A(direct)AORL A,Ri ;A(Ri)AORL A,#data;AdataAORL direct,A;(direct)A(direct)ORL direct,#data ;(direct)data(direct)影響影響P P標志標志例:例:71H和和56H相或:相或:01110001 71H 01010110 56H 01110111 即即77H后兩條指令,假設直接地址為后兩條指令,假設直接地址為I/OI/O端口,那么為端口,那么為“讀讀改寫操作。改寫操作。

31、OR Logic Instruction3.5.2 邏輯與指令 6條ANL A,Rn ;ARnAANL A,direct ;A(direct)AANL A,Ri ;A(Ri)AANL A,#data ;AdataAANL direct,A ;(direct)A(direct)ANL direct,#data ;(direct)data(direct)影響影響P P標志標志例:例:71H71H和和56H56H相與:相與:01110001 01110001 71H71H 01010110 01010110 56H56H 01010000 01010000 即即50H50H后兩條指令,假設直接地址為

32、后兩條指令,假設直接地址為I/OI/O端口,那么為端口,那么為“讀讀改寫操作。改寫操作。 ANd Logic Instruction例:例:71H71H和和56H56H相異或:相異或: 01110001 01110001 71H71H ) 01010110 ) 01010110 56H56H 3.5.2 邏輯異或指令6條XRL A,Rn ;A RnAXRL A,direct ;A (direct)AXRL A,Ri ;A (Ri)AXRL A,#data ;A dataAXRL direct,A ;(direct) A(direct)XRL direct,#data ;(direct) dat

33、a(direct)影響影響P標志標志00100111 00100111 即即27H27H后兩條指令,假設直接地址為后兩條指令,假設直接地址為I/OI/O端口,那么為端口,那么為“讀讀改寫操作。改寫操作。 eXclusive-oR Logic Instruction3.5.3 清0與取反指令2條取反:取反:CPL A CPL A ;/AA/AA例:假設例:假設A=5CHA=5CH,執(zhí)行,執(zhí)行CPL ACPL A 結果:結果:A=A3HA=A3H清清0 0:CLR ACLR A ;0A0AComPlement Logic OperationComPlement Logic Operation3.5

34、.4 循環(huán)移位指令4條RL ARR ARLC ARRC AA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后兩條指令,影響后兩條指令,影響P P標志和標志和CYCY。 Rotate Logic instruction例:假設假設A=5CHA=5CH,CY=1CY=1,執(zhí)行,執(zhí)行RLC ARLC A后,后, 對對RLCRLC、RRCRRC指令,在指令,在CY=0CY=0時時RLCRLC相當于乘以相當于乘以2 2RRCRRC相當于除以相當于除以2 2結果:結果:A=B9HA=B9H,CY=0CY=0,P=1P=10101 11000101 11001 11011 10011011

35、10010 0共有控制程序轉移類指令共有控制程序轉移類指令( (不包括位操作類的轉移不包括位操作類的轉移指令指令) )。此類指令普通不影響。此類指令普通不影響PSWPSW。包括以下類型:包括以下類型:無條件轉移和條件轉移無條件轉移和條件轉移相對轉移和絕對轉移相對轉移和絕對轉移長轉移和短轉移長轉移和短轉移調用與前往指令調用與前往指令 短轉移類指令:短轉移類指令:AJMP addr11AJMP addr11 長轉移類指令:長轉移類指令:LJMP addr16LJMP addr16 相對轉移指令:相對轉移指令:SJMP relSJMP rel 間接轉移指令:間接轉移指令:JMP A+DPTRJMP

36、A+DPTR1 1上面的前三條指令,統統了解成:上面的前三條指令,統統了解成:PCPC值改動,即值改動,即跳轉到一個標號處。跳轉到一個標號處。 那么他們的區(qū)別何在呢?那么他們的區(qū)別何在呢?跳轉的范圍不同。跳轉的范圍不同。 短轉移類指令:短轉移類指令:AJMP addr11AJMP addr11 長轉移類指令:長轉移類指令:LJMP addr16LJMP addr16 相對轉移指令:相對轉移指令:SJMP relSJMP rel轉移范圍:轉移范圍:2KB2KB64KB64KB-128+127-128+127指令構成不同。指令構成不同。 AJMPAJMP、LJMPLJMP后跟的是絕對地址,后跟的是

37、絕對地址, 而而SJMPSJMP后跟的是相對地址。后跟的是相對地址。 指令長度不同指令長度不同 原那么上,一切用原那么上,一切用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用 LJMPLJMP來替代。來替代。間接轉移指令:間接轉移指令:JMP A+DPTRJMP A+DPTR 這條指令的用途也是跳轉,轉到什么地方去呢?這條指令的用途也是跳轉,轉到什么地方去呢?這可不能由標號簡單地決議了。這可不能由標號簡單地決議了。 轉移地址由轉移地址由A+DPTRA+DPTR構成,并直接送入構成,并直接送入PCPC。指令對指令對A A、DPTRDPTR和標志位均無影響。和標志位均無影響。 本

38、指令可替代眾多的判別跳轉指令,又稱為散本指令可替代眾多的判別跳轉指令,又稱為散轉指令,多用于多分支程序構造中。轉指令,多用于多分支程序構造中。2 2第四條指令與前三條指令相比有所不同第四條指令與前三條指令相比有所不同例:例: MOV DPTRMOV DPTR,#TAB #TAB ;將;將TABTAB代表的地址送入代表的地址送入DPTRDPTR JMP A+DPTR JMP A+DPTR ;跳轉;跳轉TAB: AJMP ROUT0 TAB: AJMP ROUT0 ;跳轉;跳轉ROUT0ROUT0開場的程序段開場的程序段TAB+2: AJMP ROUT1 TAB+2: AJMP ROUT1 ;跳轉

39、;跳轉ROUT1ROUT1開場的程序段開場的程序段TAB+4: AJMP ROUT2 TAB+4: AJMP ROUT2 ;跳轉;跳轉ROUT2ROUT2開場的程序段開場的程序段TAB+6: AJMP ROUT3 TAB+6: AJMP ROUT3 ;跳轉;跳轉ROUT3ROUT3開場的程序段開場的程序段 .ROUT0ROUT0: .ROUT1ROUT1: .ROUT2ROUT2: .ROUT3ROUT3:執(zhí)行該段程序后,程序將根執(zhí)行該段程序后,程序將根據據A A中的內容轉移到不同的中的內容轉移到不同的程序段去執(zhí)行程序段去執(zhí)行-散轉。散轉。A=0,A=0,轉轉ROUT0ROUT0A=2,A=2

40、,轉轉ROUT1ROUT1A=4,A=4,轉轉ROUT2ROUT2A=6,A=6,轉轉ROUT3ROUT3條件轉移指令是指在滿足一定條件時進展相對轉條件轉移指令是指在滿足一定條件時進展相對轉移,否那么程序繼續(xù)執(zhí)行本指令的下一條指令。移,否那么程序繼續(xù)執(zhí)行本指令的下一條指令。一、判一、判A內容能否為內容能否為0轉移指令轉移指令2條條 JZ rel JZ rel ;假設;假設A=0A=0,那么轉移,否那么順序執(zhí),那么轉移,否那么順序執(zhí)行。行。 JNZ rel JNZ rel ;假設;假設A0A0,就轉移。,就轉移。轉移到相對于當前轉移到相對于當前PCPC值的值的8 8位移量的地址去。即:位移量的地

41、址去。即: 新的新的PCPC值值= =當前當前PC+PC+偏移量偏移量relrel我們在編寫匯編言語源程序時,可以直接寫成:我們在編寫匯編言語源程序時,可以直接寫成: JZ JZ 標號標號 ;即轉移到標號處。;即轉移到標號處。 MOV A MOV A,R0R0 JZ L1 JZ L1 MOV R1 MOV R1,#00H#00H AJMP L2 AJMP L2 L1: MOV R1 L1: MOV R1,#0FFH#0FFH L2: SJMP L2 L2: SJMP L2 END END 在執(zhí)行上面這段程序前:假設在執(zhí)行上面這段程序前:假設R0=0R0=0,結果,結果R1=0FFHR1=0FF

42、H。而假設。而假設R0R00 0,那么結果是,那么結果是R1=00HR1=00H。 把上面的那個例子中的把上面的那個例子中的JZJZ改成改成JNZJNZ,看看程序,看看程序執(zhí)行的結果是什么執(zhí)行的結果是什么? ? 假設假設R0=0R0=0,結果,結果R1=00HR1=00H。假設。假設R0 R0 0 0,結果是,結果是R1R1中的中的值為值為0FFH0FFH。CJNE ACJNE A,#data#data,rel rel CJNE ACJNE A,directdirect,relrelCJNE RnCJNE Rn,#data#data,relrelCJNE RiCJNE Ri,#data#dat

43、a,relrel此類指令的功能是將兩個操作數比較,假設此類指令的功能是將兩個操作數比較,假設兩者相等,就順序執(zhí)行,假設不相等,就轉兩者相等,就順序執(zhí)行,假設不相等,就轉移。移。同樣地,運用時,我們可以將同樣地,運用時,我們可以將relrel了解成標號,了解成標號,即:即:CJNE ACJNE A,#data#data,標號,標號CJNE ACJNE A,directdirect,標號,標號CJNE RnCJNE Rn,#data#data,標號,標號CJNE RiCJNE Ri,#data#data,標號,標號利用這些指令,可以判別兩數能否相等。利用這些指令,可以判別兩數能否相等。但有時還想得

44、知兩數比較之后哪個大,哪個小,但有時還想得知兩數比較之后哪個大,哪個小,本條指令也具有這樣的功能:本條指令也具有這樣的功能:假設兩數不相等,那么假設兩數不相等,那么CPUCPU還會用還會用CYCY進位位進位位來反映哪個數大,哪個數小。來反映哪個數大,哪個數小。假設前面的數大,那么假設前面的數大,那么CY=0CY=0,否那么,否那么CY=1CY=1。因此在程序轉移后再次利用因此在程序轉移后再次利用CYCY就可判別出哪個就可判別出哪個數大,哪個數小了。數大,哪個數小了。 MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,那么不轉移R1=00H; AJMP L3L

45、1:JC L2 ;如CY=1即 R010H,那么轉移 AJMP L3L2:MOV R1,#0FFHL3:SJMP L3因此最終結果是:本程序執(zhí)行前,假設R0=10H,那么R1=00H;假設R010H,那么R1=0AAH;假設R010H,那么R1=0FFH。DJNZ RnDJNZ Rn,relrelDJNZ directDJNZ direct,relrelDJNZDJNZ指令的執(zhí)行過程是這樣的指令的執(zhí)行過程是這樣的: :它將第一個參數中的值減它將第一個參數中的值減1 1,然后看這個值能否等于,然后看這個值能否等于0 0,假設等于,假設等于0 0,就往下執(zhí)行,假設不等于,就往下執(zhí)行,假設不等于0

46、0,就轉移,就轉移到第二個參數所指定的地方去。到第二個參數所指定的地方去。例:例: DJNZ 10HDJNZ 10H,LOOPLOOP . .LOOP: .LOOP: .例:例: MOV 23H,#0AHMOV 23H,#0AH CLR A CLR ALOOP: ADD A,23HLOOP: ADD A,23H DJNZ 23H,LOOP DJNZ 23H,LOOP SJMP $ SJMP $上述程序段的執(zhí)行過程是:上述程序段的執(zhí)行過程是:將將23H23H單元中的數延續(xù)相加,存至單元中的數延續(xù)相加,存至A A中,每加中,每加一次,一次, 23H23H單元中的數值減單元中的數值減1 1,直至減到

47、,直至減到0 0,共加共加23H23H次。次。一、調用指令一、調用指令2條條 LCALL addr16 LCALL addr16 ;長調用指令;長調用指令(3(3字節(jié)字節(jié)) ) ACALL addr11 ACALL addr11 ;短調用指令;短調用指令(2(2字節(jié)字節(jié)) )上面兩條指令都是在主程序中調用子程序,兩者的區(qū)別上面兩條指令都是在主程序中調用子程序,兩者的區(qū)別: :對短調用指令,被調用子程序入口地址必需與調用指令的對短調用指令,被調用子程序入口地址必需與調用指令的下一條指令的第一字節(jié)在一樣的下一條指令的第一字節(jié)在一樣的2KB2KB存儲區(qū)之內。存儲區(qū)之內。運用時可以用:運用時可以用:

48、LCALL LCALL 標號標號 ;標號表示子程序首地址;標號表示子程序首地址 ACALL ACALL 標號標號 來調用子程序。來調用子程序。指令的執(zhí)行過程是:當前PC壓棧,子程序首地址送 PC,實現轉移。子程序執(zhí)行完后必需回到主程序,如何子程序執(zhí)行完后必需回到主程序,如何前往呢?只需執(zhí)行一條前往指令就可以了。前往呢?只需執(zhí)行一條前往指令就可以了。RETRET;子程序前往指令;子程序前往指令RETIRETI;中斷子程序前往指令;中斷子程序前往指令兩者不能互換運用。兩者不能互換運用。3.6.4 3.6.4 空操作指令空操作指令1 1條條 NOP空操作,就是什么事也不干,停一個周期,普通空操作,就

49、是什么事也不干,停一個周期,普通用作短時間的延時。用作短時間的延時。RET指令的執(zhí)行過程是:堆棧棧頂內容2字節(jié),調用時保管的當前PC值彈出給PC,實現前往。RETI指令除了具有RET指令的功能實現程序前往外,還有對中斷優(yōu)先級形狀觸發(fā)器的清零。3.7 3.7 位操作指令位操作指令 1717條條Boolean OperationsMCS-51MCS-51單片機的硬件構造中,有一個位處置器單片機的硬件構造中,有一個位處置器又稱布爾處置器,它有一套位變量處置的指令集,又稱布爾處置器,它有一套位變量處置的指令集,包括位變量傳送、邏輯運算、控制程序轉移等。包括位變量傳送、邏輯運算、控制程序轉移等。在在MC

50、S-51 MCS-51 中,有一部份中,有一部份RAMRAM和一部份和一部份SFRSFR是具有位是具有位尋址功能的。尋址功能的。位操作區(qū):內部位操作區(qū):內部RAMRAM的的20H-2FH20H-2FH這這1616個字節(jié)單元,個字節(jié)單元,即即128128個位單元個位單元( (位地址空間位位地址空間位00007FH)7FH);可以位尋址的特殊功能存放器:可以位尋址的特殊功能存放器:80318031中有一中有一些些SFRSFR是可以進展位尋址的,這些是可以進展位尋址的,這些SFRSFR的特點是的特點是其字節(jié)地址均可被其字節(jié)地址均可被8 8整除,整除, 如如A A累加器,累加器,B B存放存放器、器、PSWPSW、IPIP中斷優(yōu)先級控制存放器、中斷優(yōu)先級控制存放器、 IEIE中斷允許控制存放器、中斷允許控制存放器、SCONSCON串行口

溫馨提示

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

評論

0/150

提交評論