單片機(jī)原理與應(yīng)用:第二章 匯編語言和匯編程序_第1頁
單片機(jī)原理與應(yīng)用:第二章 匯編語言和匯編程序_第2頁
單片機(jī)原理與應(yīng)用:第二章 匯編語言和匯編程序_第3頁
單片機(jī)原理與應(yīng)用:第二章 匯編語言和匯編程序_第4頁
單片機(jī)原理與應(yīng)用:第二章 匯編語言和匯編程序_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單片機(jī)原理及應(yīng)用二. 匯編語言和匯編程序指令的尋址方式1常用指令2偽指令3指令的時(shí)序4第二章 匯編語言和匯編程序常用符號Rn:工作寄存器中的寄存器R0、R1R7之一;Ri:工作寄存器中的寄存器R0或R1;#data:8位立即數(shù);#data16:16位立即數(shù);direct:片內(nèi)RAM或SFR的地址(8位);:寄存器間接尋址;Bit:片內(nèi)RAM或SFR的位地址;addr11:11位目的地址;addr16:16位目的地址;rel: 8位地址偏移量,偏移范圍為-128127;/:該位求反后參與操作,不影響該位;(X):地址單元中的內(nèi)容:箭頭左邊的內(nèi)容送入箭頭右邊的單元內(nèi)第二章 匯編語言和匯編程序符號指

2、令的構(gòu)成操作助記符 目的操作數(shù) 源操作數(shù) 操作助記符,也稱指令助記符。它以符合形式給出該指令進(jìn)行什么操作。 如:數(shù)據(jù)傳送MOV,加ADD,邏輯與ANL。操作數(shù)可以是操作數(shù)本身,可以是寄存器,也可以是操作數(shù)的地址。有0,1,2個(gè)操作數(shù)多種情況一條帶操作數(shù)的指令要指明用什么方式尋找操作數(shù),尋找操作數(shù)的方式稱為尋址方式。第二章 匯編語言和匯編程序2.1 指令的尋址方式立即尋址直接尋址寄存器尋址寄存器間接尋址變址尋址相對尋址位尋址第二章 匯編語言和匯編程序2.1.1 立即尋址指令中直接給出操作數(shù)的尋址方式,在操作碼之后,稱為立即數(shù),用#表示。如:MOV A, #80HMOV R7, #0F5HMOV

3、DPTR,#1245H操作數(shù)存在程序存儲器中第二章 匯編語言和匯編程序2.1.2 直接尋址直接使用數(shù)所在單元的地址找到了操作數(shù),所以稱這種方法為直接尋址。操作數(shù)在SFR、內(nèi)部RAM(即操作數(shù)據(jù)在內(nèi)部數(shù)據(jù)存儲器或特殊功能寄存器中)空間。如: MOV A,00H MOV A,0F0H MOV PSW,#08H第二章 匯編語言和匯編程序2.1.3 寄存器尋址對選定的工作寄存器R0R7、累加器A、通用寄存器B、進(jìn)位位C、地址寄存器DPTR中的數(shù)進(jìn)行操作。 例:MOV A,R0;將R0工作寄存器中的數(shù)據(jù)送到累加器A中去。第二章 匯編語言和匯編程序2.1.3 寄存器尋址問題:我們知道,工作寄存器就是內(nèi)存單

4、元的一部分,如果我們選擇工作寄存器組0,則R0就是RAM的00H單元,那么這樣一來,MOV A,00H 和 MOV A,R0不就沒什么區(qū)別了嗎?的確,這兩條指令執(zhí)行的結(jié)果是完全相同的,都是將00H單元中的內(nèi)容送到A中去,但是執(zhí)行的過程不同,執(zhí)行第一條指令需要2個(gè)機(jī)器周期,而第二條則只需要1個(gè)機(jī)器周期,第一條指令變成最終的目標(biāo)碼要兩個(gè)字節(jié)(E5H 00H),而第二條則只要一個(gè)字節(jié)(E8H)就可以了。第二章 匯編語言和匯編程序2.1.4 寄存器間接尋址把地址放在另外一個(gè)寄存器中,根據(jù)這個(gè)寄存器中的數(shù)值決定該到哪個(gè)單元中取數(shù)據(jù)。 R0,R18位地址,片內(nèi)RAM或片外DPTR16位,片外64KB如:M

5、OV A, R0MOVX A, R0MOVX A, DPTR操作數(shù)在片內(nèi)RAM中操作數(shù)在片外RAM中操作數(shù)在片外RAM中第二章 匯編語言和匯編程序2.1.5 變址尋址以DPTR或PC為基址寄存器,累加器A為變址寄存器。把兩者內(nèi)容相加,結(jié)果作為操作數(shù)的地址。常用于查表操作。MOVC A,A+DPTR ;(A+DPTR)A MOVC A,A+PC;PC+1PC,(A+PC)A第二章 匯編語言和匯編程序2.1.6 相對尋址將PC中的當(dāng)前內(nèi)容與指令第二字節(jié)給出的數(shù)相加,結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(轉(zhuǎn)移目的地址)。PC中的當(dāng)前內(nèi)容稱為基地址(本指令后的字節(jié)地址)指令第二字節(jié)給出的數(shù)據(jù)稱為偏移量,1字節(jié)帶

6、符號數(shù)。 常用于跳轉(zhuǎn)指令。如: JC REL 若C=0,不跳轉(zhuǎn); C=1,跳轉(zhuǎn).第二章 匯編語言和匯編程序2.1.6 相對尋址4023304745 10001001100210251026如:指令JC REL設(shè)REL=23H指令代碼程序存儲器當(dāng)前PC第二章 匯編語言和匯編程序2.1.7 位尋址對片內(nèi)RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器進(jìn)行位操作時(shí)的尋址方式。如:SETB 3DH; 將27H.5位置1CLR C ; Cy位清0第二章 匯編語言和匯編程序2.1.8 小節(jié)尋址方式尋址空間(操作數(shù)存放空間)立即尋址程序存儲器直接尋址片內(nèi)RAM、SFR寄存器尋址工作寄存器R0R7,A,B,DP

7、TR,C寄存器間接尋址片內(nèi)RAM:R0,R1,SP片外RAM:R0 ,R1,DPTR變址尋址程序存儲器:A+PC,A+DPTR相對尋址程序存儲器256字節(jié)范圍內(nèi):PC+偏移量位尋址片內(nèi)RAM的位尋址區(qū)(20H2FH字節(jié)地址)某些可位尋址的SFR第二章 匯編語言和匯編程序二. 匯編語言和匯編程序指令的尋址方式1常用指令2偽指令3指令的時(shí)序4第二章 匯編語言和匯編程序2.2 常用指令數(shù)據(jù)傳輸與交換類指令算數(shù)運(yùn)算類指令邏輯運(yùn)算與移位類指令位操作類指令控制轉(zhuǎn)移類指令第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令助記符:MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP

8、 源操作數(shù)尋址方式(5種): 立即尋址、直接尋址、寄存器尋址、 寄存器間接尋址、變址尋址。目的操作數(shù)尋址方式(3種): 直接尋址、寄存器尋址、寄存器間接尋址除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.1 數(shù)據(jù)傳送與交換類指令十六位數(shù)的傳遞指令(1條) MOV DPTR,#data16 8051是一種8位機(jī),這是唯一的一條16位立即數(shù)傳遞指令。功能:將一個(gè)16位的立即數(shù)送入DPTR中去。其中高8位送入DPH,低8位送入DPL。第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令例: MOV DPTR,#1234H執(zhí)行完了之后DPH

9、中的值為12H,DPL中的值為34H。如果我們分別向DPH,DPL送數(shù),則結(jié)果也一樣。如下面兩條指令: MOV DPH,#12H MOV DPL,#34H。則就相當(dāng)于執(zhí)行了 MOV DPTR,#1234H。第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令八位數(shù)的傳遞指令(15條) MOV A, #data MOV A, direct MOV Rn, #data MOV Rn, A MOV direct, #data MOV A, Rn MOV Ri, #data MOV Ri, A MOV direct, direct MOV A, Ri MOV direct, Rn MOV dir

10、ect, Ri MOV Rn, direct MOV Ri, direct MOV direct, A第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令累加器A與片外RAM之間的數(shù)據(jù)傳遞類指令(4條) MOVX A, Ri MOVX Ri, A MOVX A, DPTR MOVX DPTR,A說明: 1. 在51中,與外部存儲器RAM打交道的只可以是A累加器。所有需要送入外部RAM的數(shù)據(jù)必需要通過A送去,而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過A讀入。 在此我們可以看出內(nèi)外部RAM的區(qū)別了,內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行。 比如,要將外部RAM中某一單元(設(shè)為010

11、0H單元的數(shù)據(jù))送入另一個(gè)單元(設(shè)為0200H單元),也必須先將0100H單元中的內(nèi)容讀入A,然后再送到0200H單元中去。第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令2. 要讀或?qū)懲獠康腞AM,當(dāng)然也必須要知道RAM的地址,在后兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。3. 使用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫命令。例:將外部RAM中100H單元中的內(nèi)容送入外部RAM中200H單元中。MOV DPTR,#0100HMOVX A,DPTRMOV DPTR

12、,#0200HMOVX DPTR,A第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令 讀程序存儲器指令(2條) MOVC A,A+DPTR MOVC A,A+PC 本組指令是將ROM中的數(shù)送入A中。本組指令也被稱為查表指令,常用此指令來查一個(gè)已做好在ROM中的表格說明:查找到的結(jié)果被放在A中,因此,本條指令執(zhí)行前后,A中的值不一定相同。第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令例:有一個(gè)數(shù)在R0中,要求用查表的方法確定它的平方值(此數(shù)的取值范圍是0-5)MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR . ORG 0100HDB 0,1,4,

13、9,16,25第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令堆棧操作(2條) PUSH direct ;SPSP+1,(SP)(direct) POP direct ; (direct) (SP), SPSP-1 第一條為壓入指令,就是將direct中的內(nèi)容送入堆棧中,第二條為彈出指令,就是將堆棧中的內(nèi)容送回到direct中。例:MOV SP,#5FHMOV A,#100MOV B,#20PUSH ACCPUSH B第二章 匯編語言和匯編程序2.2.1 數(shù)據(jù)傳送與交換類指令數(shù)據(jù)交換指令(5條) 1. 字節(jié)交換指令XCHXCH A, RnXCH A, directXCH A, Ri

14、2. 半字節(jié)交換指令XCHXCHD A, RiSWAP A 第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令助記符:ADD、ADDC、INC SUBB、DEC、DA 源操作數(shù)尋址方式(4種): 立即尋址、直接尋址、寄存器尋址、 寄存器間接尋址。目的操作數(shù)尋址方式(1種): 寄存器(A)尋址影響PSW有關(guān)標(biāo)志位。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.2 算數(shù)運(yùn)算類指令加法類指令 1. 不帶進(jìn)位位的加法指令A(yù)DD 2. 帶進(jìn)位位的加法指令A(yù)DDC 3. 增量指令I(lǐng)NC第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令不帶進(jìn)位位的加法指令A(yù)DDADD A, #data ; AdataAADD

15、 A, direct ; A(direct )AADD A, Rn ; ARnAADD A, Ri ; A(Ri)A用途:將A中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果 存在A中。第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令帶進(jìn)位位的加法指令A(yù)DDCADDC A, Rn; ARnCYAADDC A, direct; A(direct )CYAADDC A, Ri; A(Ri)CYAADDC A, #data; AdataCYA用途:將A中的值和其后面的值以及進(jìn)位位C中的值相加,最終結(jié)果存在A,常用于多字節(jié)數(shù)運(yùn)算中。說明:由于51單片機(jī)是一種8位機(jī),所以只能做8位的數(shù)學(xué)運(yùn)算,但8位運(yùn)算的范圍

16、只有0FFH,這在實(shí)際工作中是不夠的,因此就要進(jìn)行擴(kuò)展,一般是將2個(gè)8位(兩字節(jié))的數(shù)學(xué)運(yùn)算合起來,成為一個(gè)16位的運(yùn)算,這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到0FFFFH。第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令例如:計(jì)算:1067H+30A0H1067H 0001 0000 0110 0111 30A0H 0011 0000 1010 0000 4107H 0100 0001 0000 0111 先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存在A中的是07H,而1則到了PSW中的CY位了。換言之,CY就相當(dāng)于是100H。然后再做10H + 30H + CY

17、,結(jié)果是41H,所以最終的結(jié)果是4107H。第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令代碼:設(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第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令例如:計(jì)算:1067H+3020H1067H 0001 0000 0110 0111 3020H 0011 0000 0010 0000 4087H 0100 0000 1000 011

18、1 先做67H+20H=87H,而87H沒有超過0FFH,因此最終保存在A中的是87H,PSW中的CY=0。然后再做10H + 30H + CY,結(jié)果是40H,所以最終的結(jié)果是4087H。第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令增量指令I(lǐng)NCINC A; A+1AINC Rn; Rn+1RnINC direct; direct+1directINC Ri; (Ri)+1(Ri)INC DPTR;DPTR+1DPTR用途:將操作數(shù)加1后再送回操作數(shù)。說明:除了操作數(shù)為A的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令減法類指令 1. 帶借

19、位的減法指令SUBB 2. 減量指令DEC第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令帶借位的減法指令SUBBSUBB A, Rn; A-Rn-CYASUBB A, direct; A-(direct)-CYASUBB A, Ri; A-(Ri)-CYASUBB A, #data; A-data-CYA用途:將A中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位C中的值,最終結(jié)果存在A中。說明:1. 沒有不帶借位的減法指令,如果需要做不帶位的減法指令(在做第一次相減時(shí)),只要將CY清零即可。2. 對帶符號數(shù),要注意OV標(biāo)志。OV=1,溢出。第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令減量指令

20、DECDEC A; A-1ADEC Rn; Rn-1RnDEC direct; direct-1directDEC Ri; (Ri)-1(Ri)用途:將操作數(shù)減1后再送回操作數(shù)。說明:1. 除了操作數(shù)為A的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。2. DPTR不能作為減量指令的操作數(shù)第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令十進(jìn)制調(diào)整指令DA 在進(jìn)行BCD碼加法運(yùn)算時(shí),跟在ADD和ADDC指令之后,用于對累加器A中剛進(jìn)行的兩個(gè)BCD碼的加法的結(jié)果進(jìn)行十進(jìn)制調(diào)整。 例:A=0001 0101BCD(代表十進(jìn)制數(shù)15) ADD A,#8; A=1DH,按二進(jìn)制規(guī)律加DA A ; A=23

21、BCD,按十進(jìn)制規(guī)律加第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令BCD數(shù)(十進(jìn)制)加法調(diào)整指令DA A調(diào)整要完成的任務(wù)是:當(dāng)累加器A中的低4位數(shù)出現(xiàn)了非BCD碼(10101111)或低4位產(chǎn)生進(jìn)位( AC=1) ,則應(yīng)在低4位加6調(diào)整,以產(chǎn)生低4位正確的BCD結(jié)果。 當(dāng)累加器A中的高4位數(shù)出現(xiàn)了非BCD碼( 10101111)或高4位產(chǎn)生進(jìn)位( CY=1) ,則應(yīng)在高4位加6調(diào)整,以產(chǎn)生高4位正確的BCD結(jié)果。 十進(jìn)制調(diào)整指令執(zhí)行后,PSW中的CY表示結(jié)果的百位值。注意:調(diào)整指令應(yīng)緊跟在BCD數(shù)作為加數(shù)的加法指令之后。所謂“緊跟”是指在調(diào)整指令與加法指令之間不得有改變CY和AC標(biāo)志位

22、的指令。第二章 匯編語言和匯編程序2.2.2 算數(shù)運(yùn)算類指令例如:若(A)=0101 0110B,表示的BCD碼為56,(R3)=0110 0111B,表示的BCD碼為67,(CY)=0。執(zhí)行以下指令:ADDA,R3DAA由于(A)=0010 0011B,且(CY)=1,即結(jié)果為BCD數(shù)123。注意:DA指令不能對減法進(jìn)行十進(jìn)制調(diào)整。A0101 0110 R30110 0111 1011 1101調(diào)整0110 0110結(jié)果 10010 0011第二章 匯編語言和匯編程序2.2.3 邏輯運(yùn)算及移位類指令助記符:ANL、ORL、XRL、CPL RR、RL、RRC、RLC主要用于對2個(gè)操作數(shù)按位進(jìn)行

23、邏輯操作或?qū)進(jìn)行循環(huán)移位操作,將結(jié)果送到A或直接尋址單元。主要操作與、或、異或、移位、取反、清零等。對標(biāo)志位的影響除了目的操作數(shù)為A的指令影響奇偶標(biāo)志P,CY外,一般不影響標(biāo)志位。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.3 邏輯運(yùn)算及移位類指令邏輯運(yùn)算類指令 1. 邏輯或運(yùn)算指令 2. 邏輯與運(yùn)算指令 3. 邏輯異或運(yùn)算指令 4. 取反指令第二章 匯編語言和匯編程序2.2.3 邏輯運(yùn)算及移位類指令邏輯或指令ORL A, Rn ;ARnAORL A, direct ;A(direct)AORL A, Ri ;A(Ri)AORL A, #data;AdataAORL direct, A;(dir

24、ect)A(direct)ORL direct, #data ;(direct)data(direct)用途:除了操作數(shù)為A的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。說明:后兩條指令,若直接地址為I/O端口,則為“讀-改-寫”操作。第二章 匯編語言和匯編程序2.2.3 邏輯運(yùn)算及移位類指令邏輯與指令A(yù)NL 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)用途

25、:除了操作數(shù)為A的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。說明:后兩條指令,若直接地址為I/O端口,則為“讀-改-寫”操作。第二章 匯編語言和匯編程序2.2.3 邏輯運(yùn)算及移位類指令邏輯異或指令XRL A, Rn ;ARnAXRL A, direct ;A(direct)AXRL A, Ri ;A(Ri)AXRL A, #data ;AdataAXRL direct, A ;(direct)A(direct)XRL direct, #data ;(direct)data(direct)用途:除了操作數(shù)為A的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。說明:后兩條指令,若直接地址為I/O端口,則為“

26、讀-改-寫”操作。第二章 匯編語言和匯編程序2.2.3 邏輯運(yùn)算及移位類指令清零與取反指令CPL A ;AACLR A ;0A說明:清零指令影響奇偶標(biāo)志P,取反指令不影響任何標(biāo)志位。第二章 匯編語言和匯編程序2.2.3 邏輯運(yùn)算及移位類指令循環(huán)移位類指令 1. 循環(huán)右移指令RR 2. 循環(huán)左移指令RL 3. 帶進(jìn)位循環(huán)右移指令RRC 4. 帶進(jìn)位循環(huán)左移指令RLC第二章 匯編語言和匯編程序CY2.2.3 邏輯運(yùn)算及移位類指令A(yù).7A.6A.5A.4A.3A.2A.1A.0A.7A.6A.5A.4A.3A.2A.1A.0A.7A.6A.5A.4A.3A.2A.1A.0A.7A.6A.5A.4A.

27、3A.2A.1A.0CYRR ARL ARRC ARLC A說明:后兩條指令,影響P標(biāo)志和CY。第二章 匯編語言和匯編程序2.2.3 邏輯運(yùn)算及移位類指令例如:若A=5CH,CY=1,執(zhí)行RLC A后,結(jié)果:A=B9H,CY=0,P=1對RLC、RRC指令,在CY=0時(shí) RLC相當(dāng)于乘以2 RRC相當(dāng)于除以2010111001第二章 匯編語言和匯編程序2.2.3 邏輯運(yùn)算及移位類指令例如:利用移位實(shí)現(xiàn)乘2、除2運(yùn)算例:將R7中的無符號數(shù)乘以2送入R6和R7的程序段如下:ADD A,#0 ; 清CYMOV R6,#0 ; 清R6MOV A,R7 ; R7乘以2RLC A ;MOV R7,A MO

28、V A,R6 ; R6乘以2RLC A ; 注意:帶“進(jìn)位”操作實(shí)現(xiàn)了乘以2的溢出情況MOV R6,A ;第二章 匯編語言和匯編程序2.2.4 位操作指令MCS-51單片機(jī)的硬件結(jié)構(gòu)中,有一個(gè)位處理器(又稱布爾處理器),它有一套位變量處理的指令集,包括位變量傳送、邏輯運(yùn)算、控制程序轉(zhuǎn)移等。在MCS-51 中,有一部份RAM和一部份SFR是具有位尋址功能的。 位操作區(qū):內(nèi)部RAM的20H-2FH這16個(gè)字節(jié)單元,即128個(gè)位單元(位地址空間位007FH); 可以位尋址的特殊功能寄存器:8031中有一些SFR是可以進(jìn)行位尋址的,這些SFR的特點(diǎn)是其字節(jié)地址均可被8整除, 如A累加器,B寄存器、PS

29、W、IP(中斷優(yōu)先級控制寄存器)、 IE(中斷允許控制寄存器)、SCON(串行口控制寄存器)、TCON(定時(shí)器/計(jì)數(shù)器控制寄存器)、P0-P3(I/O端口鎖存器)。 在進(jìn)行位處理時(shí), CY用作“位累加器” 。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.4 位操作指令位地址表達(dá)方式 以PSW中位4(RS1)為例。直接(位)地址方式:如 D4H;點(diǎn)操作符號方式:如 PSW.4,D0H.4;位名稱方式:如 RS1;用戶定義名方式:如用偽指令 bit。例如:SUB.REG bit RS1定義后,可用SUB.REG代替RS1第二章 MSC51單片機(jī)指令系統(tǒng)2.2.4 位操作指令位操作指令位傳送指令位清0和置

30、位位邏輯運(yùn)算指令第二章 MSC51單片機(jī)指令系統(tǒng)2.2.4 位操作指令位傳送指令MOV C, bit; bit CMOV bit, C; C bit用途:這組指令的功能是實(shí)現(xiàn)位累加器(CY)和其它位地址之間的數(shù)據(jù)傳遞。例:MOV C,P1.0;將P1.0的狀態(tài)送給C。 MOV P1.0,C ;將C中的狀態(tài)送到P1.0 ;引腳上去。第二章 匯編語言和匯編程序2.2.4 位操作指令位清0和置位CLR C ; 使CY=0CLR bit ; 使指令的位地址等于0。SETB C ; 使CY=1SETB bit ; 使指定的位地址等于1。用途:這組指令的功能是實(shí)現(xiàn)位累加器(CY)和其它位地址置位或者復(fù)位操

31、作。例:CLR P1.0 ;使P1.0變?yōu)? SETB P1.0 ;使P.0變?yōu)?第二章 匯編語言和匯編程序2.2.4 位操作指令位邏輯運(yùn)算指令A(yù)NL C, bit ;CY與指定位的值相與,結(jié)果送CYANL C, /bit ;先將位地址bit中的值取出后取反,再和 ;CY相與,結(jié)果送回CY。ORL C, bit ;CY與指定位的值相與,結(jié)果送CYORL C, /bit ;先將位地址bit中的值取出后取反,再和 ;CY相與,結(jié)果送回CY。CPL C ;使CY值取反。CPL bit ;使位地址bit中的值取反。用途:這組指令的功能是實(shí)現(xiàn)位地址數(shù)據(jù)位邏輯運(yùn)算。第二章 匯編語言和匯編程序2.2.5 控

32、制轉(zhuǎn)移指令MCS -51 提供了較豐富的控制轉(zhuǎn)移指令, 因此在編程上相當(dāng)靈活方便。包括以下類型:無條件轉(zhuǎn)移和條件轉(zhuǎn)移相對轉(zhuǎn)移和絕對轉(zhuǎn)移長轉(zhuǎn)移和短轉(zhuǎn)移調(diào)用與返回指令助記符:AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令1. 無條件轉(zhuǎn)移類指令 短轉(zhuǎn)移類指令:AJMP addr11 長轉(zhuǎn)移類指令:LJMP addr16 相對轉(zhuǎn)移指令:SJMP rel 間接轉(zhuǎn)移指令:JMP A+DPTR無條件轉(zhuǎn)移是指不規(guī)定條件的程序轉(zhuǎn)移。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令1. 無條件轉(zhuǎn)移類指令

33、(1) 前三條指令,區(qū)別何在? 跳轉(zhuǎn)的范圍不同 短轉(zhuǎn)移類指令:AJMP addr11 長轉(zhuǎn)移類指令:LJMP addr16 相對轉(zhuǎn)移指令:SJMP rel轉(zhuǎn)移范圍:2KB64KB-128+127 指令的構(gòu)成不同AJMP、LJMP后跟的是絕對地址,而SJMP后跟的是相對地址。 指令長度不同 原則上,所有用SJMP或AJMP的地方都可以用LJMP來替代第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令1. 無條件轉(zhuǎn)移類指令(2) 第四條指令與前三條指令相比,有何不同?這條指令的用途也是跳轉(zhuǎn),轉(zhuǎn)到什么地方去呢?這可不能由標(biāo)號簡單地決定了。轉(zhuǎn)移地址由A+DPTR形成,并直接送入PC。指令對A、D

34、PTR和標(biāo)志位均無影響。本指令可代替眾多的判別跳轉(zhuǎn)指令,又稱為散轉(zhuǎn)指令,多用于多分支程序結(jié)構(gòu)中。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令例: MOV DPTR,#TAB ;將TAB代表的地址送入DPTR JMP A+DPTR ;跳轉(zhuǎn)TAB: AJMP ROUT0 ;跳轉(zhuǎn)ROUT0開始的程序段AJMP ROUT1 ;跳轉(zhuǎn)ROUT1開始的程序段AJMP ROUT2 ;跳轉(zhuǎn)ROUT2開始的程序段AJMP ROUT3 ;跳轉(zhuǎn)ROUT3開始的程序段 .ROUT0: .ROUT1: .ROUT2: .ROUT3: .程序?qū)⒏鶕?jù)A中的內(nèi)容轉(zhuǎn)移到不同的程序段去執(zhí)行散轉(zhuǎn)。A=0,轉(zhuǎn)ROUT0A=

35、2,轉(zhuǎn)ROUT1A=4,轉(zhuǎn)ROUT2A=6,轉(zhuǎn)ROUT3第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令2. 條件轉(zhuǎn)移類指令 累加器A狀態(tài)轉(zhuǎn)移指令 比較不等轉(zhuǎn)移指令 減1不為零轉(zhuǎn)移指令條件轉(zhuǎn)移指令是指在滿足一定條件時(shí)進(jìn)行相對轉(zhuǎn)移,否則程序繼續(xù)執(zhí)行本指令的下一條指令。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令累加器狀態(tài)轉(zhuǎn)移指令轉(zhuǎn)移到相對于當(dāng)前PC值的8位移量的地址去。即: 新的PC值=當(dāng)前PC+偏移量relJZ rel ; 如果A=0,則轉(zhuǎn)移,否則順序執(zhí)行。JNZ rel ; 如果A0,就轉(zhuǎn)移。在編寫匯編語言源程序時(shí),可以直接寫成: JZ 標(biāo)號 ; 即轉(zhuǎn)移到標(biāo)號處。第二章

36、MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令 在執(zhí)行上面這段程序前:如果R0=0,結(jié)果R1=0FFH。而如果R00,則結(jié)果是R1=00H。 把上面的那個(gè)例子中的JZ改成JNZ,看看程序執(zhí)行的結(jié)果是什么?如果R0=0,結(jié)果R1=00H。如果R0 0,結(jié)果是R1中的值為0FFH。 MOV A,R0 JZ L1 MOV R1,#00H AJMP L2L1: MOV R1,#0FFHL2: SJMP L2 END例:第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令比較不等轉(zhuǎn)移指令轉(zhuǎn)移到相對于當(dāng)前PC值的8位移量的地址去。即: 新的PC值=當(dāng)前PC+偏移量relCJNE A, #data,

37、rel CJNE A, direct, relCJNE Rn, #data, relCJNE Ri, #data, rel此類指令的功能是將兩個(gè)操作數(shù)比較,如果兩者相等,就順序執(zhí)行,如果不相等,就轉(zhuǎn)移。同樣,在編寫匯編語言源程序時(shí),可以直接寫成: CJNE A,#data,標(biāo)號 ;即轉(zhuǎn)移到標(biāo)號處。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令比較不等轉(zhuǎn)移指令利用這些指令,可以判斷兩數(shù)是否相等。但有時(shí)還想得知兩數(shù)比較之后哪個(gè)大,哪個(gè)小,本條指令也具有這樣的功能:如果兩數(shù)不相等,則CPU還會用CY(進(jìn)位位)來反映哪個(gè)數(shù)大,哪個(gè)數(shù)小。如果前面的數(shù)大,則CY=0,否則CY=1。因此在程序轉(zhuǎn)移

38、后再次利用CY就可判斷出哪個(gè)數(shù)大,哪個(gè)數(shù)小了。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令因此最終結(jié)果是:如果R0=10H,則R1=00H;如果R010H,則R1=0AAH;如果R010H,則R1=0FFH。 MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 AJMP L3L1:JC L2 MOV R1,#0AAH AJMP L3L2:MOV R1,#0FFHL3:SJMP L3例:第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令減1不等于零轉(zhuǎn)移指令轉(zhuǎn)移到相對于當(dāng)前PC值的8位移量的地址去。即: 新的PC值=當(dāng)前PC+偏移量relDJNZ Rn,relDJ

39、NZ direct,rel同樣,在編寫匯編語言源程序時(shí),可以直接寫成: DJNZ Rn,標(biāo)號 ;即轉(zhuǎn)移到標(biāo)號處。這兩條指令把源操作數(shù)減 1, 結(jié)果回送到源操作數(shù)中去, 如果結(jié)果不為 0 則轉(zhuǎn)移。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令將23H單元中的數(shù)連續(xù)相加,存至A中,每加一次, 23H單元中的數(shù)值減1,直至減到0,共加(23H)次。例:本例中的23H中的數(shù)是10,實(shí)際就是求:1+2+10=? MOV 23H,#0AH CLR ALOOP: ADD A,23H DJNZ 23H,LOOP SJMP $第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令3. 調(diào)用與返回指令

40、長調(diào)用指令: LCALL addr16短調(diào)用指令: ACALL addr11子程序返回指令:RET中斷子程序返回指令:RETI在程序設(shè)計(jì)中, 通常把具有一定功能的公用程序段編制成子程序, 當(dāng)主程序需要使用子程序時(shí)用調(diào)用指令, 而在子程序的最后安排一條子程序返回指令,以便執(zhí)行完子程序后能返回主程序繼續(xù)執(zhí)行。第二章 MSC51單片機(jī)指令系統(tǒng)2.2.5 控制轉(zhuǎn)移指令4. 空操作指令NOP空操作,就是什么事也不干,停一個(gè)周期,一般用作短時(shí)間的延時(shí)。第二章 MSC51單片機(jī)指令系統(tǒng)二. 匯編語言和匯編程序指令的尋址方式1常用指令2偽指令3指令的時(shí)序4第二章 匯編語言和匯編程序2.3 偽指令 偽指令:對匯

41、編起某種控制作用的特殊命令,但自身并不產(chǎn)生機(jī)器碼,不屬于指令系統(tǒng),而僅僅為匯編服務(wù)的一些指令,因此稱為偽指令。 不同匯編程序允許的偽指令并不完全相同,但是一些基本的偽指令在大部分匯編程序中都能使用。51中常用的偽指令分為5大類: 程序計(jì)數(shù)與結(jié)束偽指令:ORG,END; 符號定義偽指令:EQU,DB,DW,DS,BIT,SET等; 附加文件指令:INCLUDE; 程序清單格式化偽指令:TITLE,PAGE; 一般控制偽指令:LIST,NOLIST,NOCODE。第二章 匯編語言和匯編程序2.3 偽指令ORG 功能:程序計(jì)數(shù)偽指令,用于設(shè)置由表達(dá)式?jīng)Q定的初始地址,ORG也稱為起始偽指令。表達(dá)式缺省為0。 格式:ORG 16位地址 例如:ORG 2000H74 40START: MOV A,#40H74402000H第二章 匯編語言和匯編程序2.3 偽指令END 功能:匯編語言源程序結(jié)束的標(biāo)志,在END以后的所有指令,匯編程序不再處理。一個(gè)源程序只有一個(gè)END指令,放在所有指令的最后,若沒有END指令,編譯將報(bào)錯(cuò)。 格式:END 例如:ENDORG 2000H74 40ST

溫馨提示

  • 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

提交評論