第四章 MCS-51單片機(jī)的指令系統(tǒng)_第1頁(yè)
第四章 MCS-51單片機(jī)的指令系統(tǒng)_第2頁(yè)
第四章 MCS-51單片機(jī)的指令系統(tǒng)_第3頁(yè)
第四章 MCS-51單片機(jī)的指令系統(tǒng)_第4頁(yè)
第四章 MCS-51單片機(jī)的指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章MCS-51單片機(jī)的指令系統(tǒng)第四章

MCS-51單片機(jī)的指令系統(tǒng)4.1MCS-51指令系統(tǒng)的分類、格式及一般說(shuō)明4.2尋址方式4.3分類指令MCS-51單片機(jī)指令系統(tǒng)有如下特點(diǎn):(1)指令執(zhí)行時(shí)間快。(2)指令短,約有一半的指令為單字節(jié)指令。(3)用一條指令即可實(shí)現(xiàn)2個(gè)一字節(jié)的相乘或相除。(4)具有豐富的位操作指令。(5)可直接用傳送指令實(shí)現(xiàn)端口的輸入輸出操作。4.1MCS-51指令系統(tǒng)的分類、格式及一般說(shuō)明 4.1.1指令分類4.1.2指令格式4.1.3指令描述符號(hào)介紹返回本章首頁(yè)4.1.1指令分類 按指令功能,MCS-51指令系統(tǒng)分為數(shù)據(jù)傳遞與交換、算術(shù)運(yùn)算、邏輯運(yùn)算、程序轉(zhuǎn)移、布爾處理操作、CPU控制等6類。布爾處理操作類指令又稱位操作指令。返回本節(jié)4.1.2指令格式在MCS-51指令中,一般指令主要由操作碼、操作數(shù)組成。指令應(yīng)具有以下功能:(1)操作碼指明執(zhí)行什么性質(zhì)和類型的操作。例如,數(shù)的傳送、加法、減法等。(2)操作數(shù)指明操作的數(shù)本身或者是操作數(shù)所在的地址。(3)指定操作結(jié)果存放的地址。返回本節(jié)

4.1.3指令描述符號(hào)介紹Rn——當(dāng)前選中的寄存器區(qū)中的8個(gè)工作寄存器R0~R7(n=0~7)。Ri——當(dāng)前選中的寄存器區(qū)中的2個(gè)工作寄存器R0、R1(i=0,1)。direct—8位的內(nèi)部數(shù)據(jù)存儲(chǔ)器單元中的地址。#data——包含在指令中的8位常數(shù)。#data16——包含在指令中的16位常數(shù)。addr16——16位目的地址。addr11——11位目的地址。rel——8位帶符號(hào)的偏移字節(jié),簡(jiǎn)稱偏移量。DPTR——數(shù)據(jù)指針,可用作16位地址寄存器。bit——內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺?。A——累加器。B——專用寄存器,用于乘法和除法指令中。C——進(jìn)位標(biāo)志或進(jìn)位位,或布爾處理機(jī)中的累加器。@——間址寄存器或基址寄存器的前綴,如@Ri,@DPTR。/——位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反,如/bit?!痢瑑?nèi)RAM的直接地址或寄存器。(×)——由×尋址的單元中的內(nèi)容。

——箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所代替。返回本節(jié)4.2尋址方式 4.2.1立即尋址 4.2.2直接尋址4.2.3寄存器尋址4.2.4寄存器間接尋址4.2.5變址尋址 4.2.6相對(duì)尋址 4.2.7位尋址返回本章首頁(yè)4.2.1立即尋址 指令中直接給出操作數(shù)的尋址方式。立即操作數(shù)用前面加有#號(hào)的8位或16位數(shù)來(lái)表示。例如:MOV A,#60H ;A←#60HMOV DPTR,#3400H ;DPTR←#3400HMOV 30H,#40H ;30H單元←#40H上述三條指令執(zhí)行完后,累加器A中數(shù)據(jù)為立即數(shù)據(jù)60H,DPTR寄存器中數(shù)據(jù)為3400H,30H單元中數(shù)據(jù)為立即數(shù)40H。返回本節(jié)4.2.2直接尋址 指令中直接給出操作數(shù)地址的尋址方式,能進(jìn)行直接尋址的存儲(chǔ)空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM。例如:MOV PSW,#20H ;PSW←#20HPSW為直接尋址寄存器的符號(hào)地址。

MOV A,30H ;A←30H內(nèi)部RAM單元中的內(nèi)容30H為直接給出的內(nèi)部RAM的地址。返回本節(jié)4.2.3寄存器尋址 以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。通用寄存器指A、B、DPTR以及R0~R7

。例如:CLR A ;A←0INC DPTR ;DPTR←DPTR+1ADD R5,#20H ;R5←#20H+R5返回本節(jié)4.2.4寄存器間接尋址以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操作數(shù)的尋址方式。間接尋址的存儲(chǔ)器空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于寄存器間接尋址的寄存器有R0,R1,DPTR,SP。其中R0、R1必須是工作寄存器組中的寄存器。SP僅用于堆棧操作。例如:MOV@R0,A;內(nèi)部RAM(R0)←A其指令操作過(guò)程示意圖如圖3-1所示。又如:MOVXA,@R1;A←外部RAM(P2R1)其指令操作過(guò)程示意圖如圖4-2所示。再如:MOVX@DPTR,A;外部RAM(DPTR)←A

其指令操作過(guò)程示意圖如圖4-3所示。片內(nèi)RAM30HR034HA30H34H圖4-1MOV@R0,A間接尋址示意圖片外RAM34HP245HA3410H45H10HR1片外RAM2000HDPTR30HA2000H30H圖4-2MOVXA,@R1間接尋址示意圖圖4-3MOVX@DPTR,A間接尋址示意圖返回本節(jié)4.2.5變址尋址 變址尋址只能對(duì)程序存儲(chǔ)器中數(shù)據(jù)進(jìn)行操作。由于程序存儲(chǔ)器是只讀的,因此變址尋址只有讀操作而無(wú)寫操作,在指令符號(hào)上采用MOVC的形式(如圖4-4所示)。例如:MOVCA,@A+DPTR;A←(A+DPTR)又如,MOVCA,@A+PC;A←(A+PC)這條指令與上條指令不同的是,基址寄存器是PC。圖4-4變址尋址示意圖程序存儲(chǔ)器2000HDPTR64H(10H)A2010H64H10H2000H返回本節(jié)4.2.6相對(duì)尋址 以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的一字節(jié)補(bǔ)碼數(shù)(偏移量)形成新的PC值的尋址方式。相對(duì)尋址用于修改PC值,主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。例如,SJMP08H;PC←PC+2+08H

指令操作示意圖如圖4-5所示。程序存儲(chǔ)器(2000H)200AHSJMP200AH08H2000H+208HPC2000H圖4-5相對(duì)尋址示意圖返回本節(jié)4.2.7位尋址位尋址只能對(duì)有位地址的單元作位尋址操作。位尋址其實(shí)是一種直接尋址方式,不過(guò)其地址是位地址。例如:SETB10H;將10H位置1若22H單元中存放著數(shù)據(jù)40H,22H單元的D0位的位地址為10H,執(zhí)行上述指令后(22H)=41H。又如:MOV32H,C;32H←進(jìn)位位CORLC,32H;C←C∨32H返回本節(jié)4.3分類指令 4.3.1數(shù)據(jù)傳送類指令4.3.2算術(shù)運(yùn)算類指令4.3.3邏輯運(yùn)算與循環(huán)類指令4.3.4程序轉(zhuǎn)移類指令4.3.5調(diào)用子程序及返回指令4.3.6位操作指令4.3.7空操作指令返回本章首頁(yè)4.3.1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令共28條,是將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8種。源操作數(shù)可采用寄存器、寄存器間接、直接、立即、變址5種尋址方式尋址,目的操作數(shù)可以采用寄存器、寄存器間接、直接尋址3種尋址方式。MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送途徑如圖4-6所示。直接地址direct累加器A直接地址direct間接地址@Ri寄存器Rn立即數(shù)#data寄存器DPTR圖4-6MCS-51單片機(jī)片內(nèi)數(shù)據(jù)傳送圖1.以A為目的操作數(shù)MOVA,Rn

;A←RnMOVA,direct ;A←(direct)MOVA,@Ri

;A←(Ri)MOVA,#data ;A←#data

MOV30H,#00HMOVR2,#30HMOVR0,#30HMOVA,R2MOVA,@R02.以Rn為目的操作數(shù)MOVRn,A ;Rn←AMOVRn,direct ;Rn←(direct)MOVRn,#data ;Rn←#dataMOV30H,#10HMOVR2,30H但不允許出現(xiàn):MOVR2,R33.以直接地址為目的操作數(shù)MOVdirect,A ;direct←AMOVdirect,direct ;direct←(direct)MOVdirect,#data ;direct←#dataMOV30H,40H4.以間接地址為目的操作數(shù)MOV@Ri,A ;(Ri)←AMOV@Ri,direct ;(Ri)←(direct)MOV@Ri,#data ;(Ri)←#data例如:設(shè)(30H)=6FH,R1=40H,執(zhí)行MOV@R1,30H后,30H單元中數(shù)據(jù)取出送入R1間接尋址的40H單元,(40H)=?。5.以DPTR為目的操作數(shù)MOVDPTR,#data16;DPTR←#data16例如執(zhí)行MOVDPTR,#2000H后,(DPTR)=2000H。6.訪問(wèn)外部數(shù)據(jù)RAMMOVXA,@DPTR ;A←(DPTR)MOVX@DPTR,A ;(DPTR)←AMOVXA,@Ri

;A←(P2Ri)MOVX@Ri,A ;(P2Ri)←AMOVDPTR,#01FFHMOVX@DPTR,A7.讀程序存儲(chǔ)器MOVCA,@A+DPTR ;A←(A+DPTR)MOVCA,@A+PC ;A←(A+PC)例如已知A=30H,DPTR=3000H,程序存儲(chǔ)器單元(3030H)=50H,執(zhí)行MOVCA,@A+DPTR后,A=?。8.?dāng)?shù)據(jù)交換(不影響標(biāo)志位)l

字節(jié)交換XCHA,Rn

;A<=>RnXCHA,direct ;A<=>(direct)XCHA,@Ri

;A<=>(Ri)能否出現(xiàn):XCHRn,Rnl

半字節(jié)交換XCHDA,@Ri

;A0~3<=>(Ri)0~3SWAPA ;A0~3<=>A4~79.堆棧操作所謂堆棧是在片內(nèi)RAM中按“先進(jìn)后出,后進(jìn)先出”原則設(shè)置的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧出棧由指針SP統(tǒng)一管理。堆棧的操作有如下兩條專用指令:(都是直接尋址)

PUSHdirect;SP←(SP+1),(SP)←(direct)

POP direct ;(direct)←(SP),SP←SP-1不能出現(xiàn):PUSHA或:POPA,應(yīng)該如何?PUSH是進(jìn)棧(或稱為壓入操作)指令。指令執(zhí)行過(guò)程如圖4-7所示。片內(nèi)RAM30H11H10HSP××片內(nèi)RAM50H40H11H10HSP××40H30H片內(nèi)RAM50H40H11H10H50H××SP30H片內(nèi)RAM40H11H10H34H××SP30H34H34H××××執(zhí)行前執(zhí)行前執(zhí)行PUSH指令后執(zhí)行POP指令后圖4-7指令PUSH操作示意圖圖4-8指令POP操作示意圖【例4.1】將片內(nèi)RAM30H單元與40H單元中的內(nèi)容互換。方法1(直接地址傳送法):

MOV 31H,30HMOV 30H,40HMOV 40H,31HSJMP $方法2(間接地址傳送法):

MOV R0,#40HMOV R1,#30HMOV A,@R0MOV B,@R1MOV @R1,AMOV @R0,BSJMP $方法3字節(jié)交換傳送法):

MOV A,30HXCH A,40HMOV 30H,ASJMP $方法4堆棧傳送法:

PUSH 30HPUSH 40HPOP 30HPOP 40HSJMP $返回本節(jié)4.4算術(shù)運(yùn)算類指令 1.加法指令A(yù)DDA,Rn

;A←A+RnADDA,direct ;A←A+(direct)ADDA,@Ri

;A←A+(Ri)ADDA,#data ;A←A+#data加法注意點(diǎn)(1)求和,操作數(shù)直接相加(2)確定Cy時(shí)總是將兩個(gè)操作數(shù)作為無(wú)符號(hào)數(shù),直接相加而得進(jìn)位。(3)確定OV時(shí),總是將操作數(shù)當(dāng)作帶符號(hào)數(shù)*一個(gè)正數(shù)和一個(gè)負(fù)數(shù)相加,不可能溢出*兩個(gè)正數(shù)相加,和為負(fù),溢出,OV=1*兩個(gè)負(fù)數(shù)相加,和為正,溢出,OV=1(4)確定AC和P,3對(duì)4進(jìn)AC=1,“1”奇P=12.帶進(jìn)位加指令A(yù)DDCA,Rn

;A←A+Rn+CADDCA,direct ;A←A+(direct)+CADDCA,@Ri

;A←A+(Ri)+CADDCA,#data ;A←A+#data+CC為來(lái)自PSW狀態(tài)寄存器中的進(jìn)位位C。例如,設(shè)A=20H,R0=21H,C=1,執(zhí)行指令A(yù)DDC

A,R0后,A=?。3.帶借位減指令SUBBA,Rn

;A←A-Rn-CSUBBA,direct ;A←A-(direct)-CSUBBA,@Ri

;A←A-(Ri)-CSUBBA,#data ;A←A-#data–C例如,設(shè)A=39H,R0=20H,(20H)=32H,C=1,執(zhí)行指令

SUBBA,@R0后,A=?。注意點(diǎn):減法前對(duì)Cy清0,CLRC;Cy0判溢出標(biāo)志,按有符號(hào)數(shù)處理。(1)正數(shù)減正數(shù),負(fù)數(shù)減負(fù)數(shù)不可能溢出。(2)正數(shù)-負(fù)數(shù),差為負(fù),OV=1(3)負(fù)數(shù)-正數(shù),差為正,OV=1影響Cy、AC、OV、P4.乘法指令MULAB ;BA←A×BA和B中各存放一個(gè)8位無(wú)符號(hào)數(shù),指令執(zhí)行后,16位乘積的高8位在B中,低8位存A中。例如,A=30H,B=60H,執(zhí)行MULAB后,A=00H,B=12H。

5.除法指令

DIVAB ;A÷B→商在A中,余數(shù)在B中

A和B中各存放一個(gè)8位無(wú)符號(hào)數(shù),A放被除數(shù),B放除數(shù)。指令執(zhí)行后,A中存放商,B中存入余數(shù)。若B=00H,則指令執(zhí)行后OV=1,A與B不變。例如,A=30H,B=07H,執(zhí)行DIVAB后,A=?,B=?。6.加1指令I(lǐng)NCA ;A←A+1INCRn

;Rn←Rn+1INCdirect ;(direct)←(direct)+1INC@Ri

;(Ri)←(Ri)+1INCDPTR ;DPTR←DPTR+1例如,(30H)=22H,執(zhí)行INC30H后,(30H)=23H。不影響標(biāo)志位。7.減1指令DECA ;A←A-1DECRn

;Rn←Rn-1DECdirect ;direct←(direct)-1DEC@Ri

;(Ri)←(Ri)-1例如,R0=30H,(30H)=22H,執(zhí)行DEC@R0后,(30H)=21H。不影響標(biāo)志位。8.十進(jìn)制調(diào)整指令DAA

;把A中按二進(jìn)制相加的結(jié)果調(diào)整成按BCD碼相加的結(jié)果例如,A=65BCD,B=78BCD,C=0,執(zhí)行下列語(yǔ)句ADD A,BDA A后,A=43BCD,C=1。【例4.2】試把存放在R1R2和R3R4中的兩個(gè)16位數(shù)相加,結(jié)果存于R5R6中。解:參考程序如下:

MOV A,R2 ;取第一個(gè)數(shù)的低8位

ADD A,R4 ;兩數(shù)的低8位相加

MOV R6,A ;保存和的低8位

MOV A,R1 ;取第一個(gè)數(shù)的高8位

ADDC A,R3

;兩數(shù)的高8位相加,并把低8位相加時(shí)的進(jìn)位位加進(jìn)來(lái)

MOV R5,A ;把相加的高8位存入R5寄存器中

SJMP$返回本節(jié)4.5邏輯運(yùn)算及移位指令1.“與”操作指令2.“或”操作指令3.“異或”操作指令4.求反與清除指令5.移位指令邏輯運(yùn)算對(duì)標(biāo)志位沒有影響返回本節(jié)1.“與”操作指令A(yù)NLA,Rn

;按位相與ANLA,@R0ANLA,#dataANLdirect,A;可對(duì)SFR進(jìn)行操作。ANLdirect,#data2.“或”操作指令ORLA,Rn

;按位相與ORLA,@R0ORLA,#dataORLdirect,A;可對(duì)SFR進(jìn)行操作。ORLdirect,#dataORLA,direct例4.6將累加器A的低4位送到P1口的低4位,而P1口的高4位保持不變。MOVR0,AANLA,#0FHANLP1,#0F0HORLP1,AMOVA,R03.“異或”操作指令XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data4.求反與清除指令CLRACPLAXRLdirect,#0FFH5.移位指令RLARLCARRARRLASWAPA4.6轉(zhuǎn)移類指令 1.無(wú)條件轉(zhuǎn)移指令l

絕對(duì)(短)轉(zhuǎn)移指令A(yù)JMP addr11 ;PC10~0←addr11

l

長(zhǎng)轉(zhuǎn)移指令LJMP addr16 ;PC←addr16l

短(相對(duì))轉(zhuǎn)移指令SJMP rel

;PC←PC+2+rell

間接轉(zhuǎn)移指令JMP @A+DPTR ;PC←A+DPTR注意點(diǎn):LJMPaddr16;長(zhǎng)轉(zhuǎn)移,三字節(jié),64KB范圍AJMPaddr11;絕對(duì)轉(zhuǎn)移,二字節(jié),2KB在同一區(qū)域SJMPrel;短轉(zhuǎn)移,二字節(jié)

(PC+2-128)-(PC+2+127)若偏移量為FEH,則目的地址和源地址相同有關(guān)AJMPrel轉(zhuǎn)移范圍的說(shuō)明AJMPrel中指令操作數(shù)雖然是11位地址,但仍是二字節(jié)指令.分布:a10a9a800001a7a6a5a4a3a2a1a000001為指令操作嗎指令執(zhí)行后,首先是PC內(nèi)容加2,而這里的PC是當(dāng)前指令的地址.然后由PC加2后的PC值的高5位和指令中的11位地址構(gòu)成轉(zhuǎn)移地址:PC15-11a10-a0a10-a0的2K地址應(yīng)在同一個(gè)2K區(qū)域.0000H~07FFH0800H~0FFFH1000H~17FFH1800H~1FFFH2000H~27FFH2800H~2FFFH3000H~37FFH3800H~3FFFH4000H~47FFH4800H~4FFFH5000H~57FFH5800H~5FFFH6000H~67FFH6800H~6FFFH7000H~77FFH7800H~7FFFH8000H~87FFH8800H~8FFFH9000H~97FFH9800H~9FFFHA000H~A7FFHA800H~AFFFHB000H~B7FFHB800H~BFFFHC000H~C7FFHC800H~CFFFHD000H~D7FFHD800H~DFFFHE000H~E7FFHE800H~EFFFHF000H~F7FFHF800H~FFFFH表4-1程序存儲(chǔ)器空間32個(gè)2K地址范圍返回本節(jié)2.條件轉(zhuǎn)移指令(1)

累加器判零條件轉(zhuǎn)移指令JZrel;A=0,則PC=PC+2,轉(zhuǎn)移

JNZrel;rel常用標(biāo)號(hào)代替例:將外部數(shù)據(jù)存貯器的一個(gè)數(shù)據(jù)塊傳送到內(nèi)部RAM,兩者的首地址分別是DATA1和DATA2,遇到傳送的數(shù)據(jù)為0時(shí)停止傳送.(2)比較條件轉(zhuǎn)移指令CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel目的操作數(shù)=源操作數(shù)不轉(zhuǎn),繼續(xù)目的操作數(shù)<>源操作數(shù)轉(zhuǎn)移>cy=0<cy=1(3)減1條件轉(zhuǎn)移指令DJNZRn,relDJNZdirect,rel例:將內(nèi)部RAM中從DATA單元開始的10個(gè)無(wú)符號(hào)數(shù)相加,相加結(jié)果送SUM單元.相加結(jié)果不超過(guò)8位二進(jìn)制數(shù).3.子程序調(diào)用及返回指令(1)調(diào)用子程序指令LCALLaddr16;PC←PC+3,SP←SP+1,(SP)←PC7~0;SP←SP+1,(SP)←PC15~8,PC←addr16ACALL

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論