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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

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

7、,片外64KB64KB MCS-51 MCS-51如:如: MOV AMOV A,R0R0MOVX AMOVX A,R0R0MOVX AMOVX A,DPTRDPTR操作數(shù)在片內(nèi)RAM中操作數(shù)在片外RAM中操作數(shù)在片外RAM中以以DPTRDPTR或或PCPC為基址存放器,累加器為基址存放器,累加器A A為變址存放器。把兩為變址存放器。把兩者內(nèi)容相加,結(jié)果作為操作數(shù)的地址。者內(nèi)容相加,結(jié)果作為操作數(shù)的地址。 常用于查表操作。常用于查表操作。 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操作數(shù)在程序存儲器中E0A程序存儲區(qū)2040H 9320E0H 472041H DPH 20DPL 00ALU如:MOVC A,A+DPTR設(shè)DPTR=2000H,A=E0H20E0H47指令代碼3.2.6 相對尋址相對尋址 將將PCPC中的當(dāng)前內(nèi)容與指令第二字節(jié)給出的數(shù)相加,結(jié)中的當(dāng)前內(nèi)容與指令第二字節(jié)給出的數(shù)相加,結(jié) 果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址轉(zhuǎn)移目的地址。

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

10、RAM的位尋址區(qū)和某些可位尋址的特殊的位尋址區(qū)和某些可位尋址的特殊功能存放器進(jìn)展位操作時(shí)的尋址方式。功能存放器進(jìn)展位操作時(shí)的尋址方式。 如如: SETB 3DH; : SETB 3DH; 將將27H.527H.5位置位置1 1 CLR C CLR C ;CyCy位清位清0 03.2.7 3.2.7 位尋址位尋址 Bit AddressingBit Addressing操作數(shù)在片內(nèi)RAM位地址區(qū)或SFR某些位中尋址方式涉及的存儲器空間尋址方式涉及的存儲器空間3.3 3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令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 源操作數(shù)尋址方式源操作數(shù)尋址方式5 5種:種: 立刻尋址、直接尋址、存放器尋址、立刻尋址、直接尋址、存放器尋址、 存放器間接尋址、變址尋址。存放器間接尋址、變址尋址。 目的操作數(shù)尋址方式目的操作數(shù)尋址方式3 3種:種: 直接尋址、存放器尋址、存放器間接尋址直接尋址、存放器尋址、存放器間接尋址 除了目的操作數(shù)為除了目的操作數(shù)為ACCACC的指令影響奇偶標(biāo)志的指令影響奇偶標(biāo)志

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

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

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

15、中的。而前兩條中的。而前兩條指令,由于指令,由于RiRi即即R0R0或或R1R1只是只是8 8位的存放器,所以只提位的存放器,所以只提供低供低8 8位地址。高位地址。高8 8位地址由位地址由P2P2口來提供??趤硖峁?。 3.3.運(yùn)用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿脒\(yùn)用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTRDPTR或或RiRi中,然后中,然后再用讀寫命令。再用讀寫命令。 例:將外部例:將外部RAMRAM中中100H100H單元中的內(nèi)容送入外部單元中的內(nèi)容送入外部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中的數(shù)送入A中。本組指令也被稱為查表指令,常用此指令來查一個(gè)已做好在ROM中的表格闡明:查找到的結(jié)果被放在A中,因此,本條指令執(zhí)行前后,A 中的值不一定一樣。例:有一個(gè)數(shù)在R0中,要求用查表的方法確定它的平方值此 數(shù)的取值范圍是0-5MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR . ORG 0100HDB 0,1,4,9,16,25假設(shè)假設(shè)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中的內(nèi)容送入堆棧中,中的內(nèi)容送入堆棧中,第二條為彈出指令,就是將堆棧中的內(nèi)容送回到第二條為彈出指令,就是將堆棧中

18、的內(nèi)容送回到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í)行完本條指令后,內(nèi)存行完本條指令后,內(nèi)存60H60H單元的值就是單元的值就是100100,同樣,執(zhí)行,同樣,執(zhí)行PUSH BP

19、USH B時(shí),是將時(shí),是將SP+1SP+1,即變?yōu)?,即變?yōu)?1H61H,然后將,然后將B B中的值送入到中的值送入到61H61H單元中,即執(zhí)行完本條指令后,單元中,即執(zhí)行完本條指令后,61H61H單元中的值變?yōu)閱卧械闹底優(yōu)?020。1.1.給出每條指令執(zhí)行后的結(jié)果給出每條指令執(zhí)行后的結(jié)果 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內(nèi)部RAM3.4 3.4 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令(24(24條條) ) Arithmetic Operations Arithmetic Operations 主要對主要對8 8位無符號數(shù);也可用于帶符號數(shù)運(yùn)算。位無符號數(shù);也可用于帶符號數(shù)運(yùn)算。 包括:加、減、乘、除、加包括:加、減、乘、除、加1 1、減、減1 1運(yùn)算指令運(yùn)算指令 影響影響PSWPSW有關(guān)位。有關(guān)位。 3.4.1 加法指令A(yù)DD 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中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果 存在存在A A中。中。1.不帶進(jìn)位位的加法指令4條2.帶進(jìn)位位的加法指令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中的值和其后面的值以及進(jìn)位位中的值和其后面的值以及進(jìn)位位C C中的值相加,中的值相加, 最終結(jié)果存在最終結(jié)果存在A A,常用于多字節(jié)數(shù)運(yùn)算中。,常用于多字節(jié)數(shù)運(yùn)算中。闡明:由于闡明:由于5151單片機(jī)是一種單片機(jī)是一種8 8位機(jī),所以只能做位機(jī),所以只能做8 8位的數(shù)學(xué)位的數(shù)學(xué)運(yùn)算,但運(yùn)算,但8 8位運(yùn)算的范圍只需位運(yùn)算的范圍只需02550255,這在實(shí)踐任務(wù)中是不,這在實(shí)踐任務(wù)中是不夠的,因此就要進(jìn)展擴(kuò)展,普通是將夠的,因此就要進(jìn)展擴(kuò)展,普通是將2 2個(gè)個(gè)8 8位位( (兩字節(jié)兩字節(jié)) )的數(shù)的數(shù)學(xué)運(yùn)算合起來,成為一個(gè)學(xué)運(yùn)算合起來,成為一個(gè)1616位的運(yùn)算,這樣

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

25、67H+30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H設(shè):1067H存在R1R0中, 30A0H存在R3R2中,計(jì)算R1R0+R3R2,結(jié)果存在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,結(jié)果是,結(jié)果是40H40H,所以,所以最終的結(jié)果是最終的結(jié)果是4087H4087H。1067H+3020H1067H+3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087HDA ADA A在進(jìn)展在進(jìn)展BCDBCD碼加法運(yùn)算時(shí),跟在碼加法運(yùn)算時(shí),跟在ADDADD和和ADDCADDC指令指令之后,用于對累加器之后,用于對累加器A A中剛進(jìn)

27、展的兩個(gè)中剛進(jìn)展的兩個(gè)BCDBCD碼的加法碼的加法的結(jié)果進(jìn)展十進(jìn)制調(diào)整。的結(jié)果進(jìn)展十進(jìn)制調(diào)整。例:例:A=0001 0101BCDA=0001 0101BCD代表十進(jìn)制數(shù)代表十進(jìn)制數(shù)1515 ADD AADD A,#8#83. 十進(jìn)制調(diào)整指令1條; A=1DH; A=1DH,按二進(jìn)制規(guī)律加,按二進(jìn)制規(guī)律加; A=23H; A=23H,按十進(jìn)制規(guī)律加,按十進(jìn)制規(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中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位C C中的中的值,最終結(jié)果存在值,最終結(jié)果存在A A中。中。如:如: SUBB ASUBB A,R2R2設(shè):設(shè): A=C9HA=C9H,R2=55HR2=55H,CY=1CY=1,執(zhí)行指令之后,執(zhí)行指令之后,A A中的值為中的值為73H73H。1. 帶借位的減法指令4條闡明:沒有不帶借位的減法指令,假設(shè)需求做闡明:沒有不帶借位的減法指令,假設(shè)需求做不帶位的減法指令在做第一次

29、相減時(shí),只需將不帶位的減法指令在做第一次相減時(shí),只需將CYCY清零即可。清零即可。對帶符號數(shù),要留意對帶符號數(shù),要留意OVOV標(biāo)志。標(biāo)志。OV=1OV=1,出錯。,出錯。3.5 邏輯運(yùn)算類指令24條主要用于對主要用于對2 2個(gè)操作數(shù)按位進(jìn)展邏輯操作,結(jié)果送到個(gè)操作數(shù)按位進(jìn)展邏輯操作,結(jié)果送到A A或直接尋址單元。或直接尋址單元。 主要操作主要操作 與、或、異或、移位、取反、清零等。與、或、異或、移位、取反、清零等。 對標(biāo)志位的影響對標(biāo)志位的影響 除了目的操作數(shù)為除了目的操作數(shù)為ACCACC的指令影響奇偶標(biāo)志的指令影響奇偶標(biāo)志P P外,外,普通不影響標(biāo)志位。普通不影響標(biāo)志位。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標(biāo)志標(biāo)志例:例:71H和和56H相或:相或:01110001 71H 01010110 56H 01110111 即即77H后兩條指令,假設(shè)直接地址為后兩條指令,假設(shè)直接地址為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標(biāo)志標(biāo)志例:例:71H71H和和56H56H相與:相與:01110001 01110001 71H71H 01010110 01010110 56H56H 01010000 01010000 即即50H50H后兩條指令,假設(shè)直接地址為

32、后兩條指令,假設(shè)直接地址為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標(biāo)志標(biāo)志00100111 00100111 即即27H27H后兩條指令,假設(shè)直接地址為后兩條指令,假設(shè)直接地址為I/OI/O端口,那么為端口,那么為“讀讀改寫操作。改寫操作。 eXclusive-oR Logic Instruction3.5.3 清0與取反指令2條取反:取反:CPL A CPL A ;/AA/AA例:假設(shè)例:假設(shè)A=5CHA=5CH,執(zhí)行,執(zhí)行CPL ACPL A 結(jié)果:結(jié)果: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標(biāo)志和標(biāo)志和CYCY。 Rotate Logic instruction例:假設(shè)假設(shè)A=5CHA=5CH,CY=1CY=1,執(zhí)行,執(zhí)行RLC ARLC A后,后, 對對RLCRLC、RRCRRC指令,在指令,在CY=0CY=0時(shí)時(shí)RLCRLC相當(dāng)于乘以相當(dāng)于乘以2 2RRCRRC相當(dāng)于除以相當(dāng)于除以2 2結(jié)果:結(jié)果:A=B9HA=B9H,CY=0CY=0,P=1P=10101 11000101 11001 11011 10011011

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

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

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

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

39、;跳轉(zhuǎn)ROUT1ROUT1開場的程序段開場的程序段TAB+4: AJMP ROUT2 TAB+4: AJMP ROUT2 ;跳轉(zhuǎn);跳轉(zhuǎn)ROUT2ROUT2開場的程序段開場的程序段TAB+6: AJMP ROUT3 TAB+6: AJMP ROUT3 ;跳轉(zhuǎn);跳轉(zhuǎn)ROUT3ROUT3開場的程序段開場的程序段 .ROUT0ROUT0: .ROUT1ROUT1: .ROUT2ROUT2: .ROUT3ROUT3:執(zhí)行該段程序后,程序?qū)⒏鶊?zhí)行該段程序后,程序?qū)⒏鶕?jù)據(jù)A A中的內(nèi)容轉(zhuǎn)移到不同的中的內(nèi)容轉(zhuǎn)移到不同的程序段去執(zhí)行程序段去執(zhí)行-散轉(zhuǎn)。散轉(zhuǎn)。A=0,A=0,轉(zhuǎn)轉(zhuǎn)ROUT0ROUT0A=2,A=2

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

41、址去。即: 新的新的PCPC值值= =當(dāng)前當(dāng)前PC+PC+偏移量偏移量relrel我們在編寫匯編言語源程序時(shí),可以直接寫成:我們在編寫匯編言語源程序時(shí),可以直接寫成: JZ JZ 標(biāo)號標(biāo)號 ;即轉(zhuǎn)移到標(biāo)號處。;即轉(zhuǎn)移到標(biāo)號處。 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í)行上面這段程序前:假設(shè)在執(zhí)行上面這段程序前:假設(shè)R0=0R0=0,結(jié)果,結(jié)果R1=0FFHR1=0FF

42、H。而假設(shè)。而假設(shè)R0R00 0,那么結(jié)果是,那么結(jié)果是R1=00HR1=00H。 把上面的那個(gè)例子中的把上面的那個(gè)例子中的JZJZ改成改成JNZJNZ,看看程序,看看程序執(zhí)行的結(jié)果是什么執(zhí)行的結(jié)果是什么? ? 假設(shè)假設(shè)R0=0R0=0,結(jié)果,結(jié)果R1=00HR1=00H。假設(shè)。假設(shè)R0 R0 0 0,結(jié)果是,結(jié)果是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此類指令的功能是將兩個(gè)操作數(shù)比較,假設(shè)此類指令的功能是將兩個(gè)操作數(shù)比較,假設(shè)兩者相等,就順序執(zhí)行,假設(shè)不相等,就轉(zhuǎn)兩者相等,就順序執(zhí)行,假設(shè)不相等,就轉(zhuǎn)移。移。同樣地,運(yùn)用時(shí),我們可以將同樣地,運(yùn)用時(shí),我們可以將relrel了解成標(biāo)號,了解成標(biāo)號,即:即:CJNE ACJNE A,#data#data,標(biāo)號,標(biāo)號CJNE ACJNE A,directdirect,標(biāo)號,標(biāo)號CJNE RnCJNE Rn,#data#data,標(biāo)號,標(biāo)號CJNE RiCJNE Ri,#data#data,標(biāo)號,標(biāo)號利用這些指令,可以判別兩數(shù)能否相等。利用這些指令,可以判別兩數(shù)能否相等。但有時(shí)還想得

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

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

46、0,就轉(zhuǎn)移,就轉(zhuǎn)移到第二個(gè)參數(shù)所指定的地方去。到第二個(gè)參數(shù)所指定的地方去。例:例: 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單元中的數(shù)延續(xù)相加,存至單元中的數(shù)延續(xù)相加,存至A A中,每加中,每加一次,一次, 23H23H單元中的數(shù)值減單元中的數(shù)值減1 1,直至減到

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

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

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

50、S-51 MCS-51 中,有一部份中,有一部份RAMRAM和一部份和一部份SFRSFR是具有位是具有位尋址功能的。尋址功能的。位操作區(qū):內(nèi)部位操作區(qū):內(nèi)部RAMRAM的的20H-2FH20H-2FH這這1616個(gè)字節(jié)單元,個(gè)字節(jié)單元,即即128128個(gè)位單元個(gè)位單元( (位地址空間位位地址空間位00007FH)7FH);可以位尋址的特殊功能存放器:可以位尋址的特殊功能存放器:80318031中有一中有一些些SFRSFR是可以進(jìn)展位尋址的,這些是可以進(jìn)展位尋址的,這些SFRSFR的特點(diǎn)是的特點(diǎn)是其字節(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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論