第四章指令系統(tǒng)_第1頁
第四章指令系統(tǒng)_第2頁
第四章指令系統(tǒng)_第3頁
第四章指令系統(tǒng)_第4頁
第四章指令系統(tǒng)_第5頁
已閱讀5頁,還剩97頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第4章 指令系統(tǒng)教學(xué)目的:教學(xué)目的:熟悉80C51系列單片機(jī)的尋址方式及每一種尋址方式對(duì)應(yīng)的尋址空間;掌 握每一條指令功能。教學(xué)重點(diǎn):教學(xué)重點(diǎn):1. 80C51系列單片機(jī)尋址方式所對(duì)應(yīng) 的尋址空間; 2. 80C51系列單片機(jī)指令功能。教學(xué)難點(diǎn):教學(xué)難點(diǎn):1 1.數(shù)據(jù)傳送類指令中對(duì)不同的存儲(chǔ)空 間 應(yīng)采用的傳送指令及尋址方式。 2 .間接尋址方式 24.1 指令系統(tǒng)簡介v指令:指令:計(jì)算機(jī)能直接識(shí)別和接受并指揮計(jì)算機(jī)執(zhí)行某種操作的命令。v指令系統(tǒng):指令系統(tǒng):計(jì)算機(jī)能夠執(zhí)行的各種指令的集合。v指令可以用兩種語言形式表示: 機(jī)器語言:機(jī)器語言:用二進(jìn)制代碼表示,能被主機(jī)直接識(shí) 別,但不易記憶和閱

2、讀。匯編語言:匯編語言:可以反映指令的功能和主要特征,用助記符,可以方便記憶。380C51匯編語言指令格式v操作碼 操作數(shù) ;注釋v操作碼:操作碼:用來規(guī)定指令所完成的操作,用規(guī)定的匯編語言助記符表示。v操作數(shù):操作數(shù):表示操作的對(duì)象,可能是一個(gè)具體的數(shù)據(jù),也可能是指出取得數(shù)據(jù)的地址或符號(hào)。v操作碼和操作數(shù)之間必須用空格分隔。v操作數(shù)可以是1、2或3個(gè),也可以沒有;雙操作數(shù)分為目的操作數(shù)(左邊的)和源操作數(shù)(右邊的),中間用“,”分開。v注釋:注釋:對(duì)該指令功能的解釋,可有可無。44.2 尋址方式v執(zhí)行任何指令都需要操作數(shù)。v尋址方式:在指令中用于說明操作數(shù)所在地址的方法。v尋址方式越多,計(jì)算

3、機(jī)的功能就越強(qiáng),但指令系統(tǒng)也越復(fù)雜。80C51共有7種。v1 立即尋址v2 直接尋址v3 寄存器尋址v4 寄存器間接尋址v5 變址尋址v6 相對(duì)尋址v7 位尋址54.2.1 符號(hào)注釋uRn (n07)-當(dāng)前選中的8個(gè)工作寄存器R0R7 ,它在片內(nèi)數(shù)據(jù)存儲(chǔ)器中的地址由PSW中RSl、RS0確定; uRi (i0或1) -當(dāng)前選中的用于間接尋址的工作寄存器R0、R1 ,它在片內(nèi)數(shù)據(jù)存儲(chǔ)器中的地址由RS0、RS1 確定 ;udata: 表示立即數(shù), data為8位常數(shù)。 data是指包含在指令中的8位立即數(shù)。udata16: 包含在指令中的16位立即數(shù)。udirect - 8位直接地址,可以是片內(nèi)R

4、AM單元地址或SFR地址;對(duì)于SFR,此地址可以直接用它的名稱來表示。6vaddr11: 11位目的地址。 目的地址應(yīng)與下條指令處于相同的2 KB程序存儲(chǔ)器地址空間范圍內(nèi), 主要用于絕對(duì)轉(zhuǎn)移指令A(yù)JMP和子程序絕對(duì)調(diào)用指令A(yù)CALL指令中。vaddr16: 16位目的地址。 目的地址可在全部程序存儲(chǔ)器的64 KB空間范圍內(nèi), 主要用于無條件長轉(zhuǎn)移指令LJMP和子程序長調(diào)用指令LCALL中。vrel: 相對(duì)地址, 以補(bǔ)碼形式表示的地址偏移量, 范圍為-128+127, 主要用于無條件相對(duì)短轉(zhuǎn)移指令SJMP和所有的條件轉(zhuǎn)移指令中。7vbit: 內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM和特殊功能寄存器SFR中的可直接尋

5、址位地址。 v: 間接尋址寄存器或基地址寄存器的前綴, 如Ri, DPTR, 表示寄存器間接尋址。v - /表示對(duì)該位操作數(shù)取反, 但不影響該位的原值。8v以下符號(hào)僅出現(xiàn)在指令注釋或功能說明中。vX -片內(nèi)RAM的直接地址(包含位地址)或寄存器。v(X) -在直接尋址方式中,表示直接地址X中的內(nèi)容;在間接尋址方式中,表示由間址寄存器X指出的地址單元。v(X) -在間接尋址方式中,表示由間址寄存器X指出的地址單元中的內(nèi)容。v -指令操作流程,將箭頭左邊內(nèi)容送入箭頭右邊的單元內(nèi)。91.立即尋址v立即尋址方式是指操作數(shù)包含在指令字節(jié)中。立即尋址方式是指操作數(shù)包含在指令字節(jié)中。 跟在指令操作碼后面的數(shù)

6、就是參加運(yùn)算的數(shù)跟在指令操作碼后面的數(shù)就是參加運(yùn)算的數(shù), 該操作數(shù)稱為立即數(shù)。該操作數(shù)稱為立即數(shù)。v立即數(shù)前必須加立即數(shù)前必須加“# #”標(biāo)記,標(biāo)記,以與直接尋址中以與直接尋址中的直接地址相區(qū)別。的直接地址相區(qū)別。v指令中的立即數(shù)有指令中的立即數(shù)有8 8位立即數(shù)位立即數(shù)#data8#data8和和1616位立位立即數(shù)即數(shù)#data16#data16。10例1 MOVA, #3AH;立即數(shù)3AH送累加器A圖4-1 MOV A,#3AH執(zhí)行示意圖11v在80C51指令系統(tǒng)中,僅有1條指令操作數(shù)是16位的立即數(shù),其功能是向地址指針DPTR傳送16位的地址。v例2:MOV DPTR, #3FA6H12

7、2.直接尋址v在這種尋址方式中,操作數(shù)項(xiàng)給出的是參加運(yùn)算的操作數(shù)的地址。可尋址空間有特殊功能寄存器、內(nèi)部數(shù)據(jù)存儲(chǔ)器以及位地址。其中特殊功能寄存器和位地址空間只能用特殊功能寄存器和位地址空間只能用直接尋址方式來訪問。直接尋址方式來訪問。v例1 MOVA, 3AH;把A的內(nèi)容送3AH單元。 圖4-2 MOV A, 3AH執(zhí)行示意圖13v例2 MOVP1,#10H;將立即數(shù)10H送P1口。v注意:例注意:例2 2 中的目的操作數(shù)中的目的操作數(shù)P1P1是直接尋址方式,這里用符號(hào)是直接尋址方式,這里用符號(hào)P1P1代替了直接地址代替了直接地址90H90H。143.寄存器尋址v指令中將寄存器的內(nèi)容為作為操作

8、數(shù)。v寄存器尋址是對(duì)選定的工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR和進(jìn)位CY中的數(shù)進(jìn)行操作。v例1. MOV A,R2 ;將當(dāng)前工作寄存器的內(nèi)容 送累加器A。(指令代碼為1字節(jié)EAv注意R2在片內(nèi)RAM的位置,它由RS0、RS1決定。如PSW中RS1、RS0的值分別為1、0,則現(xiàn)在的R2屬于第二組工作寄存器,那么它的地址為12H?,F(xiàn)已知12H中存放著數(shù)值4AH,則執(zhí)行該指令后,4AH就被送到A累加器中。15圖4-2 MOV A,R2執(zhí)行示意圖164.寄存器間接尋址u在這種尋址方式中,操作數(shù)所指定的寄存器中存放的不是操作數(shù)本身,而是操作數(shù)的地址。這種尋址方式用于訪問片內(nèi)數(shù)據(jù)

9、存儲(chǔ)器或片外數(shù)據(jù)存儲(chǔ)器。 間接尋址寄存器:Ri(8位地址指針)和DPTR(16位地址指針),間接尋址寄存器前加表示間址操作。u例1 MOV R0,#50Hu MOV A,R0u例2 MOV DPTR,#2760Hu MOVX DPTR, A17圖4-3 MOV A,R0執(zhí)行示意圖185.變址尋址v基址寄存器+變址寄存器間接尋址v基址寄存器加變址寄存器間接尋址, 簡稱變址尋址。 它以數(shù)據(jù)指針DPTR或程序計(jì)數(shù)器PC作為基址寄存器, 累加器A作為變址寄存器, 兩者的內(nèi)容相加形成16位程序存儲(chǔ)器地址, 該地址就是操作數(shù)所在地址。 采用變址尋址的指令只有三條:MOVCA, A+DPTRMOVCA, A

10、+PCJMPA+DPTR前兩條用于程序存儲(chǔ)器的查表操作,后一條用于程序的分支散轉(zhuǎn)。19v例 1 現(xiàn)假設(shè)MOVC A,ADPTR指令存放在70H單元,ACC中原存放值為E0H,DPTR中值為2000H,則ADPTR形成的地址為20E0H。20E0H單元中內(nèi)容為47H,則執(zhí)行該指令后,ACC中原E0H被47H代替。該指令執(zhí)行過程示于圖4-4。20圖4-4 MOVC A,ADPTR執(zhí)行示意圖216.相對(duì)尋址u相對(duì)尋址是將程序轉(zhuǎn)移到相對(duì)地址的轉(zhuǎn)移指令。是將程序計(jì)數(shù)器PC中的當(dāng)前內(nèi)容(轉(zhuǎn)移指令的下一條指令地址)與轉(zhuǎn)移指令第二字節(jié)所給出的偏移量相加,其結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址。偏移量為帶符號(hào)的數(shù),其范圍

11、為+127128 。程序設(shè)計(jì)中,相對(duì)地址可以用指令標(biāo)號(hào)或直接地址偏移量數(shù)值,但要注意,相對(duì)轉(zhuǎn)移地址的偏移量不得超過+127128 。u例1 JC 03H ;若進(jìn)位C0,則程序順序執(zhí)行,即不跳轉(zhuǎn),PC PC+2 ;若進(jìn)位C1,則以PC 中的當(dāng)前內(nèi)容為基地址,加上偏移量03H 后所得到的結(jié)果為該轉(zhuǎn)移指令的目的地址 。 22圖4-5 JC 03H指令執(zhí)行示意圖237.位尋址v即指令中直接給出位地址即指令中直接給出位地址, 可以對(duì)片內(nèi)可以對(duì)片內(nèi)RAM中的位中的位尋址區(qū)和某些可位尋址的特殊功能寄存器尋址區(qū)和某些可位尋址的特殊功能寄存器SFR中任中任意二進(jìn)制位進(jìn)行尋址。意二進(jìn)制位進(jìn)行尋址。v進(jìn)行位操作時(shí),

12、用進(jìn)位位進(jìn)行位操作時(shí),用進(jìn)位位C作為操作累加器。作為操作累加器。v位尋址空間:片內(nèi)位尋址空間:片內(nèi)RAMRAM的位尋址區(qū)(的位尋址區(qū)(20H20H 2FH2FH單元單元的的128128位)和位)和SFRSFR中的可位尋址的位單元。中的可位尋址的位單元。v位地址與字節(jié)直接尋址中的字節(jié)地址形式完全一樣,主要由位地址與字節(jié)直接尋址中的字節(jié)地址形式完全一樣,主要由操作碼來區(qū)分,使用時(shí)需予以注意操作碼來區(qū)分,使用時(shí)需予以注意24例1 SETB 3DH ;將片內(nèi)RAM位地址3DH即27H 單元的第5位置“1”。 例2 ANL C, 3DH ;將3DH的位狀態(tài)與進(jìn)位位C 相與, 結(jié)果保留在C中。25操作數(shù)尋

13、址方式與尋址空間操作數(shù)尋址方式與尋址空間尋址方式 尋 址 空 間 寄存器尋址 工作寄存器R0R7、A、B、CY、DPTR 直接尋址 片內(nèi)RAM和特殊功能寄存器SFR 間接尋址 片內(nèi)RAM , 片外RAM 位尋址 片內(nèi)RAM的位尋址區(qū)和SFR中的可位尋址的位單元立即數(shù)尋址 程序存儲(chǔ)器基址變址尋址 程序存儲(chǔ)器(A+PC, A+DPTR) 相對(duì)尋址 在程序存儲(chǔ)器256字節(jié)范圍內(nèi)轉(zhuǎn)移 264.3 指令系統(tǒng)v 80C51 80C51系列單片機(jī)的指令系統(tǒng),共有系列單片機(jī)的指令系統(tǒng),共有111111條指條指令,按其功能可分為五大類:令,按其功能可分為五大類:v(1)數(shù)據(jù)傳送類指令v(2)算術(shù)運(yùn)算類指令v(3

14、)邏輯運(yùn)算類指令v(4)控制轉(zhuǎn)移類指令v(5)布爾操作(位)類指令 274.3.1 數(shù)據(jù)傳送類指令v一般操作是將指令中源操作數(shù)傳送到目的操作數(shù)。指令執(zhí)行一般操作是將指令中源操作數(shù)傳送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不改變,而目的操作數(shù)修改為源操作數(shù);后,源操作數(shù)不改變,而目的操作數(shù)修改為源操作數(shù);v或者源操作數(shù)與目的操作數(shù)互換,即源操作數(shù)變成目的操作或者源操作數(shù)與目的操作數(shù)互換,即源操作數(shù)變成目的操作數(shù),目的操作數(shù)變成源操作數(shù),保存目的操作數(shù)不被丟失。數(shù),目的操作數(shù)變成源操作數(shù),保存目的操作數(shù)不被丟失。v數(shù)據(jù)傳送類指令不影響進(jìn)位標(biāo)志數(shù)據(jù)傳送類指令不影響進(jìn)位標(biāo)志CY、 半進(jìn)位標(biāo)志半進(jìn)位標(biāo)志AC

15、和溢出和溢出標(biāo)志標(biāo)志OV, 但當(dāng)傳送或交換數(shù)據(jù)后影響累加器但當(dāng)傳送或交換數(shù)據(jù)后影響累加器A的值時(shí)的值時(shí), 奇偶標(biāo)奇偶標(biāo)志志P的值則按的值則按A的值重新設(shè)定。的值重新設(shè)定。v按數(shù)據(jù)傳送類指令的操作方式按數(shù)據(jù)傳送類指令的操作方式, 又可把傳送類指令分為又可把傳送類指令分為3種類種類型型: 數(shù)據(jù)傳送、數(shù)據(jù)傳送、 數(shù)據(jù)交換和堆棧操作數(shù)據(jù)交換和堆棧操作, 并使用并使用8種助記符種助記符: MOV、 MOVX、 MOVC、 XCH、 XCHD、 SWAP、 PUSH及及POP。 下表給出了各種數(shù)據(jù)傳送指令的操作碼助記下表給出了各種數(shù)據(jù)傳送指令的操作碼助記符和對(duì)應(yīng)的操作數(shù)。符和對(duì)應(yīng)的操作數(shù)。28數(shù)據(jù)傳送類指

16、令助記符與操作29v數(shù)據(jù)傳送類指令的源操作數(shù)可以采用立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址5種方式,目的操作數(shù)可以采用寄存器尋址、寄存器間接尋址和直接尋址3種方式。301、內(nèi)部RAM數(shù)據(jù)傳送指令v內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM區(qū)是數(shù)據(jù)傳送最活躍的區(qū)域, 可用的指令數(shù)也最多, 包括寄存器、累加器、RAM單元及專用寄存器之間數(shù)據(jù)的相互傳送;指令操作碼助記符為MOV。 v內(nèi)部RAM之間源操作數(shù)傳遞關(guān)系如圖所示。3132(1)累加器A為目的操作數(shù)的指令MOV A,Rn;A(Rn)MOV A,direct;A(direct)MOV A,Ri;A(Ri)MOV A,#data;A#data這組這組

17、指令的功能是把源操作數(shù)指定的內(nèi)容傳送到累加指令的功能是把源操作數(shù)指定的內(nèi)容傳送到累加器器A。源操作數(shù)可以采用寄存器尋址方式、直接尋址、寄存源操作數(shù)可以采用寄存器尋址方式、直接尋址、寄存器間接尋址和立即尋址器間接尋址和立即尋址4種方式。傳送之后,源操作數(shù)種方式。傳送之后,源操作數(shù)所指定的內(nèi)容不變所指定的內(nèi)容不變。33例如:(A)=5CH,(R0)=10H,(R5)=47H,(10H)=D5H,(70H)=F2H,執(zhí)行以下每條指令后,累加器A中的內(nèi)容分別為: MOV A,R5 ;(A) 47H MOV A,70H ;(A) FZH MOV A,RO;(A) D5H MOV A, 78H;(A) 7

18、8H34(2)以寄存器Rn為目的操作數(shù)的指令v這組這組指令的功能是把源操作數(shù)指定的內(nèi)容傳送到寄指令的功能是把源操作數(shù)指定的內(nèi)容傳送到寄存器存器Rn。源操作數(shù)可以采用寄存器尋址、直接尋址源操作數(shù)可以采用寄存器尋址、直接尋址和立即尋址和立即尋址3種方式。傳送之后,源操作數(shù)所指定種方式。傳送之后,源操作數(shù)所指定的內(nèi)容不變。的內(nèi)容不變。v注意:沒有注意:沒有“MOV Rn,Rn”指令指令MOV Rn,A;Rn (A)MOV Rn,direct;Rn (direct)MOV Rn,#data ;Rn#data35例如:若(A)=78H,(R5)=47H,(70H)=F2H,執(zhí)行以下每條指令后,R5中的內(nèi)

19、容分別為: MOV R5,A ;(R5)78H MOVR5,70H ;(R5)FZH MOV R5, A3H :(R5) A3H36(3)以直接地址為目的操作數(shù)的指令v這組指令的功能是把源操作數(shù)指定的內(nèi)容傳送到由指令的功能是把源操作數(shù)指定的內(nèi)容傳送到由直接地址確定的片內(nèi)存儲(chǔ)單元中直接地址確定的片內(nèi)存儲(chǔ)單元中。源操作數(shù)可以采用寄存器尋址方式、直接尋址、立即尋址寄存器間接尋址等方式。v在匯編語言指令中,寄存器既可以寫成地址形式,也可以寫成代號(hào)形式。MOV direct,A;direct(A)MOV direct,Rn;direct (Rn)MOV direct, direct;direct (di

20、rect)MOV direct, Ri ;direct(Ri)MOV direct, #data ;direct#data37例: MOV 50H,R3;50H(R3),若(R3)=18H,則執(zhí)行指令后(50H)=18H。 MOV TMOD,B;TMOD (B),若(B)=60H,則執(zhí)行指令后(TMOD)=60H。38(4)以間接地址為目的操作數(shù)的指令v這組指令的功能是把源操作數(shù)指定的內(nèi)容傳送到由指令的功能是把源操作數(shù)指定的內(nèi)容傳送到由R0和和R1為地址指針的片內(nèi)存儲(chǔ)單元中為地址指針的片內(nèi)存儲(chǔ)單元中。v源操作數(shù)可以采用寄存器尋址方式、直接尋址和立即尋址方式。MOV Ri,A ;(Ri)(A)M

21、OV Ri,direct;(Ri)(direct)MOV Ri,#data;(Ri)#data39例如:若例如:若 A=70H,R1=30H,(,(40H)=50H,寫出執(zhí)行的結(jié)果。,寫出執(zhí)行的結(jié)果。 MOVR1,A;(;(30H)70H MOVR1,40H ;(;(30H) = 50H40(5)16位數(shù)據(jù)傳送指令v惟一的16位立即數(shù)傳送指令MOV DPTR,#data16;DPTR#data015 DPH#data815 DPL#data07例如,例如, MOV DPTR,1234H ;(DPH)12H,(,(DPL)34H。412.外部數(shù)據(jù)傳送指令v累加器A與片外數(shù)據(jù)存儲(chǔ)器間的數(shù)據(jù)傳送是通

22、過P0口和P2口進(jìn)行的。v片外數(shù)據(jù)存儲(chǔ)器的的地址總線的低8位和高8位分別與P0口和P2口相接,CPU通過P0口送出低8位地址,通過P2口送出高8位地址。v數(shù)據(jù)信息通過P0口與低8位地址選通信號(hào)分時(shí)復(fù)用。vCPU對(duì)片外RAM的訪問只能采用寄存器間接尋址方式。42vDPTR為為16位寄數(shù)器,尋址范圍為位寄數(shù)器,尋址范圍為0000H0FFFFH共共64KB空間。空間。v而而Ri是是8位寄數(shù)器,只能尋址位寄數(shù)器,只能尋址000FFH低低256個(gè)單元。個(gè)單元。v由于在由于在80C5180C51指令系統(tǒng)中,沒有專門對(duì)外設(shè)的輸入指令系統(tǒng)中,沒有專門對(duì)外設(shè)的輸入/ /輸出指令輸出指令,且片外擴(kuò)展的,且片外擴(kuò)展

23、的I/OI/O與片外與片外RAMRAM是統(tǒng)一編址的;因此如果在片是統(tǒng)一編址的;因此如果在片外數(shù)據(jù)存儲(chǔ)器的地址空間上安置外數(shù)據(jù)存儲(chǔ)器的地址空間上安置I/OI/O接口,則接口,則80C5180C51單片機(jī)把單片機(jī)把上面上面4 4條指令作為輸入條指令作為輸入/ /輸出指令,與外部設(shè)備進(jìn)行數(shù)據(jù)的傳輸出指令,與外部設(shè)備進(jìn)行數(shù)據(jù)的傳輸與交換。輸與交換。MOVX A, DPTR; (DPTR)A MOVX A, Ri ; (Ri)A MOVX DPTR, A ;(A)(DPTR)MOVX Ri, A ;(A)(Ri) 43例如,若(R0)=12H,(0012H)=56H,則執(zhí)行指令“MOVX A,R0”以后

24、,就把片外數(shù)據(jù)存儲(chǔ)器0012H單元中的數(shù)據(jù)56H送入累加器A中。 若(DPTR)=3020H,(A)=48H,則執(zhí)行指令“MOVX DPTR,A”以后,就將48H送入了片外數(shù)據(jù)存儲(chǔ)器地址為3020H的存儲(chǔ)單元。44解 MOV DPTR ,#2000H MOVX A,DPTR MOV 20H, A MOV DPTR ,#2000H MOVX A,DPTR MOV R0,#0FAH MOVX R0,A例 將片外數(shù)據(jù)存貯器2000H單元的內(nèi)容傳送到片內(nèi)的20H單元中;將片外數(shù)據(jù)存貯器2000H單元的內(nèi)容傳送到片外0FAH單元。453.查表指令v數(shù)據(jù)表格放在程序存儲(chǔ)器中,數(shù)據(jù)表格放在程序存儲(chǔ)器中,程序

25、存貯器只能讀出,不能寫入。程序存貯器只能讀出,不能寫入。v該類指令主要用于查表,又稱查表指令。應(yīng)用時(shí),一般以該類指令主要用于查表,又稱查表指令。應(yīng)用時(shí),一般以PC或或DPTR確確定表格的首址,查表時(shí),根據(jù)定表格的首址,查表時(shí),根據(jù)A中不同的內(nèi)容查找到表格中的相應(yīng)項(xiàng),中不同的內(nèi)容查找到表格中的相應(yīng)項(xiàng),故此時(shí)稱故此時(shí)稱PC或或DPTR為基址寄存器,為基址寄存器,A為變址寄存器,尋址方式為基址為變址寄存器,尋址方式為基址加變址尋址。加變址尋址。vA中為中為8位無符號(hào)數(shù),故查找范圍為基址后位無符號(hào)數(shù),故查找范圍為基址后256字節(jié)范圍內(nèi)的代碼或常數(shù)。字節(jié)范圍內(nèi)的代碼或常數(shù)。vROMROM片內(nèi)、片外是統(tǒng)一

26、編址,該指令既可訪問片內(nèi),又可訪問片外程序片內(nèi)、片外是統(tǒng)一編址,該指令既可訪問片內(nèi),又可訪問片外程序存貯器。存貯器。v使用使用DPTR作基址寄存器比較靈活,且不易出錯(cuò)。建議盡可能使用作基址寄存器比較靈活,且不易出錯(cuò)。建議盡可能使用MOVCA,A+DPTR指令。指令。MOVC A, A+PC ;PC(PC)+1 ;A (A)+(PC)MOVC A, A+DPTR; (A)+(DPTR)A 464.堆棧操作指令v使用堆棧時(shí),一般須重新設(shè)定使用堆棧時(shí),一般須重新設(shè)定SP的初始值。的初始值。v一般情況下,執(zhí)行指令不影響標(biāo)志,但如果一般情況下,執(zhí)行指令不影響標(biāo)志,但如果目標(biāo)操作數(shù)為目標(biāo)操作數(shù)為PSW,則

27、有可能使一些標(biāo)志改,則有可能使一些標(biāo)志改變。這也是通過指令強(qiáng)行修改標(biāo)志的一種方變。這也是通過指令強(qiáng)行修改標(biāo)志的一種方法。法。PUSH direct ;SP(SP)+1 ;(SP)(direct)POP direct ;direct(SP) SP (SP) 1475.交換指令(3)累加器累加器A高高4位和低位和低4位內(nèi)容互換指令位內(nèi)容互換指令(2)半字節(jié)交換指令半字節(jié)交換指令(1) 字節(jié)交換指令字節(jié)交換指令XCH A, Rn;(A)(Rn)XCH A, direct ;(A) (direct)XCH A, Ri;(A) (Ri)XCHD A, Ri ;(A03) (Ri)03) ;各自的高4位不

28、變SWAP A;(A03) (A47)48例:設(shè)(A)=08H,(R7)=0DCH, 執(zhí)行指令 XCH A, R7結(jié)果為:(A)=0DCH, (R7)=08H 例:(A)=80H,(R0)=30H,(30H)=0FH, 執(zhí)行指令 XCHD A, R 結(jié)果為:(A)=8FH, (30H)=00H494.3.2 算數(shù)運(yùn)算類指令v算數(shù)運(yùn)算類指令主要用來對(duì)算數(shù)運(yùn)算類指令主要用來對(duì)8位無符號(hào)數(shù)據(jù)進(jìn)行算位無符號(hào)數(shù)據(jù)進(jìn)行算數(shù)運(yùn)算。數(shù)運(yùn)算。v算術(shù)運(yùn)算包括加、減、乘、除四則混合運(yùn)算和屬于算術(shù)運(yùn)算包括加、減、乘、除四則混合運(yùn)算和屬于 加減類型的增加減類型的增1、減、減1以及十進(jìn)制調(diào)整指令。以及十進(jìn)制調(diào)整指令。v借

29、助溢出標(biāo)志,可對(duì)有符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算。借助溢出標(biāo)志,可對(duì)有符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算。v借助進(jìn)位標(biāo)志,可進(jìn)行多字節(jié)加、減運(yùn)算。借助進(jìn)位標(biāo)志,可進(jìn)行多字節(jié)加、減運(yùn)算。v算術(shù)運(yùn)算操作會(huì)影響程序狀態(tài)字寄存器算術(shù)運(yùn)算操作會(huì)影響程序狀態(tài)字寄存器PSW中的進(jìn)中的進(jìn)位和借位標(biāo)志位和借位標(biāo)志C、輔助進(jìn)位(借位)標(biāo)志、輔助進(jìn)位(借位)標(biāo)志AC、溢出、溢出標(biāo)志位標(biāo)志位OV和奇偶標(biāo)志位和奇偶標(biāo)志位P等。等。501. 加法指令A(yù)DD A, Rn;A(A)+(Rn)ADD A, direct;A (A)+(direct)ADD A, Ri;A (A)+(Ri)ADD A, #data;A (A)+#data 這組指令把源操作數(shù)

30、指定的內(nèi)容加到累加器這組指令把源操作數(shù)指定的內(nèi)容加到累加器A,并將相加的,并將相加的結(jié)果保存在結(jié)果保存在A中。這組指令影響中。這組指令影響PSW中標(biāo)志位如下:中標(biāo)志位如下: 進(jìn)位標(biāo)志進(jìn)位標(biāo)志C:和的最高位(位:和的最高位(位7)有進(jìn)位,)有進(jìn)位,C=1;否則;否則C=0。 輔助進(jìn)位輔助進(jìn)位AC:和的位:和的位3有進(jìn)位,有進(jìn)位,AC=1;否則;否則AC=0。 溢出標(biāo)志位溢出標(biāo)志位OV:和的位:和的位7位位6只有一個(gè)有進(jìn)位時(shí),只有一個(gè)有進(jìn)位時(shí),OV=1; 奇偶標(biāo)志位:當(dāng)奇偶標(biāo)志位:當(dāng)A中中1的個(gè)數(shù)為奇數(shù)時(shí),的個(gè)數(shù)為奇數(shù)時(shí),P=1;為偶數(shù)時(shí),;為偶數(shù)時(shí),P=0。512. 帶進(jìn)位加法指令v功能:該操作

31、與功能:該操作與ADD類似,只是類似,只是PSW中的進(jìn)位位中的進(jìn)位位C參與運(yùn)算。帶進(jìn)位加法指令通常用于多字節(jié)或多個(gè)參與運(yùn)算。帶進(jìn)位加法指令通常用于多字節(jié)或多個(gè)數(shù)加法運(yùn)算。數(shù)加法運(yùn)算。ADDC A, Rn;A (A)+(C)+(Rn)ADDC A, direct;A(A)+(C)+(direct)ADDC A, Ri;A(A)+(C)+(Ri)ADDC A, #data; A(A)+(C)+#data52例 兩字節(jié)無符號(hào)數(shù)相加,被加數(shù)放在內(nèi)部RAM30H,31H單元(低位放在前),加數(shù)放在內(nèi)部RAM40H、41H單元。計(jì)算兩數(shù)的和,放在50H52H單元中。解 MOV A,30H ADD A,40

32、H ;低字節(jié)相加 MOV 50H,A MOV A,31H ADDC A,41H ;高字節(jié)相加 MOV 51H,A ADDC A,#00H ;取高相加產(chǎn)生的進(jìn)位 MOV 52H,A說明:多字節(jié)數(shù)求和,從低字節(jié)開始,最低字節(jié)相加用ADD指令,高字節(jié)相加用ADDC指令。 N字節(jié)數(shù)相加,結(jié)果可能為N+1字節(jié)數(shù)。533. 帶借位減法指令u功能:指令功能是以功能:指令功能是以A中數(shù)為被減數(shù),減去操作數(shù),再減去中數(shù)為被減數(shù),減去操作數(shù),再減去進(jìn)位進(jìn)位,差存在差存在A中。影響中。影響PSW中的中的C,AC,OV,和,和P位。位。u說明:說明:80C51指令系統(tǒng)中,無不帶進(jìn)位(實(shí)為借位)的減法指指令系統(tǒng)中,無不

33、帶進(jìn)位(實(shí)為借位)的減法指令。若進(jìn)行不帶借的減法運(yùn)算,要用令。若進(jìn)行不帶借的減法運(yùn)算,要用ADD A, #00H或或CLR C等指令將進(jìn)位標(biāo)志清等指令將進(jìn)位標(biāo)志清0。減法指令中,無減法指令中,無BCD碼調(diào)整。碼調(diào)整。 SUBB A, Rn;A(A)-(C)-(Rn)SUBB A, direct ;A (A)-(C)-(direct)SUBB A, Ri;A (A)-(C)-(Ri)SUBB A, #data;A (A)-(C)-#data54例 兩個(gè)雙字節(jié)數(shù)相減,被減數(shù)放在30H,31H,減數(shù)放在40H,41H中,差放入50H、51H。解 ADD A,#00H ;將進(jìn)位位清0 MOV A,30

34、H SUBB A,40H ;低字節(jié)相減 MOV 50H,A MOV A,31H SUBB A,41H ;高字節(jié)相減 MOV 51H,A說明:多字節(jié)相減,從低字節(jié)開始,最低字節(jié)相減時(shí),應(yīng)先將進(jìn)位位清0。 554.乘法指令p功能:累加器A和寄存器B中的兩個(gè)無符號(hào)8位數(shù)相乘,所得16位乘積的低8位放在A中,高8位入在B中。p說明:乘法指令影響PSW的狀態(tài)。執(zhí)行MUL指令后,C被清0,OV與結(jié)果有關(guān),若OV=0,表示乘積小于255(0FFH),只在A中,(B)0;若OV=1,則乘積大于255,(B)0。)()()()(15870BABAMUL AB;565. 除法指令F功能:兩功能:兩8位無符號(hào)數(shù)相除

35、,被除數(shù)置于累加器位無符號(hào)數(shù)相除,被除數(shù)置于累加器A中,除數(shù)中,除數(shù)置于寄存器置于寄存器B中。指令執(zhí)行后,商存于中。指令執(zhí)行后,商存于A中,余數(shù)存于中,余數(shù)存于B中。中。F說明:該指令執(zhí)行后,說明:該指令執(zhí)行后,C清清0,若除數(shù)為,若除數(shù)為0(即寄存器(即寄存器B內(nèi)數(shù)內(nèi)數(shù)據(jù)為據(jù)為0),(),(OV)=1,表明除,表明除0沒有意義;若除數(shù)不為沒有意義;若除數(shù)不為0,則,則(OV)=0。DIV AB; )/()()()(BABA余數(shù)商576. 加1指令v功能:對(duì)A,Rn,內(nèi)部RAM單元及數(shù)據(jù)指針DPTR進(jìn)行加1操作,除INC A影響P標(biāo)志外,不影響其他標(biāo)志位。v說明:若原為0FFH,執(zhí)行該指令后,

36、將變?yōu)?0H,但不影響進(jìn)位位C。 INC A;A (A)+1INC Rn;Rn (Rn)+1INC direct ;direct (direct)+1INC Ri ;(Ri) (Ri)+1INC DPTR; DPTR (DPTR)+1587. 減1指令v功能:減功能:減1運(yùn)算運(yùn)算v說明:說明:與加與加1指令指令I(lǐng)NC命令類似命令類似,但無但無DPTR減減1指令。指令。 若原為若原為00H,執(zhí)行該指令后,將變?yōu)?,?zhí)行該指令后,將變?yōu)?FFH 。DEC A;A(A)-1DEC Rn;Rn (Rn)-1DEC direct; direct (direct)-1DEC Ri;(Ri) (Ri)-159

37、8. 十進(jìn)制調(diào)整指令vDA A;DA調(diào)整累加器內(nèi)容為壓縮調(diào)整累加器內(nèi)容為壓縮BCD碼碼說明:說明: 在指令系統(tǒng)中,沒有專門的十進(jìn)制(在指令系統(tǒng)中,沒有專門的十進(jìn)制(BCD碼)的加法運(yùn)算碼)的加法運(yùn)算指令,只能使用指令,只能使用ADD,ADDC命令,但有時(shí)會(huì)產(chǎn)生錯(cuò)誤。例如:命令,但有時(shí)會(huì)產(chǎn)生錯(cuò)誤。例如: (a)5+38(b)7+6=13 0 1 0 1 0 1 1 1 + ) 0 0 1 1 + ) 0 1 1 0 1 0 0 0 1 1 0 1 其中其中(a)的運(yùn)算結(jié)果是正確的,的運(yùn)算結(jié)果是正確的,(b) 的運(yùn)算結(jié)果是錯(cuò)誤的。的運(yùn)算結(jié)果是錯(cuò)誤的。 為了消除錯(cuò)誤,要對(duì)運(yùn)算結(jié)果進(jìn)行為了消除錯(cuò)誤,要

38、對(duì)運(yùn)算結(jié)果進(jìn)行DA A調(diào)整,調(diào)整為正確的壓縮調(diào)整,調(diào)整為正確的壓縮BCD碼形式碼形式60v若(A03)9或(AC)=1,則A03(A03)+06H同時(shí),v若(A47)9或(C)=1,則A47 (A47)+60H例 在20H、21H中分別存放壓縮BCD碼55和72,試將兩數(shù)相加,并計(jì)算出結(jié)果。解MOV A,20H 01010101 55 ADD A,21H + 01110010 72 DA A, 11000111 C7 高位大于9結(jié)果 (A)=27, C=1 + 01100000 60 加60 100100111 127 如果不使用DAA指令,則結(jié)果為0C7H,是錯(cuò)誤的。 614.3.3 邏輯操

39、作類指令u邏輯運(yùn)算類指令主要用于對(duì)兩個(gè)操作數(shù)按位進(jìn)行邏輯操作,邏輯運(yùn)算類指令主要用于對(duì)兩個(gè)操作數(shù)按位進(jìn)行邏輯操作,操作結(jié)果送到操作結(jié)果送到A A 累加器或直接尋址單元,若直接地址為累加器或直接尋址單元,若直接地址為I/OI/O端口,則為端口,則為“讀讀- -改改- -寫寫”操作。這類指令執(zhí)行的操作主要有操作。這類指令執(zhí)行的操作主要有“與與”(ANL)(ANL)、“或或”(ORL)(ORL)、“異或異或”(XRL)(XRL)以及累加器自以及累加器自身的循環(huán)移位、取反(身的循環(huán)移位、取反(CPL)CPL)、清除、清除(CLR) (CLR) 等。等。u這些指令執(zhí)行時(shí)一般不影響程序狀態(tài)字寄存器這些指令

40、執(zhí)行時(shí)一般不影響程序狀態(tài)字寄存器PSWPSW,僅當(dāng)目,僅當(dāng)目的操作數(shù)為的操作數(shù)為ACCACC時(shí)對(duì)奇偶標(biāo)志位有影響。時(shí)對(duì)奇偶標(biāo)志位有影響。621.邏輯“與”指令邏輯運(yùn)算是按位進(jìn)行的,對(duì)進(jìn)位標(biāo)志位C不產(chǎn)生影響。該指令用于屏蔽某些位。ANL A, Rn;A(A)(Rn)ANL A, direct;A(A)(direct)ANL A, Ri ;A(A)(Ri)ANL A, #data ;A(A)#dataANL direct, A ;direct (direct) (A)ANL direct, #data ;direct (direct) #data63 例 將R1中的低4位清0,高4位不變。 解 M

41、OV A,#11110000B ANL A, R1 MOV R1,A 0 1 1 1 1 0 1 0 ) 1 1 1 0 0 1 1 0 0 1 1 0 0 0 1 0結(jié)果為:(A)=62H例:設(shè)(A)=7AH, (20H )=0E6H,執(zhí)行指令 ANL A, 20H642.邏輯“或”指令ORL A, Rn;A(A)(Rn)ORL A, direct ;A(A)(direct )ORL A, Ri;A(A)(Ri)ORL A, #data ;A(A) #data ORL direct, A ; direct (direct) (A) ORL direct, #data; direct (dir

42、ect) #data 65 例 將片外RAM 2000H單元的0、1位置1,2、3位清0,其它位不變。解 MOV DPTR, # 2000H MOVX A,DPTR ORL A,#00000011B ANL A,#11110011B MOVX DPTR,A663.邏輯“異或”指令XRL A, Rn;A(A) (Rn)XRL A, direct ;A(A) (direct)XRL A, Ri ;A(A) (Ri)XRL A, #data;A(A) #dataXRL direct, A;direct (direct) (A)XRL direct, #data;direct (direct) #da

43、ta 說明:說明:若與若與0進(jìn)行異或運(yùn)算,結(jié)果保持不變;進(jìn)行異或運(yùn)算,結(jié)果保持不變; 若與若與1進(jìn)行異或運(yùn)算,結(jié)果取反;進(jìn)行異或運(yùn)算,結(jié)果取反; 自身異或等效于清自身異或等效于清0。 例如例如 XRL A, A 結(jié)果為:(結(jié)果為:(A)0 67 1 1 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 1例 將20H單元內(nèi)容1、3、5、7位保持不變,0、2、4、6位取反。 解XRL 20H, #01010101B 若 (20H)=11110110 則執(zhí)行指令:結(jié)果為(20H)=10100011B684.循環(huán)移位指令循環(huán)左移循環(huán)左移 RL A ;An+1An,

44、A0 A7循環(huán)右移循環(huán)右移 RR A ;An An+1,A7 A0進(jìn)位循環(huán)左移進(jìn)位循環(huán)左移 RLC A ;An+1 An ,A0 C,C A7帶進(jìn)位循環(huán)右移帶進(jìn)位循環(huán)右移 RRC A ;An An+1,A7 C,C A0 移移位位指指令令69例 分析下列程序段實(shí)現(xiàn)的功能: MOV A, direct RL A MOV R1,A RL A RL A ADD A,R1 MOV direct,A解各指令實(shí)現(xiàn)的功能依次如程序右邊注譯,可知該程序?qū)崿F(xiàn)的功能是將存貯單元的數(shù)乘以10。;取數(shù)設(shè)為D0;D02;(R1)2D0;2D02;4D02;8D0+2D0;存數(shù)10D0例 將20H單元存放的無符號(hào)數(shù)除2。

45、解 ADD A,#0 ;C清零 MOV A,20H RRC A MOV 20H,A705.取反指令v對(duì)累加器對(duì)累加器A A按位取反按位取反v取反即為邏輯非運(yùn)算。取反即為邏輯非運(yùn)算。CPL A;A ( )A716.清0指令v 對(duì)累加器A清“0”CLR A ;A00H 724.3.4 控制轉(zhuǎn)移類指令程序的順序執(zhí)行是由程序的順序執(zhí)行是由PCPC自動(dòng)加自動(dòng)加1 1實(shí)現(xiàn)的,要改變程實(shí)現(xiàn)的,要改變程序的執(zhí)行順序,實(shí)現(xiàn)分支轉(zhuǎn)向,必須通過強(qiáng)迫改變序的執(zhí)行順序,實(shí)現(xiàn)分支轉(zhuǎn)向,必須通過強(qiáng)迫改變PCPC值的方法來實(shí)現(xiàn),這就是控制轉(zhuǎn)移類指令的基本值的方法來實(shí)現(xiàn),這就是控制轉(zhuǎn)移類指令的基本功能??刂妻D(zhuǎn)移類指令可以控制程

46、序根據(jù)不同情況功能??刂妻D(zhuǎn)移類指令可以控制程序根據(jù)不同情況執(zhí)行不同的程序段,令單片機(jī)應(yīng)用系統(tǒng)做出相應(yīng)的執(zhí)行不同的程序段,令單片機(jī)應(yīng)用系統(tǒng)做出相應(yīng)的動(dòng)作。控制轉(zhuǎn)移類指令使單片機(jī)具有動(dòng)作??刂妻D(zhuǎn)移類指令使單片機(jī)具有“智能化智能化”功功能。能。80C80C5151指令系統(tǒng)有指令系統(tǒng)有1717條控制轉(zhuǎn)移指令,包括無條件條控制轉(zhuǎn)移指令,包括無條件轉(zhuǎn)移和條件轉(zhuǎn)移指令、絕對(duì)轉(zhuǎn)移和相對(duì)轉(zhuǎn)移,長轉(zhuǎn)轉(zhuǎn)移和條件轉(zhuǎn)移指令、絕對(duì)轉(zhuǎn)移和相對(duì)轉(zhuǎn)移,長轉(zhuǎn)移和短轉(zhuǎn)移,還有調(diào)用和返回指令等。移和短轉(zhuǎn)移,還有調(diào)用和返回指令等。這類指令多數(shù)不影響程序狀態(tài)標(biāo)志寄存器。這類指令多數(shù)不影響程序狀態(tài)標(biāo)志寄存器。 731.無條件轉(zhuǎn)移指令v(1

47、)長轉(zhuǎn)移指令長轉(zhuǎn)移指令LJMP LJMP addr16 ;PC addr16 功能:指令執(zhí)行后將功能:指令執(zhí)行后將16位地址(位地址(addr16)傳送給)傳送給PC,從而,從而實(shí)現(xiàn)程序轉(zhuǎn)移到新的地址開始運(yùn)行。實(shí)現(xiàn)程序轉(zhuǎn)移到新的地址開始運(yùn)行。 說明:該指令可實(shí)現(xiàn)說明:該指令可實(shí)現(xiàn)64KB范圍的任意轉(zhuǎn)移。范圍的任意轉(zhuǎn)移。 74(2)短轉(zhuǎn)移指令)短轉(zhuǎn)移指令A(yù)JMP AJMP addr11 ;PC (PC)+2,PC100 addr11 功能:addr11的11位數(shù)取代該指令執(zhí)行后程序指針PC的低11位PC100,程序根據(jù)PC值轉(zhuǎn)移運(yùn)行。 說明: addr11為11位無符號(hào)數(shù),程序轉(zhuǎn)移最大范圍為2K

48、B LJMP, SJMP, AJMP功能相同,只是轉(zhuǎn)移范圍不同。75(3) 無條件相對(duì)轉(zhuǎn)移指令 SJMP rel ;PC (PC)+2+rel 功能:執(zhí)行指令后,程序從當(dāng)前位置向前或向后跳轉(zhuǎn)rel個(gè)單元運(yùn)行。 說明: 該指令中尋址方式稱相對(duì)尋址。編程時(shí)編程時(shí)rel 用目的地址標(biāo)用目的地址標(biāo)號(hào)代替。號(hào)代替。 rel為8位帶符號(hào)補(bǔ)碼數(shù),因此所能實(shí)現(xiàn)的程序轉(zhuǎn)移是雙向的,若rel為正數(shù),則向前轉(zhuǎn)移,若rel為負(fù)數(shù)向后轉(zhuǎn)移。轉(zhuǎn)移轉(zhuǎn)移相對(duì)范圍圖是相對(duì)范圍圖是-128127H共共256個(gè)單元;個(gè)單元; 注譯中的“PC (PC)+2+rel”是這樣得來的:注譯中 “(PC)”是該指令執(zhí)行前的值,前面的“PC”

49、是指指令執(zhí)行后的值。因 “SJMP rel”指令存放在ROM中占用2個(gè)字節(jié)單元(為雙字節(jié)指令),故程序從指令執(zhí)行后“當(dāng)前位置”向前或向后跳轉(zhuǎn)rel個(gè)單元,也就是從指令執(zhí)行前的位置向前或向后跳轉(zhuǎn)2rel個(gè)單元。 762.條件轉(zhuǎn)移指令v 條件轉(zhuǎn)移指令是依某種特定條件轉(zhuǎn)移的指令。條件滿足才轉(zhuǎn)移相當(dāng)于執(zhí)行一條相對(duì)轉(zhuǎn)移指令,條件不滿足時(shí)則順序執(zhí)行下面的指令。目的地址在以下一條指令的起始地址為中心的256字節(jié)范圍中(-128+127B)。當(dāng)條件滿足時(shí),把PC加到指向下一條指令的第1個(gè)字節(jié)地址,再把有符號(hào)的相對(duì)偏移量加到PC上,計(jì)算出轉(zhuǎn)向地址。77JZ rel ;PC(PC)+2 當(dāng)(A)=全“0”,則PC

50、(PC)+rel 當(dāng)(A)全“0”,則程序順序執(zhí)行JNZ rel ; PC(PC)+2 當(dāng)(A)全“0”,則PC(PC)+rel 當(dāng)(A)=全“0”,則程序順序執(zhí)行說明:說明:以上兩條指令均對(duì)累加器A的內(nèi)容進(jìn)行檢測(cè)。(1)、測(cè)試條件符合轉(zhuǎn)移指令)、測(cè)試條件符合轉(zhuǎn)移指令 78解 MOV R0,#DATA2 ;賦首址 MOV DPTR,#DATA1 LOOP1:MOVX A,DPTR ;取數(shù) JZ LOOP2 ;判斷是否為0 MOV R0,A ;不為0存數(shù) INC R0 ;準(zhǔn)備取下一個(gè)數(shù) INC DPTR SJMP LOOP1 ;重復(fù)取數(shù)過程 LOOP2:RET ;為0結(jié)束 例 將外部RAM的一個(gè)

51、數(shù)據(jù)塊(首址為DATA1)傳送到內(nèi)部RAM中(首址DATA2),遇到傳送的數(shù)據(jù)為零時(shí)停止。79v(2 2)、比較不相等轉(zhuǎn)移指令)、比較不相等轉(zhuǎn)移指令v CJNE A,direct,rel ;PC(PC)+3 若(direct)(A),則 PC(PC)+rel且C1 若(direct)=(A),則順序執(zhí)行CJNE A,#data,rel ; PC(PC)+3 若#data (A),則 PC(PC)+rel且C 1 若#data =(A),則順序執(zhí)行 80CJNE Rn,#data,relCJNE Ri,#data,rel解 MOV R0,#DATA LOOP1: CJNE R0,#64H,LOO

52、P2 SJMP LOOP3LOOP2: INC R0 SJMP LOOP1LOOP3: MOV A,R0 例 找出片內(nèi)RAM的DATA為首址的數(shù)據(jù)塊中第一個(gè)等于100的數(shù),并將其地址存入A中。81(3)減1不為0轉(zhuǎn)移指令(循環(huán)轉(zhuǎn)移指令) DJNZ Rn,rel ;PC(PC)+2 Rn(Rn)-1 當(dāng)(Rn)0,則PC(PC)+rel ,程序繼續(xù)循環(huán) 當(dāng)(Rn)=0,則結(jié)束循環(huán),程序往下執(zhí)行 DJNZ direct,rel 功能:寄存器功能:寄存器Rn或或direct單元內(nèi)容減單元內(nèi)容減1,如果結(jié)果為零,如果結(jié)果為零,則程序順序執(zhí)行;如果還沒有減到則程序順序執(zhí)行;如果還沒有減到0,則程序轉(zhuǎn)移。

53、,則程序轉(zhuǎn)移。 說明:這兩條指令主要用于控制程序循環(huán),又稱循環(huán)指說明:這兩條指令主要用于控制程序循環(huán),又稱循環(huán)指令。預(yù)先賦值令。預(yù)先賦值Rn或或RAM單元,以控制循環(huán)次數(shù)。單元,以控制循環(huán)次數(shù)。 82解分析:這是一個(gè)重復(fù)操作過程,可以使用循環(huán)指令。30H7FH共50H個(gè)單元 ,循環(huán)次數(shù)為50H。程序如下: MOV R7,#50H MOV R0,#30H NEXT:MOV R0,#0 INC R0 DJNZ R7,NEXT例 將內(nèi)部RAM的30H7FH單元清0。83例例 延時(shí)程序START: SETB P1.1 ;1P1.l DL: MOV 30H, #03H ;03H30H,置初值 DL0:

54、MOV 31H, #0F0H ;0F0H31H,置初值DL1: DJNZ 31H, DL1 ;(31H)-131H,(31H)不為0 重復(fù)執(zhí)行DJNZ 30H, DL0 ;(30H)-130H,(30H)不為0 轉(zhuǎn)DL0CPL P1.1 ;P1.1求反AJMP DL ;轉(zhuǎn)DL843. 間接轉(zhuǎn)移指令v JMP A+DPTR ;PC(A)+(DPTR) 這條指令的功能是把累加器中8位無符號(hào)數(shù)與數(shù)據(jù)指針DPTR中的16位數(shù)相加,結(jié)果作為下條指令地址送入PC,不改變累加器和數(shù)據(jù)指針內(nèi)容,也不影響標(biāo)志。利用這條指令能實(shí)現(xiàn)程序的散轉(zhuǎn)。說明: DPTR為基址寄存器,A為變址寄存器,為基址加變址尋址方式。 把

55、DPTR值固定,賦與A不同的值,則可實(shí)現(xiàn)程序的多分支轉(zhuǎn)移(散轉(zhuǎn))。 854.調(diào)用子程序及返回指令 在程序設(shè)計(jì)中,常常出現(xiàn)幾個(gè)地方都需要作功能完全相同的在程序設(shè)計(jì)中,常常出現(xiàn)幾個(gè)地方都需要作功能完全相同的處理,為了減少程序編寫和調(diào)試的工作量,使某一段程序能被處理,為了減少程序編寫和調(diào)試的工作量,使某一段程序能被公用,于是引入了主程序和子程序的概念,指令系統(tǒng)中一般都公用,于是引入了主程序和子程序的概念,指令系統(tǒng)中一般都有調(diào)用子程序的指令,以及從子程序返回主程序的指令。有調(diào)用子程序的指令,以及從子程序返回主程序的指令。 通常把具有一定功能的公用程序段作為子程序,在子通常把具有一定功能的公用程序段作為

56、子程序,在子程序的末尾安排一條返回主程序的指令。主程序轉(zhuǎn)子程序以程序的末尾安排一條返回主程序的指令。主程序轉(zhuǎn)子程序以及從子程序返回的過程如下圖所示。及從子程序返回的過程如下圖所示。 在一個(gè)程序中,往往在子程序中還會(huì)調(diào)用別的子程序,在一個(gè)程序中,往往在子程序中還會(huì)調(diào)用別的子程序,這稱為子程序嵌套。二級(jí)子程序嵌套過程如下圖所示。這稱為子程序嵌套。二級(jí)子程序嵌套過程如下圖所示。 86主程序MAINCPU執(zhí)行子程序執(zhí)行調(diào)用子程序指令子程序SUB執(zhí)行返回主程序指令A(yù)B執(zhí)行調(diào)用子程序指令轉(zhuǎn)向SUB1返回MAIN返回SUB1轉(zhuǎn)向SUB2主程序MAIN子程序SUB1子程序SUB2v圖 主程序二次調(diào)用子程序示意

57、圖 圖 二級(jí)子程序嵌套示意圖87v(1)長調(diào)用指令)長調(diào)用指令v 該指令提供16位目標(biāo)地址,以調(diào)用64K字節(jié)范圍內(nèi)所指定的子程序。LCALL addr16 ;PC(PC)+3 (本指令為 SP(SP)+1 3字節(jié)指令) (SP)(PC07) SP(SP)+1 (SP)(PC815) PCaddr1688v例:例:若(SP)=80H,標(biāo)號(hào)STRT值為0100H,標(biāo)號(hào)DIR值為8100H,則執(zhí)行指令:v STRT: LCALL DIR v結(jié)果:(SP)=82H,(81H)=03H,(82H) =01H,(PC)=8100Hv執(zhí)行過程:(PC)+3=0103H,先后壓入堆棧(SP)+1=80H+1=

58、81H中壓入03H,(SP)+1=81H+1=82H中壓入01H,(SP)=82H。(DIR)=8100H送PC,(PC)=8100H,程序轉(zhuǎn)向目標(biāo)地址為8100H為首地址的子程序開始執(zhí)行。v注意:注意:這里PC的所有位均可改變,故可尋址64K范圍內(nèi)的存儲(chǔ)單元。89(2)短調(diào)用指令)短調(diào)用指令 短調(diào)用指令提供低11位目標(biāo)地址,因此被調(diào)子程序被限制在以當(dāng)前PC值為首地址的2K字節(jié)地址空間內(nèi) ,高5位地址不變。ACALL addr11 ;PC(PC)+2(本指令 SP(SP)+12個(gè)字節(jié)) (SP) (PC07) SP (SP)+1 (SP) (PC815) PC010 addr010 (PC11

59、15) 不變90v例:例:若(SP)=60H,標(biāo)號(hào)MA值為0123H,子程序SUB位于0345H,則執(zhí)行指令:v MA: ACALL SUBv結(jié)果:結(jié)果:(SP)=62H,內(nèi)部RAM中堆棧區(qū)內(nèi)(61H)=25H, v (62H)=01H,(PC)=0345H v執(zhí)行過程:執(zhí)行過程:(PC)+2=0125H,壓入堆棧(SP)+1=60H+1=61H中壓入25H,(SP)+1=61H+1=62H中壓入01H,(SP)=62H。(SUB)=0345H送PC,(PC)=0345H,程序轉(zhuǎn)向子程序首地址0345H單元開始執(zhí)行。v這里PC值的高5位內(nèi)容不變,僅把123H變成345H,v0123H:0000

60、,0001,0010,0011v0345H:0000,0011,0100,0101v尋址在包含0125H地址在內(nèi)的同一個(gè)2K字節(jié)范圍內(nèi)。91 3、返回類指令、返回類指令 按程序結(jié)構(gòu)在執(zhí)行完子程序后應(yīng)返回到原調(diào)用指令的下一條指令處繼續(xù)往下執(zhí)行。因此,在子程序的結(jié)尾必須設(shè)置返回指令。 (1)子程序返回指令子程序返回指令 功能:從堆棧中彈出由調(diào)用指令壓棧保護(hù)的斷點(diǎn)地址送PC,從而結(jié)束子程序的執(zhí)行,返回到斷點(diǎn)處(即調(diào)用的下一條 指令處)繼續(xù)往下執(zhí)行。 RET ;PC815(SP) SP(SP)-1 PC07(SP) SP(SP)-192例例 若(SP)=82H,(82H)=07H,(81H)=30H,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論