單片機(jī)原理與應(yīng)用 作者 張東亮 8051單片機(jī)指令系統(tǒng)_第1頁
單片機(jī)原理與應(yīng)用 作者 張東亮 8051單片機(jī)指令系統(tǒng)_第2頁
單片機(jī)原理與應(yīng)用 作者 張東亮 8051單片機(jī)指令系統(tǒng)_第3頁
單片機(jī)原理與應(yīng)用 作者 張東亮 8051單片機(jī)指令系統(tǒng)_第4頁
單片機(jī)原理與應(yīng)用 作者 張東亮 8051單片機(jī)指令系統(tǒng)_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章8051單片機(jī)指令系統(tǒng)3.1指令系統(tǒng)概述3.2尋址方式3.3數(shù)據(jù)傳送類指令3.4算術(shù)運算類指令3.5邏輯運算類指令

3.6控制轉(zhuǎn)移類指令3.7布爾運算類指令在線教務(wù)輔導(dǎo)網(wǎng):://教材其余課件及動畫素材請查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187或者直接輸入下面地址:指令和指令系統(tǒng)計算機(jī)通過執(zhí)行程序完成人們指定的任務(wù),程序由一條一條指令構(gòu)成,能為CPU識別并執(zhí)行的指令的集合就是該CPU的指令系統(tǒng)。助記符指令格式8051單片機(jī)匯編語言指令格式:

操作碼目的操作數(shù),源操作數(shù)操作碼指明該指令完成什么操作;操作數(shù)是指明該指令的操作對象。目的操作數(shù)是存放結(jié)果的。3.1指令系統(tǒng)概述操作碼70數(shù)據(jù)或?qū)ぶ贩绞?0雙字節(jié)指令:標(biāo)號:操作碼操作數(shù)或操作數(shù)地址;注釋單字節(jié)指令:操作碼70三字節(jié)指令:操作碼70數(shù)據(jù)或?qū)ぶ贩绞?0數(shù)據(jù)或?qū)ぶ贩绞?0指令按字節(jié)長度可以分為三種:指令的格式:例如:MOVA,R0機(jī)器碼:E8H例如:MOVA,30H機(jī)器碼:E530H例如:MOVDPTR,#2021H機(jī)器碼:902021H指令分類數(shù)據(jù)傳送指令〔29條〕

算術(shù)運算指令〔24條〕邏輯運算和移位指令〔24條〕位操作指令〔17條〕控制轉(zhuǎn)移指令〔17條〕共111條指令中操作數(shù)提供的方式稱為尋址方式。3.2尋址方式指令符號約定符號含義Rn表示當(dāng)前選定寄存器組的工作寄存器R0~R7,Rn=0~7Ri表示作為間接尋址的地址指針R0~R1,i=0,1#data表示8位立即數(shù),即00H~FFH#data16表示16位立即數(shù),即0000H~FFFFHaddr16表示16位地址,用于64KB范圍內(nèi)尋址addr11表示11位地址,用于2KB范圍內(nèi)尋址direct8位直接地址,可以是內(nèi)部RAM區(qū)的某一單元或某一專用功能寄存器的地址rel帶符號的8位偏移量(-128~+127)bit位尋址區(qū)的直接尋址位(X)X地址單元中的內(nèi)容,或X作為間接尋址寄存器時所指單元的內(nèi)容←將←后面的內(nèi)容傳送到前面去8051的尋址方式(8種)立即尋址存放器尋址直接尋址間接尋址變址尋址相對尋址位尋址隱含尋址1.立即尋址 指令中直接給出操作數(shù)的尋址方式。在指令系統(tǒng)中,立即數(shù)用一個前面加“#〞號的8位數(shù)(#data,如#52H)或16位數(shù)(#data16,如#2052H)表示。立即尋址中的數(shù),稱為立即數(shù)。例如指令:MOVA,#52H;比照MOVA,52HMOVDPTR,#2052H2.存放器尋址 操作數(shù)存放在存放器中。尋址對象:A,B,DPTR,R0~R7。B僅在乘除法指令中為存放器尋址,在其他指令中為直接尋址。A可以存放器尋址又可以直接尋址,直接尋址時寫作ACC。 例如:MOVA,R0;R0→A,A、R0均為寄存器尋址,機(jī)器碼E8MULAB;A×B→BA,A、B為寄存器尋址,機(jī)器碼A43.直接尋址:操作數(shù)的地址直接出現(xiàn)在指令中。 尋址對象:①內(nèi)部數(shù)據(jù)存貯器:使用它的地址②特殊功能存放器:既可使用它的地址,也可以直接使用存放器名。41H 78H40H 56H41H 78H40H 78H例:MOVA,40H;A=56H機(jī)器碼E540H

MOVP0,#45H;45H→P0,P0為直接尋址的SFR,其地址為80H,機(jī)器碼為758045HMOV40H,41H;機(jī)器碼為854140H內(nèi)部RAM〔41H〕→〔40H〕〔40H〕=〔41H〕=78H4.存放器間接尋址 操作數(shù)存放在以存放器內(nèi)容(R0,R1,DPTR,SP)為地址的單元中。例如:MOVR0,#20HMOV@R0,A ;A→(20H)地址的內(nèi)部RAMMOVXA,@R1 ;外部RAM〔地址為P2R1〕的內(nèi)容→AMOVX@DPTR,A ;A→以DPTR內(nèi)容為地址的外部RAM5.變址尋址 以DPTR或PC存放器內(nèi)容為基地址,與A的內(nèi)容相加形成操作數(shù)的地址。其中累加器A內(nèi)容可變。 例如:MOVCA,@A+DPTR ;A←〔A+DPTR〕 MOVCA,@A+PC ;A←〔A+PC)設(shè)A=22H,DPTR=63A0H,(63C2H)=38H,那么結(jié)果A=22H程序存儲器63A0HDPTR38H(22H)A63C2H38H22H63A0H 例如:SJMP38H ;PC=PC+2+38H=186CH程序存儲器(1832H)186CH80HSJMP186CH38H1832H+238HPC1832H1834H6.相對尋址 相對尋址是將程序計數(shù)器PC的當(dāng)前值與指令第二字節(jié)給出的補碼偏移量(-128~+127)相加,從而形成轉(zhuǎn)移的目標(biāo)地址。7.位尋址對片內(nèi)RAM中20H~2FH中的128個位地址及SFR中的可位尋址的位地址尋址。 例如:MOVC,20H;20H位即24H.0的內(nèi)容送CY標(biāo)志位,C稱為位累加器。MOVA,20H;字節(jié)尋址,將內(nèi)部RAM中20H單以上兩條指令均為直接尋址,究竟是位尋址還是字節(jié)尋址,根據(jù)兩操作數(shù)類型一致的原那么,由另一個操作數(shù)決定。例如,MOVACC.7,C 單元地址2FH2EH2DH2CH2BH2AH29H28H

26H25H24H23H22H21H20H7F776F675F574F47372F271F170F07

MSB

位地址

LSB7E766E665E564E46

362E261E160E067D756D655D554D45352D251D150D057C746C645C544C44

342C241C140C047B736B635B534B43

332B231B130B037A726A625A524A42

322A221A120A027971696159514941

312921191109017870686058504840

30282018100800位尋址地址表3D

3C

3B3F

3E3A

393827H8.隱含尋址執(zhí)行指令的所有信息均在操作碼中,此時操作數(shù)是某個存放器的內(nèi)容,而存放器名隱含在操作碼中。隱含尋址方式的指令一般為單字節(jié)指令。例如:指令助記符CLRA;功能是將累加器A清零。機(jī)器指令碼為E4H。操作數(shù)尋址方式及有關(guān)尋址空間表尋址方式尋址空間立即尋址程序存儲器ROM直接尋址片內(nèi)RAM低128字節(jié)(包括位尋址空間)、專用寄存器寄存器尋址工作寄存器R0~R7,A、B、C、DPTR寄存器間接尋址片內(nèi)RAM(用R0、R1、SP(僅對PUSH、POP指令));片外RAM(用R0、R1、DPTR)變址程序存儲器(@A+PC、@A+DPTR)相對尋址程序存儲器256字節(jié)范圍(偏移量:-128~127)位尋址片內(nèi)RAM的20H~2FH字節(jié)地址和地址被8整除的特殊功能寄存器SFR(位地址空間)隱含尋址寄存器A、B、C、DPTR傳送類指令占有較大的比重。數(shù)據(jù)傳送(DataTransfer)是進(jìn)行數(shù)據(jù)處理的最根本的操作,這類指令一般不影響標(biāo)志存放器PSW的狀態(tài)。傳送類指令可以分成兩大類。一是采用MOV操作符,稱為一般傳送指令;二是采用非MOV操作符,稱為特殊傳送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。

3.3數(shù)據(jù)傳送類指令CY:進(jìn)位標(biāo)志。反映最高位的進(jìn)位借位,加法為進(jìn)位、減法為借位。CY又作為位操作累加器C。CY=1,有進(jìn)位,否那么無進(jìn)位。AC:輔助進(jìn)位標(biāo)志。反映高半字節(jié)與低半字節(jié)之間的進(jìn)/借位,AC=1有進(jìn)位;AC=0無進(jìn)位。AC主要用于BCD碼調(diào)整。FO:用戶標(biāo)志位。可由用戶設(shè)定其含義。RS1、RS0:工作存放器組選擇位。(RegisterSelection)取00,01,10,11分別表示0~3組(區(qū):bank)工作存放器OV:溢出標(biāo)志。反映補碼運算的運算結(jié)果有無溢出。有溢出,OV=1,無溢出OV=0。-:保存位。P:奇偶標(biāo)志(Parity)。運算結(jié)果存放器A中有奇數(shù)個“1〞,P=1;有偶數(shù)個“1〞,P=0。D7D6D5D4D3D2D1D0CYACF0RS1RS0OV

-P程序狀態(tài)字PSW這類指令有29條。普通傳送指令可以分為片內(nèi)RAM數(shù)據(jù)傳送、片外RAM數(shù)據(jù)傳送、程序存儲器數(shù)據(jù)傳送等類型。內(nèi)部RAM、SFR數(shù)據(jù)傳送指令以A為目的操作數(shù)MOVA,Rn ;A←RnMOVA,direct ;A←〔direct〕MOVA,@Ri ;A←〔Ri〕MOVA,#data ;A←#dataMOVA,Rn

#datadirect

@Ri以Rn為目的操作數(shù)MOVRn,A ;Rn←AMOVRn,direct ;Rn←〔direct〕MOVRn,#data ;Rn←#data以間接地址為目的操作數(shù)MOV@Ri,A ;〔Ri〕←AMOV@Ri,direct ;〔Ri〕←〔direct〕MOV@Ri,#data ;〔Ri〕←#data直接地址為目的操作數(shù)MOVdirect,A ;〔direct〕←AMOVdirect1,direct2 ;(direct1)←〔direct2〕MOVdirect,#data ;〔direct〕←#dataMOVdirect,@Ri ;〔direct〕←(Ri)例如,MOVP1,R2 ;R2內(nèi)容送P1口MOV90H,R2;R2內(nèi)容送P1口,90H為P1地址MOVR5,60H;R5←(60H)direct

@RiRn#dataAMOV@Ri,Adirect

#dataMOVdirect,ARn@Ri

#data

directMOVRn,Adirect#dataMOVA,Rn

#datadirect

@Ri8051單片機(jī)片內(nèi)數(shù)據(jù)傳送圖16位立即數(shù)傳送指令:MOVDPTR,#data16這條指令的功能是將源操作數(shù)data16〔通常是地址常數(shù)〕送入目的操作數(shù)DPTR中。源操作數(shù)的尋址方式為立即尋址。例如:執(zhí)行指令MOVDPTR,#1234H后,DPTR=#1234H,DPH=12H,DPL=34H。A外部數(shù)據(jù)存儲器

@Ri,A@DPTR,AA,@RiA,@DPTRMOVX3.3.2外部RAM和A之間的數(shù)據(jù)傳送MOVXMOVX的“X〞表示外部〔EXternal〕RAM的意思。Ri是8位地址指針,尋址范圍為256字節(jié)。DPTR是16位地址指針,尋址范圍為64K字節(jié)。由于片外I/O與片外RAM統(tǒng)一編址,所以片外I/O的讀寫也用MOVX指令。用到的控制信號為/RD或/WR。MOVXA,@DPTR ;A←〔DPTR〕MOVX@DPTR,A ;〔DPTR〕←AMOVXA,@Ri ;A←〔P2Ri〕MOVX@Ri,A ;〔P2Ri〕←A3.3.3程序存儲器的數(shù)據(jù)傳送A程序存儲器MOVCA,@A+PCA,@A+DPTRMOVCMOVC為查表指令,用于讀取程序存儲器中的常數(shù)(Constant)。MOVCA,@A+DPTR ;A←〔A+DPTR〕MOVCA,@A+PC ;A←〔A+PC〕例如,用查表的方法,將A中的16進(jìn)制數(shù)〔0~F)轉(zhuǎn)換為ASCII碼,并送回A。指令地址 源程序 ORG4000H ;程序起始地址4000HCHTAB: INC A ;A=0~9,A~F 4001H MOVCA,@A+PC ;查表A=30~39,41~46;MOVDPTR,#TAB,MOVCA,@A+DPTR4002H RET ;子程序結(jié)束 4003HTAB: DB30H,31H,32H,33H…,39H ;0~9的ASCII碼400DH DB41H,…,46H ;A~F的ASCII碼假設(shè)A=3,那么查表得3的ASCII碼A=33H3.3.4堆棧操作指令子程序與中斷效勞子程序調(diào)用、現(xiàn)場保護(hù)要用到堆棧。堆棧是在內(nèi)部RAM中按“后進(jìn)先出〞的規(guī)那么組織的一片存儲區(qū)。此區(qū)的一端固定,稱為棧底;另一端是活動的,稱為棧頂。棧頂?shù)奈恢糜蓷V羔楽P指示(即SP的內(nèi)容是棧頂?shù)牡刂?。在8051中,堆棧的生長方向是向上的〔地址增大〕。系統(tǒng)復(fù)位時,SP的內(nèi)容為07H。通常用戶應(yīng)在系統(tǒng)初始化時對SP重新設(shè)置。SP的值越小,堆棧的深度越深。PUSHdirect;SP←SP+1,〔SP〕←〔direct〕POPdirect;(direct)←〔SP〕,SP←SP-1例如:MOV SP,#3FH ;SP=#3FH MOV A,#51H ;A=51H PUSHACC ;壓入堆棧SP=40H,(40H)=51H POP 28H ;彈出堆棧(28H)=51H,SP=3FH例如:MOV SP,#30H ;SP=30HPUSH 50H ;SP←SP+1=31H,(31H)←(50H)POP 40H ;(40H)←(31H),SP←SP-1=30H堆棧操作例如3.3.5數(shù)據(jù)交換指令例如:假設(shè)R0=80H,A=20H。執(zhí)行指令XCHA,R0后,A=80H,R0=20H。對于單一的MOV類指令,傳送通常是單向的,即數(shù)據(jù)是從一處〔源〕到另一處〔目的〕的拷貝。而交換類指令完成的傳送是雙向的,是兩字節(jié)間或兩半字節(jié)間的雙向交換。

1.字節(jié)交換XCHA,Rn ;A<=>Rnn=0~7direct ;A<=>(direct)@Ri ;A<=>(Ri)i=0,1XCHA,Rn ;A<=>Rn,n=0~7exchangeXCHA,direct ;A<=>〔direct〕XCHA,@Ri ;A<=>〔Ri〕,i=0,12.半字節(jié)交換

XCHD指令的功能是間址操作數(shù)的低半字節(jié)與A的低半字節(jié)內(nèi)容互換(Exchangedecimal)。SWAP指令的功能是累加器的上下4位互換。例如:假設(shè)R0=30H,〔30H〕=67H,A=20H。執(zhí)行指令XCHDA,@R0指令后,A=27H,〔30H〕=60H。假設(shè)A=30H,執(zhí)行指令SWAPA后,A=03H。XCHDA,@Ri ;Decimal,A0~3<=>(Ri)0~3SWAPA ;A0~3<=>A4~7數(shù)據(jù)傳送指令〔29條〕

算術(shù)運算指令可以完成加、減、乘、除及加1和減1等運算。這類指令多數(shù)以A為源操作數(shù)之一,同時又使A為目的操作數(shù)。

進(jìn)位標(biāo)志CY為無符號整數(shù)的多字節(jié)加法、減法、移位等操作提供了方便;溢出標(biāo)志OV可方便地控制補碼運算;輔助進(jìn)位標(biāo)志AC用于BCD碼運算。算術(shù)運算操作將影響PSW中的OV、CY、AC和P等標(biāo)志。

3.4算術(shù)運算類指令

3.4.1加法指令不帶進(jìn)位加帶進(jìn)位加

ADDA,Rn ;A←A+RnADDA,direct ;A←A+〔direct〕ADDA,@Ri ;A←A+〔Ri〕ADDA,#data ;A←A+#dataADDCA,Rn ;A←A+Rn+CADDCA,direct ;A←A+〔direct〕+CADDCA,@Ri ;A←A+〔Ri〕+CADDCA,#data ;A←A+#data+CCY:和的D7位有進(jìn)位時,CY=1;否那么,CY=0。AC:和的D3位有進(jìn)位時,AC=1;否那么,AC=0。OV:和的D7、D6位只有一個有進(jìn)位時,OV=1。溢出表示運算的結(jié)果超出了數(shù)值所允許的范圍。如:兩個正數(shù)相加結(jié)果為負(fù)數(shù)或兩個負(fù)數(shù)相加結(jié)果為正數(shù)時屬于錯誤結(jié)果,此時OV=1。P:累加器ACC中“1〞的個數(shù)為奇數(shù)時,P=1;為偶數(shù)時,P=0。例如 MOVA,#87H ;A=87H(-121) ADDA,#99H ;A=87H+99H(-103)

1000011187H

+1001100199H10010000020H

那么A=20H,CY=1,AC=1,OV=1,P=1。例如,多字節(jié)數(shù)相加。被加數(shù)與和在內(nèi)部RAM20~22H單元,加數(shù)在2A~2CH單元,低位在前。程序如下: MOV R0,#20H ; MOV R1,#2AH ; MOV R7,#03H ; CLRCLOOP: MOVA,@R0 ADDCA,@R1 ;兩數(shù)的8位相加 MOV@R0,A INCR0 ;R0+1 INCR1 DJNZR7,LOOP ;循環(huán) CLRA ADDCA,#00 ;處理進(jìn)位 MOV@R0,A ;存進(jìn)位(22H)(21H)(20H)+(2CH)(2BH)(2AH)(22H)(21H)(20H)3.4.2減法指令帶借位減指令(Subtractwithborrow)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=06H。3.4.3加1指令(Increment)INCA ;A←A+1INCRn ;Rn←Rn+1INCdirect ;(direct)←〔direct〕+1INC@Ri ;(Ri)←(Ri)+1INCDPTR ;DPTR←DPTR+1例如,〔30H〕=22H,執(zhí)行INC30H后,〔30H〕=23H。3.4.4減1指令(Decrement)DECA ;A←A-1DECRn ;Rn←Rn-1DECdirect ;(direct)←(direct)-1DEC@Ri ;(Ri)←〔Ri〕-13.4.5十進(jìn)制調(diào)整指令DAA(DecimalAdjust)計算機(jī)完成二進(jìn)制加法其和也為二進(jìn)制,如果是十進(jìn)制相加〔即BCD碼相加〕想得到十進(jìn)制的結(jié)果,就必須進(jìn)行十進(jìn)制調(diào)整〔即BCD碼調(diào)整〕。調(diào)整指令:DAA;將A中二進(jìn)制相加和調(diào)整成BCD碼調(diào)整方法:和低4位大于9或有半進(jìn)位那么低4位加6;和的高4位大于9或有進(jìn)位,那么高4位加6。指令根據(jù)相加和及標(biāo)志自行進(jìn)行判斷,因此該指令應(yīng)緊跟在加指令之后,至少在加指令和該指令之間不能有影響標(biāo)志的指令。DAA指令只對一個字節(jié)和調(diào)整,如為多字節(jié)相加必須進(jìn)行屢次調(diào)整。此指令不能對減法結(jié)果進(jìn)行調(diào)整。例如,完成十進(jìn)制運算56+17的編程。MOVA,#56H;A存放BCD碼56HMOVB,#17H;B存放BCD碼17HADDA,B;A=6DHDAA;A=73HSJMP$56H17H6DH673H++3.4.6乘除法指令乘法指令(Multiply)MULAB ;BA←A×BA和B中各存放一個8位無符號數(shù),指令執(zhí)行后,16位乘積的高8位在B中,低8位存A中。假設(shè)結(jié)果B=00H,那么指令執(zhí)行后OV=0,否那么為1??傆蠧=0。例如,A=30H,B=60H,執(zhí)行MULAB后,A=00H,B=12H。30H(48)*60H(96)=1200H(4608)除法指令(Division)DIVAB ;A÷B→商在A中,余數(shù)在B中A和B中各存放一個8位無符號數(shù),A放被除數(shù),B放除數(shù)。指令執(zhí)行后,A中存放商,B中存入余數(shù)。假設(shè)B=00H,那么指令執(zhí)行后OV=1,A與B不變。算術(shù)運算指令(24條)3.5.1與操作指令3.5.2或操作指令3.5.3異或操作指令3.5.4求反與清0指令3.5.5循環(huán)移位指令3.5邏輯運算類指令

3.5.1邏輯與指令(AndLogical) ANLA,Rn ;A∧Rn→A,n=0~7 ANLA,direct ;A∧〔direct〕→A ANLA,#data ;A∧#data→AANLA,@Ri ;A∧〔Ri〕→A,i=0~1 ANLdirect,A ;(direct)∧A→(direct) ANLdirect,#data ;(direct)∧#data→(direct) 例如,〔A〕=07H,〔R0〕=0FDH,執(zhí)行指令: ANL A,R0結(jié)果:〔A〕=05H 00000111 ∧11111101 000001013.5.2邏輯或指令(ORLogical)

ORLA,Rn ;A∨Rn→A,n=0~7 ORLA,direct ;A∨(direct)→A ORLA,#data ;A∨data→A ORLA,@Ri ;A∨(Ri)→A,i=0,1 ORLdirect,A ;(direct)∨A→(direct) ORLdirect,#data ;(direct)∨#data→(direct)

例如,P1=05H,A=33H,執(zhí)行指令ORLP1,A 結(jié)果:P1=37H 00000101

∨ 00110011 001101113.5.3邏輯異或指令(ExclusiveORLogical) XRLA,Rn;A⊕Rn→A XRLA,direct;A⊕〔direct〕→A XRLA,@Ri;A⊕(Ri)→A,i=0,1 XRLA,#data;A⊕#data→A XRLdirect,A;(direct)⊕A→(direct) XRLdirect,#data ;(direct)⊕#data→(direct)3.5.4累加器A清0與取反指令(1)CLRA ;Clear功能是累加器A清“0〞。不影響CY、AC、OV等標(biāo)志。(2)CPLA ;Complement功能是將累加器A的內(nèi)容按位邏輯取反,不影響標(biāo)志。3.5.5移位指令

1.循環(huán)左移指令(RotateLeft) RLA功能是累加器A的8位向左循環(huán)移位,位7循環(huán)移入位0,不影響標(biāo)志。

2.帶進(jìn)位循環(huán)左移指令(RotateLeftwithcarry) RLCA功能是將累加器A的內(nèi)容和進(jìn)位標(biāo)志位Cy一起向左環(huán)移一位,ACC.7移入進(jìn)位位Cy,Cy移入ACC.0,不影響其它標(biāo)志。3.循環(huán)右移指令 RRA功能是累加器A的內(nèi)容向右環(huán)移一位,ACC.0移入ACC.7,不影響其它標(biāo)志。4.帶進(jìn)位循環(huán)右移指令

RRCA這條指令的功能是累加器A的內(nèi)容和進(jìn)位標(biāo)志Cy一起向右環(huán)移一位,ACC.0進(jìn)入CY,CY移入ACC.7。帶進(jìn)位循環(huán)左移RLCA例如,假設(shè)(A)=0A6H,(CY)=0;那么在執(zhí)行指令“RLCA〞后(A)=__4CH_,(CY)=__1___執(zhí)行前:CY←D7D6D5D4D3D2D1D0010100110101001100執(zhí)行后:邏輯運算與循環(huán)類指令〔24條〕3.6.1無條件轉(zhuǎn)移指令(1)長轉(zhuǎn)移指令(LongJump)LJMP addr16 ;PC←addr16執(zhí)行時把指令的第二和第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無條件地轉(zhuǎn)向addr16指出的目標(biāo)地址。目標(biāo)地址可以在64KB程序存儲器地址空間的任何位置。(2)絕對轉(zhuǎn)移指令(AbsoluteJump)AJMP addr11 ;PC10~0←addr112K字節(jié)范圍內(nèi)的無條件跳轉(zhuǎn)指令。轉(zhuǎn)移的目標(biāo)地址必須與AJMP下一條指令的地址的高5位地址碼A15~A11相同。執(zhí)行指令時,先將PC加2,然后把addr11(a10~a0)送入PC.10~PC.0,PC.15~PC.11保持不變,程序轉(zhuǎn)移到目標(biāo)地址。機(jī)器碼:a10a9a800001a7~a03.6控制轉(zhuǎn)移類指令

(3)短(相對)轉(zhuǎn)移指令(ShortJump)SJMP rel ;PC←PC+2+rel(相對偏移量)實現(xiàn)程序相對轉(zhuǎn)移。在編寫程序時,直接寫上要轉(zhuǎn)向的目標(biāo)地址標(biāo)號就可以。例如:LOOP: MOVA,R6

SJMPLOOP 程序在匯編時,由匯編程序自動計算和填入偏移量。手工匯編時,偏移量rel(-128~127)的值那么需程序設(shè)計人員計算。(4)間接轉(zhuǎn)移指令(Jump)JMP @A+DPTR ;PC←A+DPTR由A中8位無符號數(shù)與DPTR的16位數(shù)內(nèi)容之和來確定。以DPTR內(nèi)容作為基址,A的內(nèi)容作變址量。給A賦予不同的值,即可實現(xiàn)程序的多分支轉(zhuǎn)移。3.6.2條件轉(zhuǎn)移指令規(guī)定的條件滿足,那么進(jìn)行轉(zhuǎn)移,條件不滿足那么順序執(zhí)行下一條指令。當(dāng)條件滿足時,把PC裝入下一條指令的第一個字節(jié)地址,再把帶符號的相對偏移量rel加到PC上,計算出目標(biāo)地址。累加器為零〔非零〕轉(zhuǎn)移指令比較不等轉(zhuǎn)移指令減1非零轉(zhuǎn)移指令累加器為判0轉(zhuǎn)移指令 JZrel ;如果累加器為“0〞,那么轉(zhuǎn)移 JNZrel ;如果累加器非“0〞,那么轉(zhuǎn)移比較不相等轉(zhuǎn)移指令 CJNEA,direct,rel CJNEA,#data,rel CJNERn,#data,rel CJNE@Ri,#data,rel比較前面兩個操作數(shù)的大小,如果它們的值不相等那么轉(zhuǎn)移。如果第一操作數(shù)〔無符號整數(shù)〕小于第二操作數(shù)〔無符號整數(shù)〕,那么置進(jìn)位標(biāo)志位CY,否那么清“0〞CY。減1不為0轉(zhuǎn)移指令這是一組把減1與條件轉(zhuǎn)移兩種功能結(jié)合在一起的指令。共兩條指令: DJNZRn,rel ;n=0~7 DJNZdirect,rel將源操作數(shù)〔Rn或direct〕減1,結(jié)果回送到Rn存放器或direct中去。如果結(jié)果不為0那么轉(zhuǎn)移。允許程序員把存放器Rn或內(nèi)部RAM的direct單元用作程序循環(huán)計數(shù)器。主要用于控制程序循環(huán)。以減1后是否為“0〞作為轉(zhuǎn)移條件,即可實現(xiàn)按次數(shù)控制循環(huán)。例如,把20H開始的內(nèi)部RAM單元中的數(shù)據(jù)傳送到40H開始的內(nèi)部RAM單元中,數(shù)據(jù)個數(shù)在內(nèi)部RAM35H單元中。子程序如下:

MOV R0,#20H ;源數(shù)據(jù)區(qū)首地址 MOV R1,#40H ;目的數(shù)據(jù)區(qū)首地址

LOOP:MOVA,@R0 ;循環(huán)體 MOV@R1,A INC R0 ;修改地指針 INC R1 DJNZ35H,LOOP ;循環(huán)控制 RET3.6.3間接轉(zhuǎn)移指令(Jump)JMP @A+DPTR ;PC←A+DPTR由A中8位無符號數(shù)與DPTR的16位數(shù)內(nèi)容之和來確定。以DPTR內(nèi)容作為基址,A的內(nèi)容作變址量。給A賦予不同的值,即可實現(xiàn)程序的多分支轉(zhuǎn)移。例,設(shè)計一散轉(zhuǎn)程序,可實現(xiàn)當(dāng)DATA=0、2、4時分別轉(zhuǎn)移到100H,200H、300H處。

MOV A,#DATA MOV DPTR,#TABLE JMP @A+DPTRTABLE: AJMP100H ;TABLE為符號地址 AJMP200H AJMP300H3.6.4調(diào)用子程序及返回指令1.子程序的概念為了實現(xiàn)主程序?qū)ψ映绦虻恼{(diào)用,必須有子程序調(diào)用指令和子程序返回指令。子程序調(diào)用指令在主程序中使用,而子程序返回指令那么是子程序的最后一條指令。調(diào)用與返回指令是成對使用的。子程序調(diào)用指令的功能:必須具有自動把程序計數(shù)器PC中的斷點地址保護(hù)到堆棧中,且將子程序入口地址自動送入程序計數(shù)器PC中的功能。子程序返回主程序調(diào)用斷點子程序返回指令的功能:必須具有自動把堆棧中的斷點地址恢復(fù)到程序計數(shù)器PC中的功能。(2)長調(diào)用指令(LongCall)LCALLaddr16;PC←PC+3,SP←SP+1,〔SP〕←PC7~10;SP←SP+1,〔SP〕←PC15~8,PC←addr162.調(diào)用子程序指令(1)絕對調(diào)用指令(AbsoluteCall)ACALLaddr11 ;與AJMP指令相

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論