單片機(jī)實(shí)用技術(shù)教程12.3m版第4章mcs-51指令系統(tǒng)_第1頁
單片機(jī)實(shí)用技術(shù)教程12.3m版第4章mcs-51指令系統(tǒng)_第2頁
單片機(jī)實(shí)用技術(shù)教程12.3m版第4章mcs-51指令系統(tǒng)_第3頁
單片機(jī)實(shí)用技術(shù)教程12.3m版第4章mcs-51指令系統(tǒng)_第4頁
單片機(jī)實(shí)用技術(shù)教程12.3m版第4章mcs-51指令系統(tǒng)_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第4章MCS-51 指令系統(tǒng)計算機(jī)是高度自動化的機(jī)器,它能在程序控制下自動進(jìn)行運(yùn)算和事務(wù)處理。整個過程是由CPU 中的控制器控制的。一般情況下,控制器按順序自動連續(xù)地執(zhí)行存放在器中的指令,而每一條指令執(zhí)行某種操作。計算機(jī)能直接識別的只能是由 0 和 1 編碼組成的指令,也稱為機(jī)器語言指令,這種編碼稱為機(jī)器碼,由機(jī)器碼編制的計算機(jī)能識別和執(zhí)行的程序稱為目的程序。4. 1 概述單片機(jī)的每一條指令包含兩個基本部分:操作碼和操作數(shù)。操作碼表明指令要執(zhí)行的操作性質(zhì);操作數(shù)表明參與操作的數(shù)據(jù)或數(shù)據(jù)所存放的地址。MCS-51 機(jī)器語言指令根據(jù)其指令編碼長短的不同有單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令三種格式。

2、1、 單字節(jié)指令單字節(jié)指令格式由 8 位二進(jìn)制編碼表示。有兩種形式:(1)8 位全表示操作碼。例如,空操作指令 NOP,其機(jī)器碼為:(2)8 位編碼中包含操作碼和寄存器編碼。例如:MOV A,Rn這條指令的功能是把寄存器 Rn(n=0,1,2,3,4,5,6,7)中的內(nèi)容送到累加器 A 中去。其機(jī)器碼為:操作碼寄存器編碼假設(shè) n=0,則寄存器編碼為 Rn=000(參見指令表),則指令 MOV A,R0 的機(jī)器碼為 E8H,其中操作 11101 表示執(zhí)行把寄存器中的數(shù)據(jù)傳送到 A 中去的操作。000 為 R0 寄存器編碼。2、 雙字節(jié)指令雙字節(jié)指令格式中,指令的編碼由兩個字節(jié)組成,該指令存放在例

3、如:MOV A,#DATA器時需占用兩個器單元。這條指令的功能是將立即數(shù) DATA 送到累加器 A 中去。假設(shè)立即數(shù) DATA=85H,則其機(jī)器碼為:第一字節(jié)操作碼第二字節(jié)操作數(shù)(立即數(shù) 85H)3、 三字節(jié)指令1 0 0 0 0 1 0 10 1 1 1 0 1 0 01 1 1 0 1Rn0 0 0 0 0 0 0 0三字節(jié)指令格式中第一個字節(jié)為操作碼,其后兩個字節(jié)為操作數(shù)。例如:MOV direct,#DATA這條指令是指立即數(shù) DATA 送到地址為 direct 的單元中去。假設(shè) direct=78H,DATA=80H,則 MOV 78H,#80H 指令的機(jī)器碼為:第一字節(jié)操作碼第二字

4、節(jié)第一操作數(shù)(目的地址)第三字節(jié)第二操作數(shù)(立即數(shù))用二進(jìn)制編碼表示的機(jī)器語言指令由于不便閱讀理解和,因此在微機(jī)控制系統(tǒng)中采用匯編語言(用助記符和專門的語言規(guī)則表示指令的功能和特征)指令來編寫程序。一條匯編語言指令中最多包含四個區(qū)段,如下所示:標(biāo)號: 操作碼助記符 目的操作數(shù),源操作數(shù) ;注釋例如,把立即數(shù) F0H 送累加器的指令為:START :MOVA,#0F0H; 立即數(shù) F0HA標(biāo)號區(qū)段是由用戶定義的符號組成,必須用英文大寫字母開始。標(biāo)號區(qū)段可缺省。若一條指令中有標(biāo)號區(qū)段,標(biāo)號代表該指令第一個字節(jié)所存放的址,在匯編時,把該地址賦值給標(biāo)號。器單元的地址,故標(biāo)號又稱為符號地操作碼區(qū)段是指令

5、要操作的數(shù)據(jù)信息。根據(jù)指令的不同功能,操作數(shù)可以有三個、兩個、一個或沒有操作數(shù)。上例中操作數(shù)區(qū)段包含兩個操作數(shù) A 和#0F0H,它們之間由逗號分隔開。其中第二個操作數(shù)為立即數(shù) F0H,它是用十六進(jìn)制數(shù)表示的以字母開頭的數(shù)據(jù),為區(qū)別于操作數(shù)區(qū)段出現(xiàn)的字符,故以字母開始的十六進(jìn)制數(shù)據(jù)前面都要加 0,把立即數(shù) F0H 寫成 0F0H(這里 H 表示此數(shù)為十六進(jìn)制數(shù),若用二進(jìn)制,則用 B 表示,十進(jìn)制用 D 或省略)。操作數(shù)表示參加操作的數(shù)的本身或操作數(shù)所在的地址。注釋區(qū)段可缺省,對程序功能無任何影響,只用來對指令或程序段作簡要的說明,便于它人閱讀,在調(diào)試程序時也會帶來很多方便。值得注意的是,匯編語

6、言程序不能被計算機(jī)直接識別并執(zhí)行,必須經(jīng)過一個中間環(huán)節(jié)把它翻譯成機(jī)器語言程序,這個中間過程叫做匯編。匯編有兩種方式:機(jī)器匯編和手工匯編。機(jī)器匯編是用專門的匯編程序,在計算機(jī)上進(jìn)行翻譯;手工匯編是編程員把匯編語言指令通過查指令表逐條翻譯成機(jī)器語言指令?,F(xiàn)在主要使用機(jī)器匯編,但有時也用到手工匯編。4 . 2 尋址方式在帶有操作數(shù)的指令中,數(shù)據(jù)可能就在指令中,也有可能在寄存器或器中,甚至在 I/O 口中。1 0 0 0 0 0 0 00 1 1 1 1 0 0 00 1 1 1 0 1 0 1對這此設(shè)備內(nèi)的數(shù)據(jù)要正確進(jìn)行操作就要在指令中其地址,尋找操作數(shù)地址的方法稱為尋址方式。尋址方式的多少及尋址功

7、能強(qiáng)弱是反映指令系統(tǒng)性能優(yōu)劣的重要。MCS-51 指令系統(tǒng)的尋址方式有下列幾種: 立即尋址 直接尋址 寄存器尋址 寄存器間接尋址 基寄存器加變址寄存器間接尋址 相對尋址下面逐一介紹各種尋址方式。1、 立即尋址立即尋址方式是操作數(shù)包含在指令字節(jié)中,指令操作碼后面字節(jié)的內(nèi)容就是操作數(shù)本身,匯編指令中,在一個數(shù)的前面冠以#符號作前綴,就表示該數(shù)為立即尋址。例如:機(jī)器碼74 70助 記 符MOV A,#70H注釋;70HA指令功能是將立即數(shù) 70H 送入累加器A,這條指令為雙字節(jié)指令,操作數(shù)本身 70H 跟在操作碼74H 后面,以指令形式存放在程序器內(nèi)。在MCS-51 指令系統(tǒng)中還有一條立即數(shù)為雙字節(jié)

8、的指令:機(jī)器碼90 82 00助MOV記 符DPTR,#8200H器中占三個注釋;82HDPH,00H DPL單元這條指令存放在程序請注意,在 MCS-51 匯編語言指令中,#data 表示 8 位立即數(shù),#data16 表示 16 位立即數(shù),立即數(shù)前面必須有符號“#”,上述兩例寫成一般格式為:MOV MOV2、A, #data DPTR,#data16直接尋址在指令中含有操作數(shù)的直接地址,該地址了參與操作的數(shù)據(jù)所在的字節(jié)地址或位地址。直接尋址方式中操作數(shù)的空間有三種:部數(shù)據(jù)器的低 128 個字節(jié)單元(00H7FH)MOV A,70H;(70H)A例如:指令功能是把 位地址空間RAM70H 單

9、元中的內(nèi)容送入累加器 A。例如: MOV C,00H 功能寄存器;直接位 00H 內(nèi)容進(jìn)位位特殊功能寄存器只能用直接尋址方式進(jìn)行。例如:MOV IE,#85H;立即數(shù) 85H中斷允許寄存器 IE。IE 為特殊功能寄存器,其字節(jié)地址為A8H。一般在SFR 時,可在指令中直接使用該寄存器的名字來代替地址。3、 寄存器尋址由指令某一個寄存器中的內(nèi)容作為操作數(shù),這種尋址方式稱為寄存器尋址。寄存器尋址按所選定的工作寄存器 R0R7 進(jìn)行操作,指令機(jī)器碼的低 3 位的八種組合 000,001,110,111 分別指明所用的工作寄存器 R0,R1,R6,R7。如:MOV A,Rn(n=07),這 8 條指令

10、對應(yīng)的機(jī)器碼別為 E8HEFH。例如:分INC R0;(R0)1R0指令功能是對寄存器 R0 進(jìn)行操作,使其內(nèi)容加 1。4、 寄存間接尋址由指令某一個寄存器的內(nèi)容作為操作數(shù)的地址,這種尋址方式稱為寄存器間接尋址。這里要注意,在寄存器間接尋址方式中,存放在寄存器中的內(nèi)容不是操作數(shù),而是操作數(shù)所在的存儲器單元地址,寄存器起地址指針的作用,寄存器間接尋址用符號“”表示。寄存器間接尋址只能使用寄存器 R0 或 R1 作為地址指針,來尋址數(shù)據(jù)。RAM(00HFFH)中的寄存器間接尋址也適用于外部RAM,此時可使用 R0,R1 或DPTR 作為地址指針。例如:MOV指令功能是把 R0 所A,R0;((R0

11、))A的RAM 單元中的內(nèi)容送累加器 A。若 R0 內(nèi)容為 60H,而RAM60H 單元中的內(nèi)容是 3BH,則指令 MOV A,R0 的功能是將 3BH 這個數(shù)送到累加器 A,如下圖所示:5、 基址寄存器加變址寄存器間接尋址這種尋址方式用于程序器中的數(shù)據(jù)表格,它把基址寄存器(DPTR 或 PC)和變址寄存器A 的內(nèi)容作為無符號數(shù)相加形成 16 位的地址,程序器中的數(shù)據(jù)表格。例如:MOVC A,MOVC A,APCTR;(DPTR)()A;(PC)()AA 中為無符號數(shù),指令功能是 A 的內(nèi)容和 DPTR 或當(dāng)前 PC 的內(nèi)容相加得到程序址,把該器單元中的內(nèi)容送到 A。6、相對尋址器的有效地這類

12、尋址方式是以當(dāng)前 PC 的內(nèi)容作為址,加上指令中給定的偏移量所得結(jié)果作為轉(zhuǎn)移地址,它只適用于雙字節(jié)轉(zhuǎn)移指令。偏移量是帶符號數(shù),在-128+127 范圍內(nèi),用補(bǔ)碼表示。例如:JC rel;C=1 跳轉(zhuǎn)第一字節(jié)為操作碼,第二字節(jié)就是相對于程序計數(shù)器 PC 當(dāng)前地址的偏移量rel。若轉(zhuǎn)移指令操作碼存放在 1000H 單元,偏移量存放在 1001H 單元,該指令執(zhí)行后 PC 已為 1002H。若偏移量 rel 為 05H,則轉(zhuǎn)移到的目標(biāo)地址為 1007H,即當(dāng) C=1 時,將去執(zhí)行 1007H 單元中的指令。7. 位尋址位地址表示一個可作位尋址的單元,它或者在有兩種方法在一個操作數(shù)中表示一個位地址。R

13、AM 中(字節(jié)32 至47)或者是一個硬件的位。 夠用一個DATA 類型地址規(guī)定一個含有該位的字節(jié),并用位選擇符號點(diǎn)(.),尾隨一個位的識別符(0-7)單獨(dú)該字節(jié)中特定的位。例如,F(xiàn)LAGS.3,40.5。21.5。21H.0 及 ACC.7 是位選擇符的有效用法。您能夠用一個匯編時的表達(dá)式去表達(dá)該字節(jié)地址或該位識別符。匯編程序會把它翻譯成正確的絕對值或可重新定位值。注意,僅在片內(nèi)地址空間某些字節(jié)可作位尋址。如果數(shù)據(jù)地址由一個可重新定位的表達(dá)式所規(guī)定,該所的段必須具有BITADDRESSABLE(可用位尋址的)重新定位類型(見段的論述)。規(guī)定位地址的表達(dá)式一定要是。 要明確規(guī)定位地址。此時該表

14、達(dá)式表示該位空間中(它必須有一個BIT 段類型)的位地址。注意位地址0 至127 映象到片內(nèi)RAM 的字節(jié)32 至47,而位128 至226 映象至硬件寄存器空間可作位尋址的單元。(并非全部單元有定義)。如果在BIT 偽指令的內(nèi)容中用了位地址,那么第一個表達(dá)式必須是一個或是簡單的可重新定位的表達(dá)式。如果在一個期待位地址的地方,位地址被用于一個機(jī)器指令,那么也允許用一個通用的可重新定位的表達(dá)式。下面一些例子表示幾種規(guī)定位的方法。SETB TR1 ;置預(yù)先定義了的位地址TR1(定時器上的運(yùn)行標(biāo)志)SETB ALARM ;置用戶定義的位ALARMSETB 88H.6 ;置88H 單元的位6(定時器1

15、 的運(yùn)行標(biāo)志)CPL FLAGS.ON ;對字節(jié)FLAGS 的ON 置位(定時器1 的運(yùn)行標(biāo)志) SETB 8EH ;對位地址8E 置位(定時器1 的運(yùn)行標(biāo)志)在8051上, 有幾個位地址是預(yù)先以符號定義了的,可將這些符號用在操作數(shù)中。特殊功能寄存器可位尋址,也能用BIT 偽指令自己的定義位地址符號。4 . 3指令系統(tǒng)MCS-51 指令系統(tǒng)有 42 種助記符代表了 33 種操作功能,這是因?yàn)橛械墓δ芸梢杂袔追N助記符(例如數(shù)據(jù)傳送的助記符有 MOV,MOVC,MOVX)。指令功能助記符與操作數(shù)各種可能的尋址方式相結(jié)合,共111 種指令。這 111 種指令中,如果按字節(jié)分類,單字節(jié)指令 49 條,

16、雙字節(jié)指令 45 條,三字節(jié)指令 17 條。若從指令執(zhí)行的時間看,單機(jī)器周期(12 個振蕩器周期)指令 64 條,雙機(jī)器周期指令 45 條,兩條(乘、除)四個機(jī)器周期指令。在 12MHz 晶振的條件下,分別為 1,2 和 4s。由此可見MCS-51 指令系統(tǒng)具有空間效率高和執(zhí)行速度快的特點(diǎn)。4 . 3 . 1 指令分類按指令的功能,MCS-51 指令系統(tǒng)可分為下列五類:1、 數(shù)據(jù)傳送類2、 算術(shù)運(yùn)算類3、 邏輯操作類4、 位操作類5、 控制轉(zhuǎn)移類下面根據(jù)指令的功能特性分類介紹。在分類介紹之前,先把描述指令的一些符號作簡單的說明。Rn表示當(dāng)前工作寄存器區(qū)中的工作寄存器,n 取 07,表示R0R7

17、。direct8 位數(shù)據(jù)單元地址。它可以是一個數(shù)據(jù) RAM 單元(0127)或特殊功能寄存器地址或地址符號。Ri通過寄存器 R1 或 R0 間接尋址的 8 位#data指令中的 8 位立即數(shù)。#data16指令中的 16 位立即數(shù)。數(shù)據(jù) RAM 單元(0255),i=0,1。addR1616 位目標(biāo)地址。用于 LCALL 和LJMP 指令,可指向 64K 字節(jié)程序任何地方。addR1111 位目標(biāo)地址。用于 ACALL 和AJMP 指令,轉(zhuǎn)至當(dāng)前 PC 所在的同一個 2K 字節(jié)程序器地址空間內(nèi)。rel補(bǔ)碼形式的 8 位偏移量。用于相對轉(zhuǎn)移和所有條件轉(zhuǎn)移指令中。偏移量相對于當(dāng)前 PC 計算,在-

18、128+127 范圍內(nèi)取值。DPTR數(shù)據(jù)指針,用作 16 位的地址寄存器。A累加器B特殊功能寄存器,于乘(MUL)和除(DIV)指令中。C進(jìn)位標(biāo)志或進(jìn)位位。器地址空間的bit數(shù)據(jù) RAM 或部分特殊功能寄存器里的可尋址位的位地址。靈活,它可以把數(shù)據(jù)方便地傳送到數(shù)據(jù)器和I/O 口中。數(shù)據(jù)傳送類指令用到的助記符有:MOV,MOVX,MOVC,XCHD,PUSH,POP。數(shù)據(jù)傳送類指令源操作數(shù)和目的操作數(shù)的尋址方式及傳送路徑如圖 3-1 所示。數(shù)據(jù)傳送類指令見表 4-1。MOV Rn,#data MOV direct,A MOV direct,RnMOV direct1,direct2 MOV di

19、rect.,Ri MOV direct,#data MOV Ri,AMOV Ri,direct MOV Ri,#data MOV DPTR ,#data16 MOVC A,TR MOVC A,A+PCMOVX A,Ri MOVX A,DPTRMOVX Ri,A MOVX DPTR,APUSH direct POP direct XCH A,RnXCH A,direct XCH A, RiXCHD A,Ri立即數(shù)送寄存器Rn#data累加器送直接尋址字節(jié)directA寄存器送直接尋址字節(jié)direct (Rn)直接尋址字節(jié)送直接尋址字節(jié)direct1 (direct2)間接 RAM 送直接尋址字節(jié)

20、direct (Ri)立即數(shù)送直接尋址字節(jié)direct#data累加器送片內(nèi) RAM(Ri) A直接尋址字節(jié)送片內(nèi) RAM(Ri) (direct)立即數(shù)送片內(nèi) RAM(Ri) #data16 位立即數(shù)送數(shù)據(jù)指針DPRT#data16 變址尋址字節(jié)送累加器(相對 DPTR) A (A)+(DPTR)變址尋址字節(jié)送累加器(相對 PC)A (A)+(PC) 片外 RAM 送累加器(8 位地址 )A (Ri)片外 RAM(16 位地址)送累加器A(DPTR)累加器送片外 RAM(8 位地址)(Ri) A 累加器送片外 RAM(16 位地址)(DPTR) A直接尋址字節(jié)壓入棧頂SP(SP)+1,(SP

21、)(direct)棧頂彈至直接尋址字節(jié)direct(SP),SP(SP)-1寄存器與累加器交換(A) (Rn)直接尋址字節(jié)與累加器交換(A) (direct)片內(nèi) RAM 與累加器交換(A) (Ri)片內(nèi) RAM 與累加器低 4 位交換(A)3-0(Ri)3-0222323122311111122121112122424242412241224242424242424242412121212執(zhí)行這條指令時,P3.7 引腳上輸出結(jié)果為程序器中 1031H 單元的內(nèi)容送入A。這條指令的優(yōu)點(diǎn)是不改變特殊功能寄存器及 PC 的狀態(tài),根據(jù) A 的內(nèi)容就可以取出表格中的常數(shù)。缺點(diǎn)是表格只能存放在該條查表指

22、令后面 256 個單元之內(nèi),因此表格大小受到限制,而且表格只能被該所使用。第二條:助記符MOVC A,功能A(A)+(DPTR)TR這條指令以 DPTR 作為基址寄存器,A 的內(nèi)容作為無符號數(shù)和 DPTR 的內(nèi)容相加得到一個 16 位的地址,把該地址的程序器單元的內(nèi)容送到累加器 A。例 (DPTR)=8100H,(A)=40H,執(zhí)行下列指令MOVC A,TR結(jié)果為程序器中 8140H 單元的內(nèi)容送入累加器 A。這條指令的執(zhí)行結(jié)果只與指針 DPTR 及累加器A 的內(nèi)容有關(guān),與該指令存放的地址無關(guān)。因此表格大小和位置可在 64KB 程序4、棧操作指令器中任意安排,一個表格可被各個程序塊公用。在 M

23、CS-51RAM 中可以設(shè)定一個后進(jìn)先出的區(qū)域(LIFO),稱為堆棧。在特殊功能寄存器中有一個堆棧指針 SP,它、進(jìn)棧指令助記符PUSH direct棧頂?shù)奈恢?。在指令系統(tǒng)中有下列兩條用于數(shù)據(jù)傳送的棧操作指令:功能SP(SP)+1(SP)(direct)這條指令的功能是首先將棧指針 SP 的內(nèi)容加 1,然后把直接地址的單元內(nèi)容傳送到棧指針SP所指的例RAM 單元中。(SP)=60H,(ACC)=30H,(B)=70H,執(zhí)行下列指令:PUSH ACC ;SP(SP)+1,即 SP61H,61H30HPUSH B;SP(SP)+1,即 SP62H,62H70H、出棧指令助記符POP direct這

24、條指令的功能是棧指針 SP 所指的SP 的內(nèi)容減 1。例:功能direct(SP)SP(SP)-1RAM 單元內(nèi)容送入直接地址的字節(jié)單元中,棧指針(SP)=62H,(62H)=70H,(61H)=30H,執(zhí)行下列命令 POP DPH ;DPH(SP),SP(SP)-1POP DPL; DPL(SP),SP(SP)-1結(jié)果;(DPTR)=7030H,(SP)=60H執(zhí)行 POP direct 指令不影響標(biāo)志,但當(dāng)直接地址為 PSW 時,可以使一些標(biāo)志改變。這也是通過指令強(qiáng)行修改標(biāo)志的法。例:假設(shè)已把 PSW 的內(nèi)容壓入棧頂,用下列指令修改 PSW 內(nèi)容使 FO,RS1,RS0 均為 1,最后用出

25、棧指令把內(nèi)容送回程序狀態(tài)字 PSW,實(shí)現(xiàn)對 PSW 內(nèi)容的修改。MOV ORLPOPR0,SP;取棧指針R0,#38H ;修改棧頂內(nèi)容PSW;修改 PSW5、字節(jié)交換指令這組指令的功能是將累加器 A 的內(nèi)容和源操作數(shù)內(nèi)容相互交換。源操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址等尋址方式。助記符XCH A,RnXCH A, Ri XCH A,direct功能(A)(Rn), n=07(A)(Ri)i=0,1(A) (direct)例 (A)=80H,(R7)=08H,執(zhí)行下列指令:XCHA,R7;(A)(R7)結(jié)果:(A)=08H,(R7)=80H6、半字節(jié)交換指令助記符功能XCHD A,Ri(

26、A30)(Ri)30)i=0,1這條指令將A 的低 4 位和 R0 或 R1的RAM 單元低 4 位相互交換,各自的高 4 位不變。4. 3. 3 算術(shù)運(yùn)算類指令在MCS-51 指令系統(tǒng)中具有單字節(jié)的加、減、乘、除法指令(見表 4-2),其運(yùn)算功能比較強(qiáng)。 算術(shù)運(yùn)算指令執(zhí)行的結(jié)果將影響進(jìn)位(CY)、輔助進(jìn)位(AC)、溢出標(biāo)志位(OV)。但是加 1 和減1 指令不影響這些標(biāo)志。對標(biāo)志位有影響的所有指令列于表 4-3 中,其中包括一些非算術(shù)運(yùn)算的指令在內(nèi)。注意,對于特殊功能寄存器( 寄存器)字節(jié)地址 D0H 或位地址 D0HD7H 進(jìn)行操作也會影響標(biāo)志。由表 4-2 可知,算術(shù)運(yùn)算類可分為 8 組

27、。1、 加法指令A(yù)DD ADD ADDADDA, Rn A,direct A, RiA,#datan=07i=0,1這組加法指令的功能是把所的字節(jié)變量加到累加器 A 上,其結(jié)果放在累加器中。相加過程中如果7 有進(jìn)位(C7=1),則進(jìn)位 CY 置“1”,否則清“0”,如果 D3 有進(jìn)位則輔助進(jìn)位 AC 置“1”,否則清“0”;如果6 有進(jìn)位而7 無進(jìn)位,或者7 有進(jìn)位6 無進(jìn)位,則溢出標(biāo)志 OV 置“1”,否則清“0”。源操作數(shù)有寄存器尋址,直接尋址,寄存器間接尋址和立即尋址等尋址方式。表 4-2算術(shù)運(yùn)算類指令例:(A)=85H,(R0)=20H,(20H)=0AFH,執(zhí)行指令 ADD A,R0

28、運(yùn)算過程:指令助記符(包括尋址方式)說明字節(jié)數(shù)周期數(shù)ADD A,Rn寄存器內(nèi)容送累加器A(A)+(Rn)11ADD A,direct直接尋址送累加器A(A)+(direct)21ADD A,Ri間接尋址 RAM 到累加器A(A)+(Ri)11ADD A,#data立即數(shù)到累加器A(A)+data21ADDC A,Rn寄存器加到累加器(帶進(jìn)位)A(A)+(Rn)+CY11ADDC A,direct直接尋址加到累加器(帶進(jìn)位)A(A)+(direct) +C+CY21ADDC A,Ri間接尋址 RAM 加到累加器(帶進(jìn)位)A(A)+(Ri) +CY11ADDC A,#data立即數(shù)加到累加器(帶進(jìn)

29、位)A(A)+dY21SUBB A,Rn累加器內(nèi)容減去寄存器內(nèi)容(帶借位)A(A)-(Rn) -CY11SUBB A,direct累加器內(nèi)容減去直接尋址(帶借位)A(A)-(direct) -CY21SUBB A,Ri累加器內(nèi)容減去間接尋址(帶借位)A(A)-(Ri) -CY11SUBB A,#data累加器內(nèi)容減去立即數(shù)(帶借位)A(A)-dY21INC A累加器加 1A(A) +111INC Rn寄存器加 1Rn(Rn) +111INC direct直接尋址加 1direct(direct)+121INC Ri間接尋址 RAM 加 1(Ri)(Ri)+111INC DPTR地址寄存器加 1

30、DPTRDPTR+112DEC A累加器減 1A (A)-111DEC Rn寄存器減 1Rn(Rn) -111DEC direct直接尋址地址字節(jié)減 1direct(direct)-121DEC Ri間接尋址 RAM 減 1(Ri)(Ri)-111MUL AB累加器 A 和寄存器 B 相乘AB(A)*(B)114DIV AB累加器 A 除以寄存器 BAB(A)/(B)14DA A對A 進(jìn)行十進(jìn)制調(diào)整11結(jié)果:(A)=34H;CY =1,AC=1;OV=14-3 影響標(biāo)志的指令注:表示指令執(zhí)行時對標(biāo)志有影響(置位或復(fù)位)。對于加法,溢出只能發(fā)生在兩個加數(shù)符號相同的情況。在進(jìn)行帶符號數(shù)的加法運(yùn)算時

31、,溢出標(biāo)志OV 是一個重要的編程標(biāo)志,利用它可以判斷兩個帶符號數(shù)相加和是否溢出(即和大于),當(dāng)溢出時結(jié)果無意義。2、帶進(jìn)位加法指令或小于指令CY標(biāo)志 OVAcADDADDCSUBBMUL0DIV0DARRCRLCSETB C1CLRC0CPLCANL C,bitANL C,/bitOR C,bitOR C,/bitMOV C,bitCJNEADDC ADDCADDCA, Rn n=07 A,directA, Ri i=0,1ADDC A,#data這組帶進(jìn)位加法指令的功能是把所的字節(jié)變量、進(jìn)位標(biāo)志與累回器 A 內(nèi)容相加,結(jié)果留在累加器中。對進(jìn)位標(biāo)志與溢出標(biāo)志的影響與 ADD 指令相同。例:(A

32、)=85H,(20H)=OFFH,CY=1,執(zhí)行指令:ADDC A,20H運(yùn)算過程:結(jié)果:(A)=85(H);CY=1,AC=1,OV=03、增量指令I(lǐng)NC AINC Rnn=07INCINC INCdirectRi i=0,1DPTR這組增量指令的功能把所的變量加 1,若原來為數(shù)據(jù)為 0FFH,執(zhí)行后為 00H,不影響任何標(biāo)志。操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址方式。注意:當(dāng)用本指令修改輸出口Pi(即指令中的 direct 為端口 P0P3,地址分別為 80H,90H,A0H,B0H)時,其功能是修改出口的內(nèi)容。指令執(zhí)行過程中,首先讀入端口的內(nèi)容,然后在 CPU 中加 1,繼而輸出

33、到端口。這里讀入端口的內(nèi)容來自端口的鎖存器而不是端口的引腳。例 (A)=0FFH,(R3)=0FH,(30H)=0F0H(R0)=40H(40H)=00H,執(zhí)行下列指令開始ACC.0ACC.3 大于 9 嗎?INC INC INCINCA;A(A)+1R3 30HR0;R3(R3)+1; 30H(30H)+1.;(R0)(R0)+1Ac=1?結(jié)果:(A)=00H,(R3)=10H,(30H)=F1H,(40H)=01H,不改變PSW 狀態(tài)。4、十進(jìn)制調(diào)整指令DA這條指令對累加器參與的 BCD 碼加法運(yùn)算所獲得的 8 位結(jié)果(在累加器中)進(jìn)行十進(jìn)制調(diào)整, 使累加器中的內(nèi)容調(diào)整為二位 BCD 碼數(shù)

34、。該指令執(zhí)行的過程如圖 4-2 所示。例 (A)=56H,(R5)=67H,執(zhí)行指令: ADD A,R5DA結(jié)果:(A)=23H,CY=1 5、帶進(jìn)位減法指令 SUBB A,Rn n=07 SUBB A,directSUBB A,Rii=0,1SUBB A,#dataACC.4ACC.7 大于 9 嗎?Cy=1?結(jié)束圖 4-2 DA A 指令執(zhí)行示意圖這組帶進(jìn)位減法指令的功能是從累加器中減去指定的變量和進(jìn)位標(biāo)志,結(jié)果在累加器中。進(jìn)行減法過程中如果位 7 需借位,則 CY 置位,否則 CY 清“0”;如果位 3 需借位,則 AC 置位,否則 AC 清“0”;如果位 6 需借位而位 7 不需借拉或

35、者位 7 需借位而位 6 不需借位則溢出標(biāo)志 OV 置位,否則溢出標(biāo)志清“0”。在帶符號數(shù)運(yùn)算時,只有當(dāng)符號不相同的兩數(shù)相減時才會發(fā)生溢出。6、減 1 指令DEC DEC DECDECARn direct Rin=07i=0,1這組指令的功能是將指定的變量減 1。若原來為 OOH,減 1 后下溢為 OFFH,不影響標(biāo)志位。當(dāng)指令中的直接地址 direct 為 P0P3 端口(即 80H,90H,A)H,BOH)時,指令可用來修改(A)+60HA(A)+06HA一個輸出口的內(nèi)容,也是一條具有讀一個修改一寫功能的指令。指令執(zhí)行時,首先讀入端口的原始數(shù)據(jù),在 CPU 中執(zhí)行減 1 操作,然后再送到端

36、口。注意:此時讀入的數(shù)據(jù)來自端口的鎖存器而不是從引腳讀入。例:(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,執(zhí)行指令:DEC DEC DECDECAR7; A(A)-1; R7(R7)-130H ; 30H(30H)-1R1 ;(R7)(R7)-1結(jié)果:(A)=0EH,(R7)=18H;(30H)=0FFH;(40H)=0FFH,不影響標(biāo)志。7、乘法指令MUL AB這條指令的功能是把累加器 A 和寄存器 B 中的無符號 8 位整數(shù)相乘,其 16 位積的低位字節(jié)在累加器 A 中,字節(jié)在 B 中。如果積大于 255(0FFH),則溢出標(biāo)志 OV 置位

37、,否則 OV 清“0”。進(jìn)位標(biāo)志總是清“0”。例:(A)=50H,(B)=0A0H,執(zhí)行指令: MUL AB結(jié)果:(B)=32H,(A)=00H(即積為 3200H)。CY=0,OV=1。8、除法指令DIV AB這條指令的功能是把累加器 A 中的 8 位無符號整數(shù)除以寄存器 B 中的 8 位無符號整數(shù),所得商的整數(shù)部分存放在累加器 A 中,余數(shù)在寄存器B 中。進(jìn)位CY 和溢出標(biāo)志 OV 清“0”。如果原來 B 中的內(nèi)容為 0(被零除),則結(jié)果 A 和B 中內(nèi)容不定,且溢出標(biāo)志 OV 置位,在任何情況下, CY 都清“0”。例:(A)=0FBH,(B)=12H,執(zhí)行指令。DIVAB結(jié)果:(A)=

38、0DH,(B)=11H,CY=0,OV=0。4. 3. 4邏輯操作類指令邏輯操作類指令見表 4-4表 4-4 邏輯運(yùn)算類指令XRL direct,A累加器“異或”到直接尋址direct(direct)指令助記符(包括尋址方式)說明字節(jié)數(shù)周期數(shù)ANL A,Rn寄存器“與”到累加器A(A)(Rn)11ANL A,direct直接尋址“與”到累加器A(A)(direct)21ANL A,Ri間接尋址 RAM“與”到累加器A(A)(Ri)11ANL A,#data立即數(shù)“與”到累加器A(A)data21ANL direct,A累加器“與”到直接尋址direct(direct)(A)21ANL dire

39、ct,#data立即數(shù)“與”到直接尋址direct(direct)data32ORL A,Rn寄存器“或”到累加器A(A)(Rn)11ORL A,direct直接尋址“或”到累加器A(A)(direct)21ORL A,Ri間接尋址 RAM“或”到累加器A(A)(Ri)11ORL A,#data立即數(shù)“或” 累加器A(A)data21ORL direct,A累加器“或”到直接尋址direct(direct) (A)21ORL direct,#data立即數(shù)“或”到直接尋址direct(directdata32XRL A,Rn立即數(shù)“異或”到累加器A(A)(Rn)11XRL A,direct直接

40、尋址“異或”到累加器A(A)(direct)21XRL A,Ri間接尋址 RAM“異或”累加器A(A)(Ri)11XRL A,#data立即數(shù)“異或”到累加器A(A)data21CPL A這條指令的功能是將累加器 A 的每一位邏輯取反,原來為 1 的位變原來為 0 的位變?yōu)?1,不影響標(biāo)志。例:(A)=10101010B,執(zhí)行指令:CPL=A結(jié)果:(A)=01010101B、左循環(huán)移位指令1) 累加器內(nèi)容循環(huán)RLA這條指令的功能是把累加器 ACC 的內(nèi)容向左循環(huán)移 1 位,位 7 循環(huán)移入位 0,如下圖所示,不影響標(biāo)志。2) 累加器帶進(jìn)位左循環(huán)移位指令RLCA這條指令的功能是將累加器 ACC

41、的內(nèi)容和進(jìn)位標(biāo)志一起向左循環(huán)移 1 位,ACC 的位 7 移入進(jìn)位位CY,CY 移入 ACC 的 0 位,不影響其他標(biāo)志。、右循環(huán)移位指令1) 累加器內(nèi)容循環(huán)右移指令RR A這條指令的功能是將累加器 ACC 的內(nèi)容向右循環(huán)移 1 位,ACC 的 0 循環(huán)移入 ACC 的位 7,不影響標(biāo)志。2) 累加器帶進(jìn)位右循環(huán)移位指令RRCA這條指令的功能是將累加器 ACC 的內(nèi)容和進(jìn)位標(biāo)志 CY 一起向右面循環(huán)移一位,ACC 的位 0 移入CY,CY 移入 ACC 的位 7。、累加器半字節(jié)交換指令SWAPA這條指令的功能是將累加器 ACC 的高半字節(jié)(ACC.7ACC.4)和低半字節(jié)(ACC.3ACC.0

42、)互換。例(A)=0C5H,執(zhí)行指令SWAP A結(jié)果:(A)=5CH。2、邏輯與指令A(yù)NL ANL ANL ANL ANLANLA, Rn A,direct A,Ri A,#data direct, Adirect,#datan=07i=0,1這組指令的功能是在的變量之間以位為基礎(chǔ)的邏輯與操作,若結(jié)果存放在目的的變量中。操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等尋址方式。當(dāng)這條指令用于修改一個輸出口時,作為原始口數(shù)據(jù)的值將從輸出口數(shù)據(jù)鎖存器(P0P3)讀入,而不是讀引腳狀態(tài)。例:ANLANL ANL ANL ANL ANLA,R1 A,70HA,R0 A,#07H 70H,AP1

43、 #0F0H;A(A)(R1);A(A) (70H);A(A) (R0);A(A) 07H;70H(70H) (A);P1(P1) F0H設(shè)(A)=07H,(R0)=0FDH 執(zhí)行指令A(yù)NL A,R00 0 0 0 0 1 1 1) 1 1 1 1 1 1 0 10 0 0 0 0 1 0 1結(jié)果:(A)=05H3、邏輯或指令ORL ORLORLA, Rnn=07 A,directA,Ri i=0,1ORL ORLORLA,#data direct, Adirect,#data這組指令的功能是在所的變量之間執(zhí)行以位為基礎(chǔ)的邏輯或操作,結(jié)果存到目的變量中去。操作數(shù)有寄存器尋址、直接尋址、寄存器間

44、接尋址和立即尋址方式。同 ANL 類似,用于修改輸出口數(shù)據(jù)時,原始數(shù)據(jù)值為口鎖存器內(nèi)容。;A(A)(R7);A(A)(70H);A(A) (R1);A(A) 03H;70H(70H) 7FH;78H(78H) (A)例:ORLORL ORL ORL ORLORLA,R7 A,70HA,R1 A,#03H 70H,#7FH78H,A設(shè)(P1)=05H,(A)=33H 執(zhí)行指令ORL P1,A0 0 0 0 0 1 0 1)0 0 1 1 0 0 1 10 0 1 1 0 1 1 1結(jié)果:(P1)=37H4、邏輯異或指令XRL XRL XRL XRL XRLXRLA, Rnn=07 A,direc

45、tA,Rii=0,1 A,#datadirect, Adirect,#data這組指令的功能是在所的變量之間執(zhí)行以位為基礎(chǔ)的邏輯異或操作,結(jié)果存放到目的變量中去。操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等尋址方式。對輸出口P1(i=0,1,2,3)與 ANL 指令一樣是對口鎖存器內(nèi)容讀出修改。例:XRL A,R4;A(A)1 0 0 1 0 0 0 0結(jié)果:ANL C,ORL C,bitORL C,4. 3 . 6控制轉(zhuǎn)移類指令1、無條件轉(zhuǎn)移指令絕對轉(zhuǎn)移指令助記符AJMP addR11這是 2K 字節(jié)范圍內(nèi)的無條件轉(zhuǎn)跳指令,把程序的執(zhí)行轉(zhuǎn)移到指定的地址。該指令在運(yùn)行時先將PC+2

46、 , 然 后 通 過 把 指 令 中 的 a0 ( PC10a10) 得 到 跳 轉(zhuǎn) 目 的 地 址 ( 即 0PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0)送入 PC 。目標(biāo)地址必須與 AJMP 后面一條指令的第一個字節(jié)在同一個 2K 區(qū)域的器區(qū)內(nèi)。如果把單片機(jī) 64KB 尋址區(qū)分成 32 頁(每頁 2KB),則PC15-PC11(00000B-11111B)稱為頁面地址(即:0 頁31 頁),a10a0 稱為頁內(nèi)地址。但應(yīng)注意:AJMP指令的目標(biāo)轉(zhuǎn)移地址不是和 AJMP 指令地址在同一個 2KB 區(qū)域,而是應(yīng)和 AJMP 指令取出后的 PC 地址(

47、即:PC +2)在同一個 2KB 區(qū)域。例如:若AJMP 指令地址為 2FFEH,則 PC+2=3000H,故目標(biāo)轉(zhuǎn)移地址必在 3000H-37FFH 這個 2KB 區(qū)域內(nèi)相對轉(zhuǎn)移(短跳轉(zhuǎn))指令SJMP rel這是無條件轉(zhuǎn)跳指令,執(zhí)行時在 PC 加 2 后,把指令中補(bǔ)碼形式的偏移量值加到 PC 上,并計算出轉(zhuǎn)向目標(biāo)地址。因此,轉(zhuǎn)向的目標(biāo)地址可以在這條指令前 128 字節(jié)到后 127 字節(jié)之間。該指令使用時很簡單,程序執(zhí)行到該指令時就跳轉(zhuǎn)到標(biāo)號 rel 處執(zhí)行。例:KRD: SJMP rel;如果 KRD 標(biāo)號值為 0100H(即 SJMP 這條指令的機(jī)器碼存放于 0100H 和 0101H 這

48、兩個單元中);如需要跳轉(zhuǎn)到的目標(biāo)地址為 0123H,則指令的第二個字節(jié)(相對偏移量)應(yīng)為:rel=0123H-0102H=21H長跳轉(zhuǎn)指令LJMP addR16執(zhí)行這條指令時把指令的第二和第三字節(jié)分別裝入 PC 的和低位字節(jié)中,無條件地轉(zhuǎn)向指定地址。轉(zhuǎn)移的目標(biāo)地址可以在 64K 程序例:執(zhí)行指令LJMP 8100H器地址空間的任何地方,不影響任何標(biāo)志。不管這條跳轉(zhuǎn)指令存放在什么地方,執(zhí)行時將程序轉(zhuǎn)移到 8100H。這和 AJMP,SJMP 指令是有差別的。 散轉(zhuǎn)指令JMP TR這條指令的功能是把累加器中 8 位無符號數(shù)與數(shù)據(jù)指針 DPTR 中的 16 位數(shù)相加,將結(jié)果作為下條指令地址送入 PC

49、,不改變累加器和數(shù)據(jù)指針內(nèi)容,也不影響標(biāo)志。利用這條指令能實(shí)現(xiàn)程序的散轉(zhuǎn)。例 如果累加器 A 中存放待處理命令(07),程序器中存放著標(biāo)號為 PMTB 的轉(zhuǎn)移表首址,則執(zhí)行下面的程序,將根據(jù) A 中命令轉(zhuǎn)向相應(yīng)令處理程序。PM:MOV R1 ,A;(A)*3ARLAADD A,R1MOV DPTR,#PMTB; 轉(zhuǎn)移表首址DPTRJMP TR;據(jù) A 值跳轉(zhuǎn)到不同;轉(zhuǎn)向命令 0 處理;轉(zhuǎn)向命令 1 處理;轉(zhuǎn)向命令 2 處理;轉(zhuǎn)向命令 3 處理;轉(zhuǎn)向命令 4 處理;轉(zhuǎn)向命令 5 處理;轉(zhuǎn)向命令 6 處理;轉(zhuǎn)向命令 7 處理PMTB:LJMP LJMP LJMP LJMP LJMP LJMP LJ

50、MPLJMPPM0 PM1 PM2 PM3 PM4 PM5 PM6PM72、條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是依某種特定條件轉(zhuǎn)移的指令。條件滿足時轉(zhuǎn)移(相當(dāng)于一條相對轉(zhuǎn)移指令),條件不滿足時則順序執(zhí)行下面的指令。目的地址在下一條指令的起始地址為中心的 256 個字節(jié)范圍中(-128+127)。當(dāng)條件滿足時,先把 PC 加到指向下一條指令的第一個字節(jié)地址,再把有符號的相對偏移量加到 PC 上,計算出轉(zhuǎn)向地址。助記符JZ JNZ轉(zhuǎn)移條件(A)=0(A)0relrel上述兩條指令的功能分別是:JZ rel ; 如果累加器ACC 的內(nèi)容為零,則執(zhí)行轉(zhuǎn)移,跳到標(biāo)號rel 處執(zhí)行,不為零就執(zhí)行下一條指令。JNZ

51、rel;如果累加器 ACC 的內(nèi)容不為零,則執(zhí)行轉(zhuǎn)移,跳到標(biāo)號 rel 處執(zhí)行,為零就執(zhí)行下一條指令。3、比較不相等轉(zhuǎn)移指令CJNE CJNE CJNECJNEA,direct,rel A,#data,rel Rn,#data,relR1,#data,rel這組指令的功能是比較前面兩個操作數(shù)的大小。如果它們的值不相等則轉(zhuǎn)移。在 PC 加到下一條指令的起始地址后,通過把指令最后一個字節(jié)的有符號的相對偏移量加到 PC 上,并計算出轉(zhuǎn)向地址。如果第一個操作數(shù)(無符號整數(shù))小于第二個操作數(shù)則進(jìn)位標(biāo)志 CY 置“1”,否則 CY 清“0”。不影響任何一個操作數(shù)的內(nèi)容。操作數(shù)有寄存器尋址、直接尋址,寄存器

52、間接尋址和立即尋址等方式。指令使用起來很簡單,就是將兩個操作數(shù)比較,不等就跳到標(biāo)號 rel 處執(zhí)行,相等就執(zhí)行下一條指令。4、減 1 不為 0 轉(zhuǎn)移指令DJNZ Rn,rel DJNZ direct,rel這組指令把源操作數(shù)減 1,結(jié)果回送到源操作數(shù)中去,如果結(jié)果不為 0 則轉(zhuǎn)移,跳到標(biāo)號 rel 處執(zhí)行,等于 0 就執(zhí)行下一條指令。源操作數(shù)有寄存器尋址和直接尋址方式。該指令通常用于實(shí)現(xiàn)循環(huán)計數(shù)。例 延時程序:START: SETBP1.130H ,#03H31HM,#0F0H31H,DL1;P1.11;30H03H(置初值);31HF0H(置初值);31H(31H)1,如(31H)不為零,則

53、再轉(zhuǎn) DL1 執(zhí)行;如(31H)為零,則執(zhí)行后面的指令; 30H(30H)1,如(30H)不為零,則轉(zhuǎn) DL0 執(zhí)行;如(30H)為零,則執(zhí)行后面的指令; P1.1 求反DL:DL0: DL1MOVMOV DJNZDJNZ30H,DL0CPL P1.1的功能是通過延時,在 P1.1 輸出一個,可以用改變 30H 和 31H 的初值,來改變延這時時間實(shí)現(xiàn)改變的頻率。5、調(diào)用及返回指令在程序設(shè)計中,常常把具有一定功能的公用程序段編制成子程序。當(dāng)主程序轉(zhuǎn)至子程序時用調(diào)用指令,而在子程序的最后安排一條返回指令,使執(zhí)行完子程序后再返回到主程序。為保證正確返回,每次調(diào)用子程序時自動將下條指令地址保存到堆棧

54、,返回時按先進(jìn)后出原則再把地址彈出到 PC 中。調(diào)用及返回指令見表 4-6。、絕對調(diào)用指令A(yù)CALL addR11這條指令無條件地調(diào)用地址指定的子程序。指令執(zhí)行時 PC 加 2,獲得下條指令的地址,并把這16 位地址壓入堆棧,棧指針加 2。然后把指令中的 a10a0 值送入 PC 中的 P10P0 位,PC 的P15P11不變,獲得子程序的起始地址必須與 ACALL 后面一條指令的第一個字節(jié)在同一個 2K 區(qū)域的區(qū)內(nèi)。指令的操作碼與被調(diào)用的子程序的起始地址的頁號有關(guān)。在實(shí)際使用時,addR11 可用標(biāo)號代替,上述過程多由匯編程序去自動完成。應(yīng)該注意的是,該指令只能調(diào)用當(dāng)前指令 2K 字節(jié)范圍內(nèi)

55、的子程序,這一點(diǎn)從調(diào)用過程也可發(fā)現(xiàn)。器例 設(shè)(SP)=60H,標(biāo)號地址 HERE 為 0123H,子程序 SUB 的HERE: ACALL SUB地址為 0345H,執(zhí)行指令:結(jié)果:(SP)=62H,堆棧區(qū)內(nèi)(61H)=25H,(62H)=01H,(PC)=0345H指令的機(jī)器碼為 71H,45H。、長調(diào)用指令LCALL addR16這條指令執(zhí)行時把 PC 內(nèi)容加 3 獲得下一條指令首地址,并把它壓入堆棧(先低字節(jié)后高字節(jié)),然后把指令的第二、第三字節(jié)(a15a8,a7a0)裝入 PC 中,轉(zhuǎn)去執(zhí)行該地址開始的子程序。這條調(diào)用指令可以調(diào)用存放在器中 64K 字節(jié)范圍內(nèi)任何地方的子程序。指令執(zhí)行

56、后不影響任何標(biāo)志。在使用該指令時 addR16 一般采用標(biāo)號形式,上述過程多由匯編程序去自動完成。例 設(shè)(SP)=60H,標(biāo)號地址 START 為 0100H,標(biāo)號 MIR 為 8100H,執(zhí)行指令:表 4-6 控制程序轉(zhuǎn)移指令指令助記符(包括尋址方式)說明字節(jié)數(shù)周期數(shù)LJMP addr16長轉(zhuǎn)移PCaddr16324AJMP addr11絕對轉(zhuǎn)移PC100addr11224SJMP rel短轉(zhuǎn)移(相對偏移)PC(PC)+rel224JMPTR相對 DPTR 的間接轉(zhuǎn)移PC(A)+(DPTR)124JZrel累加器為零則轉(zhuǎn)移PC(PC)+2,若(A)=0則 PC(PC)+rel224JNZre

57、l累加器為非零則轉(zhuǎn)移PC(PC)+2,若(A)0則 PC(PC)+rel224CJNE A,direct,rel比較直接尋址字節(jié)和 A 不相等則轉(zhuǎn)移PC(PC)+3,若(A)(direct)則 PC(PC)+rel*324CJNE A,#data,rel比較立即數(shù)和 A 不相等則轉(zhuǎn)移PC(PC)+3,若(A)(data)則 PC(PC)+rel*324CJNE Rn,#data,rel比較立即數(shù)和寄存器不相等則轉(zhuǎn)移PC(PC)+3,若(Rn)(data)則 PC(PC)+rel*324CJNE Ri,#data,rel比較立即數(shù)和間接尋址 RAM 不相等則轉(zhuǎn)移PC(PC)+3,若(Ri)(da

58、ta)則 PC(PC)+rel*324DJNZRn,rel寄存器減 1 不為零則轉(zhuǎn)移PC(PC)+2,Rn(Rn)-1, 若(Rn)0,則 PC(PC)+rel224DJNZdirect,rel直接尋址字節(jié)減1 不為零則轉(zhuǎn)移PC(PC)+3 direct(direct)-1若(direct)0,則 PC(PC)+rel324ACALL addrR11絕對調(diào)用子程序PC (PC)+2,SP(SP)+1SP(PC)L,SP(SP)+1 (SP)(PC)H,PC100addR11224LCALL addrR16長調(diào)用子程序PC(PC)+3,SP(SP)+1SP(PC)L,SP(SP)+1 (SP)(

59、PC)H,PC100addR16324RET從子程序返回PCH(SP),SP(SP)-1PCL(SP),SP(SP)-1124RETI從中斷返回PCH(SP),SP(SP)-1PCL124* 表示如果第一操作數(shù)小于第二操作數(shù)則 CY 置位,否則CY 清 0.START:LCALL MIR結(jié)果:(SP)=62H,(61H)=03H,(62H)=01H,(PC)=8100H。3、返回指令子程序返回指令RET子程序返回指令是把棧頂相鄰兩個單元的內(nèi)出送到 PC,SP 的內(nèi)容減 2,程序返回到 PC 值所指的指令處執(zhí)行。RET 指令通常安排在子程序的末尾,使程序能從子程序返回到主程序。例 設(shè)(SP)=6

60、2H,(62H)=07H,(61H)=30H,執(zhí)行指令 RET結(jié)果:(SP)=60H,(PC)=0730H,CPU 從 0730H 開始執(zhí)行程序。中斷返回指令 RETI這條指令的功能與 RET 指令相類似。通常安排在中斷服程序的最后,它的應(yīng)用在中斷一節(jié)中討論。4、空操作指令 NOP空操作也是 CPU 控制指令,它沒有使程序轉(zhuǎn)移的功能,一般用于單獨(dú)分類。控制轉(zhuǎn)移指令見表 4-6延時。因僅此一條,故不4 . 4偽指令上一節(jié)介紹的 MCS-51 指令系統(tǒng)中每一條指令都是用意義明確的助記符來表示的。這是因?yàn)楝F(xiàn)代計算機(jī)一般都配備匯編語言,每一條語句就是一條指令,命令 CPU 執(zhí)行一定的操作,完成規(guī)定的功

溫馨提示

  • 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

提交評論