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

下載本文檔

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

文檔簡介

1、 【主要內(nèi)容主要內(nèi)容】 1.掌握單片機(jī)源操作數(shù)和目的操作數(shù)的尋址方式,指令格式操作碼和操作數(shù),數(shù)據(jù)傳送指令、算術(shù)運(yùn)算類指令、邏輯運(yùn)算及位移指令、控制轉(zhuǎn)移類指令等指令系統(tǒng)。 2.熟悉指令描述符號,入棧和出棧操作。 3.了解十進(jìn)制調(diào)整指令和空操作指令。 【重點(diǎn)與難點(diǎn)重點(diǎn)與難點(diǎn)】 1.重點(diǎn):指令格式和指令系統(tǒng) 2.難點(diǎn):源操作數(shù)和目的操作數(shù)的尋址方式第第3章章 MCS-51的指令系統(tǒng)和匯編語言程序設(shè)計(jì)的指令系統(tǒng)和匯編語言程序設(shè)計(jì)2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)2 MCS-51MCS-51的的7 7種尋址方式種尋址方式. .尋址方式,是學(xué)習(xí)指令尋址方式,是學(xué)習(xí)指令的前提。的前提。 MCS

2、-51 MCS-51有有111111條指令,其中條指令,其中4949條單字節(jié)指令條單字節(jié)指令,4545條雙字節(jié)指令條雙字節(jié)指令,1717條三字節(jié)指令條三字節(jié)指令;按運(yùn)算速度分類,;按運(yùn)算速度分類,有有6464條單周期條單周期指令,指令,4545條雙周期條雙周期指令,指令,2 2條四周期條四周期指指令。令。 2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)3指令指令: :是規(guī)定計(jì)算機(jī)是規(guī)定計(jì)算機(jī)進(jìn)行操作進(jìn)行操作的的命令命令。指令系統(tǒng)指令系統(tǒng): :計(jì)算機(jī)計(jì)算機(jī)能夠執(zhí)行能夠執(zhí)行的各種指令的的各種指令的集合集合。MCS-51MCS-51指令系統(tǒng)是最普遍的。指令系統(tǒng)是最普遍的。 機(jī)器指令與匯編語言指令機(jī)器

3、指令與匯編語言指令機(jī)器指令機(jī)器指令: :以以二進(jìn)制代碼二進(jìn)制代碼表達(dá)表達(dá), ,能直接被計(jì)算機(jī)能直接被計(jì)算機(jī)所所識別識別和和執(zhí)行執(zhí)行。指令由指令由操作碼操作碼和和操作數(shù)操作數(shù)兩部分組成。兩部分組成。3.1MCS-51單片機(jī)的指令系統(tǒng)單片機(jī)的指令系統(tǒng)2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)4機(jī)器指令機(jī)器指令難以被人們難以被人們理解理解、記憶記憶與與使用使用匯編語言指令匯編語言指令: :用便于用便于記憶記憶與與理解理解的的助記符助記符和和符符號地址號地址來表達(dá)的來表達(dá)的指令指令。指令的表示形式。指令的表示形式。 兩部分組成,即兩部分組成,即操作碼操作碼和和操作數(shù)操作數(shù)。 操作碼操作碼: :規(guī)定

4、指令進(jìn)行什么操作規(guī)定指令進(jìn)行什么操作操作數(shù)操作數(shù): :指令操作的對象指令操作的對象2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)5使使P1.0P1.0清零的匯編語言指令如表中第清零的匯編語言指令如表中第2 2列第列第2 2行行所示所示, ,其中助記符其中助記符CLRCLR(clearclear縮寫)就是操作碼縮寫)就是操作碼, ,P1.0P1.0就是符號地址。就是符號地址。 匯編語言指令與機(jī)器指令之匯編語言指令與機(jī)器指令之間有間有一一對應(yīng)一一對應(yīng)的關(guān)系。的關(guān)系。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)6指令由指令由操作碼操作碼和和操作數(shù)操作數(shù)組成組成, ,操作數(shù)是操作數(shù)是可選項(xiàng)可選項(xiàng),

5、,還有還有源源、目目之分之分, ,指令格式舉例:指令格式舉例:操作碼操作碼 目的操作數(shù)目的操作數(shù), , 源操作數(shù)源操作數(shù) MOV MOV A,A,#30H#30H操作碼操作碼: :由由MCS-51MCS-51關(guān)鍵字表示的關(guān)鍵字表示的字符串字符串, ,用來用來指指示指令的操作功能示指令的操作功能。操作碼操作碼與與操作數(shù)操作數(shù)之間必須用之間必須用空格空格分隔。分隔。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)7操作數(shù)操作數(shù): :指示參加指示參加指令操作指令操作的的數(shù)據(jù)數(shù)據(jù)或或數(shù)據(jù)的地址數(shù)據(jù)的地址, ,與與操作碼操作碼一起確定了指令所要執(zhí)行的一起確定了指令所要執(zhí)行的具體操作具體操作。操作數(shù)如果有操

6、作數(shù)如果有2 2個(gè)個(gè)或或多個(gè)多個(gè), ,則操作數(shù)之間必須用則操作數(shù)之間必須用逗號逗號分隔。操作數(shù)可以是分隔。操作數(shù)可以是寄存器名寄存器名、常數(shù)常數(shù)、標(biāo)號名標(biāo)號名;還可是還可是表達(dá)式表達(dá)式, ,如如ADD AADD A, ,a a+1+1; ;也可用也可用PCPC的當(dāng)前值的當(dāng)前值“$ $”, ,如如SJMP $SJMP $。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)8指令系統(tǒng)中所用符號的說明指令系統(tǒng)中所用符號的說明1.Rn1.Rn:工作寄存器:工作寄存器n n為為0-70-72.#data2.#data:8 8位立即數(shù),范圍位立即數(shù),范圍00H-FFH00H-FFH3.Direct3.Dire

7、ct:8 8位位直接地址直接地址,也可以為,也可以為SFRSFR中中的一個(gè)的一個(gè)4.Ri4.Ri:表示寄存器間接尋址,:表示寄存器間接尋址,i=0i=0、1 15.#data165.#data16:1616位立即數(shù)位立即數(shù)6.DPTR6.DPTR:表示以:表示以DPTRDPTR為數(shù)據(jù)指針的間接尋址為數(shù)據(jù)指針的間接尋址7.Bit7.Bit:位尋址:位尋址指令系統(tǒng)標(biāo)識符指令系統(tǒng)標(biāo)識符98.addr118.addr11、addr16addr16:1111、1616位目標(biāo)地址位目標(biāo)地址9.Rel9.Rel:8 8位帶符號地址偏移量位帶符號地址偏移量10.$:10.$:當(dāng)前當(dāng)前指令指令的的地址地址P84

8、P84 2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)10指令的分類指令的分類1.1.數(shù)據(jù)傳送指令(數(shù)據(jù)傳送指令(2828) 主要用于主要用于單片機(jī)片內(nèi)單片機(jī)片內(nèi)RAMRAM和和特殊功能寄存器特殊功能寄存器SFRSFR之之間的間的數(shù)據(jù)數(shù)據(jù)傳送,也可在傳送,也可在片內(nèi)片內(nèi)和和片外片外的存儲(chǔ)單元中傳送,的存儲(chǔ)單元中傳送,傳送結(jié)束后傳送結(jié)束后源地址源地址的的操作數(shù)操作數(shù)不被破壞,不被破壞,數(shù)值數(shù)值不變。不變。2.2.算術(shù)運(yùn)算指令(算術(shù)運(yùn)算指令(2424) 用于對用于對兩個(gè)操作數(shù)兩個(gè)操作數(shù)進(jìn)行進(jìn)行加加、減減、乘乘、除除等算術(shù)運(yùn)等算術(shù)運(yùn)算。結(jié)果放在算。結(jié)果放在A A里面。里面。2022-2-11嵌入式應(yīng)

9、用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)113.3.邏輯操作和環(huán)移指令(邏輯操作和環(huán)移指令(2525) 邏輯操作邏輯操作結(jié)果結(jié)果也放在也放在累加器累加器A A中,環(huán)移是對中,環(huán)移是對A A中數(shù)中數(shù)進(jìn)行操作,有進(jìn)行操作,有左右左右和和是否帶進(jìn)位(是否帶進(jìn)位(CFCF)之分。之分。4.4.控制轉(zhuǎn)移指令(控制轉(zhuǎn)移指令(1717)分為分為條件轉(zhuǎn)移條件轉(zhuǎn)移,無條件轉(zhuǎn)移無條件轉(zhuǎn)移,調(diào)用調(diào)用和和返回返回等。等。目的:改變程序執(zhí)行的流向目的:改變程序執(zhí)行的流向。實(shí)現(xiàn)方法:實(shí)現(xiàn)方法:通過通過改變改變程序計(jì)數(shù)器程序計(jì)數(shù)器PCPC中的中的值值。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)12 5. 5.位操作指令(位操作指令(171

10、7)布爾變量操作指令,分為布爾變量操作指令,分為位傳送位傳送、位置位位置位、位位運(yùn)算運(yùn)算和和位控制轉(zhuǎn)移位控制轉(zhuǎn)移指令指令四類四類。通過通過對字節(jié)當(dāng)中的某一位對字節(jié)當(dāng)中的某一位來進(jìn)行來進(jìn)行相應(yīng)相應(yīng)的的操作操作。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)13尋址方式尋址方式尋址方式尋址方式: :尋找尋找操作數(shù)地址操作數(shù)地址的方式。尋址方式越的方式。尋址方式越豐富豐富,CPUCPU的功能就的功能就越強(qiáng)越強(qiáng), ,靈活性就靈活性就越大越大。MCS-51MCS-51單片機(jī)的指令系統(tǒng)中單片機(jī)的指令系統(tǒng)中, ,設(shè)有設(shè)有7 7種種尋址方式尋址方式, ,在同一條指令中的在同一條指令中的源源、目操作數(shù)目操作數(shù),

11、 ,可能有不同的可能有不同的尋址尋址方式方式, ,下面以源操作數(shù)尋址方式為例來加以闡述。下面以源操作數(shù)尋址方式為例來加以闡述。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)14立即尋址立即尋址是指是指參加運(yùn)算的操作數(shù)參加運(yùn)算的操作數(shù)已經(jīng)在指令中已經(jīng)在指令中直接給出直接給出, ,這種形式的這種形式的操作數(shù)操作數(shù)稱為稱為立即數(shù)立即數(shù)。立即數(shù)要。立即數(shù)要前綴前綴“# #”, ,以區(qū)別以區(qū)別直接地址直接地址。立即尋址一般為立即尋址一般為雙字節(jié)指令雙字節(jié)指令, ,如第如第1 1條指令條指令, ,操作操作碼碼7474占一個(gè)字節(jié)占一個(gè)字節(jié), ,操作數(shù)操作數(shù)3030為為8 8位位立即數(shù)立即數(shù), ,也占一個(gè)字也

12、占一個(gè)字節(jié)。節(jié)。1 1 立即尋址立即尋址2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)15設(shè)內(nèi)部設(shè)內(nèi)部RAMRAM中中33H33H單元中內(nèi)容為單元中內(nèi)容為44H44H,34H34H單元中內(nèi)單元中內(nèi)容為容為0AFH0AFH,R0R0中內(nèi)容為中內(nèi)容為33H33H,R1R1中內(nèi)容為中內(nèi)容為00H00H,給出以,給出以下每一條指令執(zhí)行后下每一條指令執(zhí)行后A A中的值。中的值。MOV A, #34HMOV A, #34HMOV A, 34HMOV A, 34HMOV A, R1MOV A, R1( (將將R1R1中的內(nèi)容給中的內(nèi)容給A A,(,( R1R1 )()(A A)) )MOV A,R0 MOV

13、 A,R0 ( (間接地址的內(nèi)容給間接地址的內(nèi)容給A A ,( R0( R0 ) ) (A A)) )2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)16直接尋址直接尋址是指是指指令中指令中直接給出直接給出操作數(shù)的地址操作數(shù)的地址, ,即即給出了給出了參加運(yùn)算參加運(yùn)算或或傳送的數(shù)據(jù)傳送的數(shù)據(jù)在內(nèi)存單元的在內(nèi)存單元的地址地址。直接地址只能用來表示直接地址只能用來表示片內(nèi)片內(nèi)RAMRAM、位地址空間位地址空間以以及及SFRSFR, ,位地址位地址與與SFRSFR只能用只能用直接尋址方式直接尋址方式來訪問。來訪問。尋址范圍:尋址范圍:(1) (1) 內(nèi)部內(nèi)部RAMRAM的的128128個(gè)單元個(gè)單元 (

14、2) (2) 特殊功能寄存器特殊功能寄存器。除了以。除了以單元地址單元地址的的形式外形式外, ,還可用還可用寄存器符號寄存器符號的形式給出。例如:的形式給出。例如: MOV AMOV A,80H80H 與與 MOV AMOV A,P0P0是等價(jià)的。是等價(jià)的。2 2 直接尋址直接尋址2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)17第第1 1條指令是條指令是雙字節(jié)指令雙字節(jié)指令, ,設(shè)分別放在設(shè)分別放在ROMROM區(qū)區(qū)30H30H和和31H31H中。操作碼中。操作碼E5E5指示指示CPUCPU, ,按照下一字節(jié)單元中內(nèi)按照下一字節(jié)單元中內(nèi)容容4040為地址為地址, , 把片內(nèi)把片內(nèi)RAMRAM單

15、元單元40H40H中的中的內(nèi)容內(nèi)容送到送到累加器累加器A A中去中去, ,即即A(40H),A(40H),尋址過程如圖尋址過程如圖4.24.2(a a)。)。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)18第第2 2條指令設(shè)放在條指令設(shè)放在ROMROM區(qū)區(qū)30H30H和和31H31H單元中。操作單元中。操作碼碼A2A2指示指示CPU,CPU,按照下一字節(jié)中的內(nèi)容按照下一字節(jié)中的內(nèi)容4040為位地址為位地址, , 把把40H40H位單元中的內(nèi)容送到位位單元中的內(nèi)容送到位累加器累加器CYCY中中, ,即即CY(40H),CY(40H),位直接尋址過程如圖(位直接尋址過程如圖(b b)。)。202

16、2-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)19第第3 3條指令的條指令的尋址過程尋址過程與第與第1 1條指令是條指令是類似的類似的, ,是是把把SFRSFR區(qū)中區(qū)中90H90H中的中的內(nèi)容送累加器內(nèi)容送累加器A A, ,即即A(90H)A(90H)。按表按表2-72-7可知可知90H90H是是P1P1口寄存器口寄存器的直接地址的直接地址, ,而而P1P1是其是其符號地址符號地址, ,所以第所以第3 3條指令也可以寫成條指令也可以寫成MOVMOVA A,P1P1直接尋址,三點(diǎn)注意事項(xiàng)直接尋址,三點(diǎn)注意事項(xiàng)1.1.指令含有指令含有SFRSFR中的某一個(gè),可用物理地址或者中的某一個(gè),可用物理地址或者S

17、FRSFR的名稱符號的名稱符號MOV A,MOV A,SPSPMOV A,MOV A,81H81H2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)202.2.累加器具有累加器具有A A,ACCACC,E0HE0H三種表示形式,執(zhí)行三種表示形式,執(zhí)行的效果是一樣的的效果是一樣的INC AINC AINC ACCINC ACCINC 0E0HINC 0E0H3.3.指令系統(tǒng)中,字節(jié)地址和位地址是有區(qū)別的指令系統(tǒng)中,字節(jié)地址和位地址是有區(qū)別的。MOV A,20HMOV A,20HMOV C,20HMOV C,20H第一條指令將第一條指令將20H20H單元里面的數(shù)值傳給單元里面的數(shù)值傳給A A,第二,第

18、二條將條將20H20H位傳送給位傳送給CyCy位。位。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)21寄存器尋址寄存器尋址寄存器尋址寄存器尋址是指是指存放操作數(shù)的寄存器存放操作數(shù)的寄存器直接寫在直接寫在指令中指令中, ,寄存器寄存器包括選定的包括選定的R0R0R7R7、A A、B B、DPTRDPTR、CYCY、SPSP及其他及其他SFRSFR。MOV AMOV A,Rn Rn ;RnARnA,n=0n=07 7工作寄存器工作寄存器R0R0R7R7由指令碼的低由指令碼的低3 3位位000000111111來來編碼編碼,A,A、B B、DPTRDPTR以及以及CYCY則則隱含隱含在指令碼中在指

19、令碼中, ,因此寄存因此寄存器尋址也包含一種隱含尋址。器尋址也包含一種隱含尋址。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)22寄存器尋址舉例寄存器尋址舉例, ,指令碼的二進(jìn)制為指令碼的二進(jìn)制為11100001,11100001,低低3 3位位的的001001正好為正好為R1R1的的編碼編碼, ,指令的含義是把指令的含義是把R1R1中的中的內(nèi)容送到累加器內(nèi)容送到累加器A A中中, ,即即AR1AR1, , 尋址過程如圖。尋址過程如圖。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)23尋址范圍:尋址范圍:(1 1)4 4組通用組通用工作寄存區(qū)共工作寄存區(qū)共3232個(gè)個(gè)工作寄存器。工作寄存器。(

20、2 2)部分特殊功能寄存器)部分特殊功能寄存器,例如,例如A A、B B 以及數(shù)以及數(shù)據(jù)指針寄存器據(jù)指針寄存器DPTRDPTR等。等。例如:例如:已知已知R0=70HR0=70H, R7=25H R7=25H, DPTR=0300H DPTR=0300H 則則MOV MOV A A, R0 R0 ;AR0AR0INC INC DPTRDPTR ;DPTRDPTR+1DPTRDPTR+1ADDADDR7R7,#20H#20H ;R720H+R7R720H+R72022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)24寄存器間接尋址寄存器間接尋址是指操作數(shù)所指定的是指操作數(shù)所指定的寄存器寄存器中中存放的存

21、放的不是操作數(shù)本身不是操作數(shù)本身, ,而是而是操作數(shù)的地址操作數(shù)的地址。用作間。用作間址的寄存器為址的寄存器為RiRi和和DPTRDPTR, ,指令助記符中在寄存器名前指令助記符中在寄存器名前冠以冠以“ ”。當(dāng)訪問當(dāng)訪問片內(nèi)片內(nèi)RAMRAM低低128B128B, ,或或片外片外RAMRAM低低256B256B時(shí)時(shí), ,用用8 8位地址指針位地址指針RiRi,i=0i=0或或1 1 寄存器間接尋址寄存器間接尋址2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)25這條指令的機(jī)器碼為這條指令的機(jī)器碼為11100111110011 ,最后位的,最后位的0 0與與1 1分別用來指定分別用來指定R0R0和和

22、R1R1, ,設(shè)設(shè)R0=40H,(40H)=88H R0=40H,(40H)=88H 。 1 1、根據(jù)、根據(jù)指令碼指令碼的最后一位為的最后一位為0 0, ,先去訪問先去訪問R0R0 2 2、根據(jù)、根據(jù)R0R0中的中的內(nèi)容內(nèi)容, ,最終把最終把40H40H單元中的數(shù)單元中的數(shù)88H88H送到送到A A中去即中去即A(R0)A(R0)。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)26當(dāng)訪問當(dāng)訪問片外片外RAMRAM時(shí)時(shí), ,用用1616位位地址指針地址指針DPTRDPTR, ,舉舉例例: :MOVX A,DPTRMOVX A,DPTR。這條指令的這條指令的尋址過程尋址過程同上一條指令類似同上一條

23、指令類似, ,指令的指令的執(zhí)行結(jié)果執(zhí)行結(jié)果是把是把DPTRDPTR中的中的內(nèi)容為地址內(nèi)容為地址的外部的外部RAMRAM單元單元中中的內(nèi)容送到了的內(nèi)容送到了累加器累加器A A中中, ,即即: :A(DPTR)A(DPTR)。注意注意:不能用寄存器間接尋址來訪問特殊功能:不能用寄存器間接尋址來訪問特殊功能寄存器。寄存器。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)27已知已知R0=40HR0=40H,內(nèi),內(nèi)RAMRAM(40H40H)=50H=50H,外,外RAMRAM(40H40H)=60H=60H,DPTR=0300HDPTR=0300H則則MOV MOV A A ,R0R0 ;AA內(nèi)部內(nèi)部

24、RAMRAM(R0R0)MOVX MOVX A A,R0R0 ;AA外部外部RAMRAM(R0R0)MOVX MOVX DPTRDPTR,A A ;外部;外部RAM(DPTR)ARAM(DPTR)A設(shè)內(nèi)部設(shè)內(nèi)部RAM 30HRAM 30H單元中內(nèi)容為單元中內(nèi)容為52H52H,請給出以下,請給出以下程序結(jié)果:程序結(jié)果:MOV A, #30H ;MOV A, #30H ;MOV A, 30HMOV A, 30HMOV R0, #30H;MOV R0, #30H;MOV A, R0MOV A, R0MOV 30H, #30H;MOV 30H, #30H;2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)

25、28基址寄存器基址寄存器加加變址寄存器變址寄存器間接間接尋址方式尋址方式-變址尋址變址尋址變址尋址變址尋址是指將是指將基址寄存器基址寄存器與與變址寄存器變址寄存器的內(nèi)的內(nèi)容容相加相加, ,把相加結(jié)果作為把相加結(jié)果作為操作數(shù)的地址操作數(shù)的地址。指令中把指令中把DPTRDPTR或或PCPC作為作為基址寄存器基址寄存器, ,累加器累加器 A A 作為變址寄存器。變址尋址主要用于作為變址寄存器。變址尋址主要用于查表操作查表操作。 變址尋址變址尋址2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)29對于第對于第1 1條指令條指令, ,設(shè)設(shè)A=30HA=30H, ,DPTR=0100HDPTR=0100H。

26、CPUCPU取出指令碼取出指令碼93H93H后后, ,就會(huì)把就會(huì)把DPTRDPTR中的基本地址中的基本地址0100H0100H與與A A中中的的偏移量偏移量相加相加, ,得到真正的目的地址為得到真正的目的地址為0130H0130H;然后再到然后再到0130H0130H單元去訪問單元去訪問, ,把此單元中的內(nèi)容把此單元中的內(nèi)容送到累加器送到累加器A A中。中。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)30對于第對于第2 2條指令條指令, ,偏移量還是放在偏移量還是放在A A中中, ,基本地址基本地址換為當(dāng)前的換為當(dāng)前的PCPC值。值。注意:注意:變址尋址只能在變址尋址只能在64KB64KB程

27、序存儲(chǔ)器程序存儲(chǔ)器的范圍的范圍內(nèi)尋址,但內(nèi)尋址,但不能不能對對數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器進(jìn)行變址尋址。進(jìn)行變址尋址。雖然變址尋址的雖然變址尋址的過程比較復(fù)雜過程比較復(fù)雜,但變址尋址的,但變址尋址的指令機(jī)器碼指令機(jī)器碼只有只有一個(gè)字節(jié)一個(gè)字節(jié)。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)31三個(gè)特點(diǎn):三個(gè)特點(diǎn):1.1.指令操作碼內(nèi)隱含有作為基地址寄存器用的指令操作碼內(nèi)隱含有作為基地址寄存器用的數(shù)據(jù)指針數(shù)據(jù)指針DPTRDPTR或或程序寄存器程序寄存器PCPC,其中,其中DPTRDPTR和和PCPC中預(yù)先中預(yù)先存放操作數(shù)的存放操作數(shù)的基地址基地址。2.2.指令操作碼內(nèi)隱含有指令操作碼內(nèi)隱含有累加器累加器

28、A A,A A中預(yù)先放有中預(yù)先放有被尋址操作數(shù)地址對基地址的被尋址操作數(shù)地址對基地址的偏移量偏移量,00H-FFH.00H-FFH.3.3.執(zhí)行過程中,執(zhí)行過程中,先先把把基地址(基地址(DPTRDPTR、PCPC)和地)和地址偏移量(址偏移量(A A)相加)相加,來形成操作數(shù)的,來形成操作數(shù)的物理地址物理地址。MOVC A,A+PCMOVC A,A+PCMOVC A,A+DPTRMOVC A,A+DPTR2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)32例例3.1 3.1 已知片外已知片外ROMROM的的0302H0302H單元中有一個(gè)常數(shù)單元中有一個(gè)常數(shù)X X,現(xiàn)欲把它取到累加器現(xiàn)欲把它取

29、到累加器A A,編寫程序。,編寫程序?;刂坊刂罚?3000300偏移量偏移量:02H02HMOV MOV DPTR ,#0300HDPTR ,#0300HMOV MOV A,#02HA,#02HMOVMOVC C A,A+DPTRA,A+DPTR例如:指令例如:指令 MOVC AMOVC A,A+DPTRA+DPTR 其中其中A A的原有內(nèi)的原有內(nèi)容為容為05H05H,DPTRDPTR的內(nèi)容為的內(nèi)容為0400H0400H,該指令執(zhí)行的結(jié)果是,該指令執(zhí)行的結(jié)果是把程序存儲(chǔ)器把程序存儲(chǔ)器04050405H H單元的內(nèi)容傳送給單元的內(nèi)容傳送給A A。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)

30、33注意注意以下幾點(diǎn):以下幾點(diǎn): (1 1)本尋址方式是本尋址方式是專門針對程序存儲(chǔ)器專門針對程序存儲(chǔ)器的尋址方式,的尋址方式,尋址范圍可達(dá)到尋址范圍可達(dá)到64KB64KB。 (2 2)程序執(zhí)行之前要做程序執(zhí)行之前要做準(zhǔn)備工作準(zhǔn)備工作。 (3 3)本尋址方式的指令只有本尋址方式的指令只有3 3條條:MOVC AMOVC A,A+DPTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)34相對尋址相對尋址MCS-51MCS-51的轉(zhuǎn)移指令有的轉(zhuǎn)移指令有長轉(zhuǎn)移長轉(zhuǎn)移、短轉(zhuǎn)移短轉(zhuǎn)移和和相對轉(zhuǎn)相對轉(zhuǎn)移移之分之分

31、, ,相對尋址相對尋址是用在是用在相對轉(zhuǎn)移指令相對轉(zhuǎn)移指令中的。中的。它將它將PCPC的的當(dāng)前值當(dāng)前值 與指令操作數(shù)部分所給出與指令操作數(shù)部分所給出的的相對偏移量相對偏移量relrel相加相加, ,其其結(jié)果結(jié)果作為跳轉(zhuǎn)指令的作為跳轉(zhuǎn)指令的轉(zhuǎn)移地轉(zhuǎn)移地址址或稱或稱目的地址目的地址 。當(dāng)前PC2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)35第第1 1條指令條指令SJMP 38HSJMP 38H, ,假設(shè)執(zhí)行相對轉(zhuǎn)移指令之假設(shè)執(zhí)行相對轉(zhuǎn)移指令之前前,PC,PC指向指令的起址指向指令的起址0030H0030H, ,稱其為稱其為 (或用(或用“$ $”表示)。表示)。CPUCPU從從0030H0030

32、H單元取出指令碼單元取出指令碼80H80H后,就會(huì)繼續(xù)取后,就會(huì)繼續(xù)取出下一字節(jié)中的出下一字節(jié)中的偏移量偏移量06H06H, ,這時(shí)這時(shí)PCPC已經(jīng)指向了已經(jīng)指向了0032H0032H, ,稱其為稱其為 ; ;接著接著, ,CPUCPU會(huì)將偏移量會(huì)將偏移量06H06H與基址與基址 相加相加, ,得到跳轉(zhuǎn)的得到跳轉(zhuǎn)的目的地址目的地址 為為0038H,0038H,并跳轉(zhuǎn)到并跳轉(zhuǎn)到0038H0038H單元去訪問。單元去訪問。源PC目PC當(dāng)前PC當(dāng)前PC2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)36從可看到從可看到, ,在計(jì)算目的地址時(shí)在計(jì)算目的地址時(shí), ,人工算法人工算法與與機(jī)器機(jī)器算法算法跳轉(zhuǎn)

33、的起點(diǎn)是不一樣的。跳轉(zhuǎn)的起點(diǎn)是不一樣的。CPUCPU是在取出是在取出2 2字節(jié)字節(jié)指令碼后指令碼后, ,以以 為為基址基址跳轉(zhuǎn)到跳轉(zhuǎn)到目的目的地址地址 去的;去的;當(dāng)前PC目PC2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)37人工是從人工是從跳轉(zhuǎn)指令跳轉(zhuǎn)指令的首址的首址 為跳轉(zhuǎn)的起點(diǎn)為跳轉(zhuǎn)的起點(diǎn), ,兩者差了兩者差了跳轉(zhuǎn)跳轉(zhuǎn)指令本身所占的指令本身所占的字節(jié)數(shù)字節(jié)數(shù)InsbytInsbyt。(1 1)機(jī)器算法)機(jī)器算法 = + rel= + rel(2 2)人工算法)人工算法 = + Insbyt= + Insbyt(跳轉(zhuǎn)指令字(跳轉(zhuǎn)指令字節(jié)數(shù))節(jié)數(shù))+ rel+ rel源PC目PC當(dāng)前PC源

34、PC目PC2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)38這里要特別指出,這里要特別指出,對于對于SJMP RELSJMP REL以一般形式表以一般形式表達(dá)的達(dá)的相對轉(zhuǎn)移指令相對轉(zhuǎn)移指令, ,對對relrel的理解在的理解在匯編指令和機(jī)器指匯編指令和機(jī)器指令令中是有很大區(qū)別的。中是有很大區(qū)別的。rel,rel,無論是用無論是用1616進(jìn)制地址進(jìn)制地址, ,還是用還是用符號地址符號地址, ,都都不是不是相對偏移量相對偏移量, ,而是對應(yīng)而是對應(yīng)指令轉(zhuǎn)移指令轉(zhuǎn)移的的目的地址目的地址;在機(jī)器指令中在機(jī)器指令中, ,relrel是相對偏移量是相對偏移量, ,是一個(gè)是一個(gè)8 8位的位的補(bǔ)碼補(bǔ)碼, ,其

35、值范圍為其值范圍為-128-128+127+127;值是;值是正正的的, ,表示向地址表示向地址增加增加方向跳轉(zhuǎn)方向跳轉(zhuǎn), , 值是值是負(fù)負(fù)的的, ,表示向地址表示向地址減少減少方向跳轉(zhuǎn)。方向跳轉(zhuǎn)。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)39 位尋址位尋址是指是指對位尋址空間對位尋址空間按按位位進(jìn)行尋址的操作。進(jìn)行尋址的操作。在需要進(jìn)行位處理時(shí)在需要進(jìn)行位處理時(shí), ,借助于借助于進(jìn)位位進(jìn)位位CYCY作為位操作為位操作累加器作累加器, ,可對可對片內(nèi)片內(nèi)RAMRAM位尋址位尋址區(qū)和區(qū)和1111個(gè)可個(gè)可位尋址特殊位尋址特殊功能寄存器功能寄存器的的位尋址位尋址單元進(jìn)行單元進(jìn)行操作操作。位尋址位

36、尋址 2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)40第第1 1條指令條指令MOV C,40HMOV C,40H中直接使用中直接使用位尋址空間位尋址空間中中的的位地址位地址40H40H,指令功能是將位尋址空間中位地址為,指令功能是將位尋址空間中位地址為40H40H中的內(nèi)容送到進(jìn)位標(biāo)志中。中的內(nèi)容送到進(jìn)位標(biāo)志中。位地址位地址也可用也可用符號地符號地址址來表示,如來表示,如RS1RS1、RS0RS0。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)41可可位尋址的位尋址的SFRSFR允許采用允許采用寄存器名加位數(shù)寄存器名加位數(shù)的形式的形式來表示來表示位地址位地址。如可以分別用。如可以分別用PSW.

37、4PSW.4和和PSW.3PSW.3來表示來表示RS1RS1和和RS0RS0, ,在單燈閃爍程序中用在單燈閃爍程序中用CLR P1.0CLR P1.0和和SETB P1.0,SETB P1.0,使使P1P1口的第口的第0 0位清零和置位清零和置1 1的。的。特殊功能寄存器中的可尋址位在指令中有特殊功能寄存器中的可尋址位在指令中有4 4種表種表示方法:示方法:a. a. 直接使用位地址直接使用位地址。例如。例如PSW.5PSW.5的位地址為的位地址為0D5H0D5H。P60P602022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)42b. b. 位名稱的表示方法位名稱的表示方法。例如:。例如:PSW.

38、5PSW.5是是F0F0標(biāo)志標(biāo)志位,可使用位,可使用F0F0表示該位。表示該位。c.c.單元地址加位數(shù)的表示方法單元地址加位數(shù)的表示方法。例如。例如 : :(0D0H).5(0D0H).5。d.d.特殊功能寄存器符號加位數(shù)的表示方法特殊功能寄存器符號加位數(shù)的表示方法。例。例如如:PSW.5:PSW.5。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)43例如:例如:SETB 10HSETB 10H;將;將10H10H位置位置1 1,其中,其中10H10H是直接使用位地址。是直接使用位地址。MOV MOV 22H.022H.0,C C ;22H.022H.0進(jìn)位位進(jìn)位位C C P57P57(其中(

39、其中22H.022H.0是內(nèi)部是內(nèi)部RAM22HRAM22H單元的第單元的第0 0位)位)ORL CORL C,PSW.0PSW.0;CCPSW.0CCPSW.0ANL CANL C,P P ; CCP CCP(其中(其中P P是是PSWPSW的第的第0 0位,是位符號地址)位,是位符號地址)2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)44注意注意:MCS-51 :MCS-51 指令系統(tǒng)的各類指令系統(tǒng)的各類尋址方式尋址方式對應(yīng)對應(yīng)不不同的存儲(chǔ)空間同的存儲(chǔ)空間, ,在不同的存儲(chǔ)區(qū)中應(yīng)采用在不同的存儲(chǔ)區(qū)中應(yīng)采用不同的尋址不同的尋址方式。方式。例:例: 指出各指令中源、目操作數(shù)的尋址方式。指出各指

40、令中源、目操作數(shù)的尋址方式。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)45使用使用最頻繁最頻繁的一類指令,分為的一類指令,分為內(nèi)部數(shù)據(jù)傳送指內(nèi)部數(shù)據(jù)傳送指令令、外部數(shù)據(jù)傳送指令外部數(shù)據(jù)傳送指令、堆棧操作指令堆棧操作指令和和數(shù)據(jù)交換指數(shù)據(jù)交換指令令四類。四類。格式格式為:為:MOV MOV , MOV MOV ,屬屬“復(fù)制復(fù)制” ,而不是,而不是“搬家搬家” , ,源操作數(shù)源操作數(shù)里面的數(shù)里面的數(shù)值值不發(fā)生改變不發(fā)生改變。3.1.5 3.1.5 單片機(jī)指令功能單片機(jī)指令功能3.1.5.13.1.5.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)46在在2929條數(shù)據(jù)

41、傳送類指令中條數(shù)據(jù)傳送類指令中, ,用到用到8 8種種助記符助記符MOVMOV、MOVXMOVX、MOVCMOVC、XCHXCH、XCHDXCHD、SWAPSWAP、PUSHPUSH、POPPOP, ,可細(xì)分可細(xì)分為為片內(nèi)片內(nèi)RAMRAM數(shù)據(jù)傳送、訪問數(shù)據(jù)傳送、訪問程序存儲(chǔ)器程序存儲(chǔ)器與與片外片外RAMRAM、堆堆棧棧操作、操作、數(shù)據(jù)交換數(shù)據(jù)交換4 4類。類。數(shù)據(jù)傳送指令執(zhí)行后,除了數(shù)據(jù)傳送指令執(zhí)行后,除了奇偶標(biāo)志奇偶標(biāo)志 P P 會(huì)受到會(huì)受到以以累加器累加器 A A 為為目的操作數(shù)指令目的操作數(shù)指令的影響的影響, ,其他標(biāo)志均不其他標(biāo)志均不受到影響。受到影響。2022-2-11嵌入式應(yīng)用基礎(chǔ)

42、嵌入式應(yīng)用基礎(chǔ)47片內(nèi)片內(nèi)RAMRAM存儲(chǔ)空間存儲(chǔ)空間, ,只有只有256B256B, ,僅用僅用8 8位地址位地址尋址尋址, ,但卻是但卻是數(shù)據(jù)傳送最活躍數(shù)據(jù)傳送最活躍的區(qū)域的區(qū)域, ,使用的使用的尋址方式尋址方式也最也最多。下面以多。下面以目的操作數(shù)目的操作數(shù)的尋址方式分組介紹。的尋址方式分組介紹。1 1、內(nèi)部存儲(chǔ)器間傳送、內(nèi)部存儲(chǔ)器間傳送(1 1) 以累加器以累加器 A A 為目的操作數(shù)指令為目的操作數(shù)指令一一 、片內(nèi)、片內(nèi)RAMRAM數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)48表中指令均是表中指令均是8 8位數(shù)位數(shù)送送A A指令指令, ,第第1 1組中的機(jī)

43、器碼組中的機(jī)器碼E8E8EF,EF,分別對應(yīng)于源為分別對應(yīng)于源為R0R0R7R7的的8 8條指令。條指令。第第3 3組中的機(jī)器碼組中的機(jī)器碼E6E6E7,E7,分別對應(yīng)于源為分別對應(yīng)于源為R0R0R1R1的的2 2條指令。條指令。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)49第第1 1、3 3兩組指令的兩組指令的源操作數(shù)源操作數(shù)分別采用分別采用寄存器尋寄存器尋址址和和寄存器間址寄存器間址, ,所占字節(jié)數(shù)少所占字節(jié)數(shù)少, ,為為1 1個(gè)個(gè)字節(jié)字節(jié)。第第2 2、4 4兩組指令的兩組指令的源操作數(shù)源操作數(shù)分別采用分別采用直接尋址直接尋址和和立即尋址立即尋址, ,占占2 2個(gè)字節(jié)個(gè)字節(jié)數(shù)。數(shù)。20

44、22-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)50(2 2) 以寄存器為目的操作數(shù)指令以寄存器為目的操作數(shù)指令以以寄存器寄存器RnRn為為目的操作數(shù)目的操作數(shù)的傳送指令和要素如的傳送指令和要素如表。表。前前3 3組指令均是組指令均是8 8位數(shù)位數(shù)送送寄存器寄存器RnRn指令指令, ,源只能采源只能采用用直接尋址直接尋址和和立即尋立即尋址址, ,不能采用不能采用寄存器尋址寄存器尋址和和寄存寄存器間址。器間址。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)51MOV Rn, RnMOV Rn, Rn和和MOV Rn,RiMOV Rn,Ri形式指令是形式指令是非法非法的的, ,工工作作寄存器間數(shù)據(jù)傳送寄

45、存器間數(shù)據(jù)傳送可通過可通過累加器累加器A A為中介來為中介來傳送傳送。最后最后1 1條指令是條指令是MCS-51MCS-51指令系統(tǒng)指令系統(tǒng)中中唯一唯一的的一條一條1616位數(shù)據(jù)傳送指令位數(shù)據(jù)傳送指令, , 指令功能是將指令功能是將1616位數(shù)據(jù)位數(shù)據(jù)傳送給傳送給1616位位寄存器寄存器DPTRDPTR, ,作為地址作為地址指針指針。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)52例如:例如: MOVMOVDPTR, #1000HDPTR, #1000H;功能為功能為DPTR1000HDPTR1000H相當(dāng)于執(zhí)行兩條相當(dāng)于執(zhí)行兩條8 8位數(shù)據(jù)傳送指令:位數(shù)據(jù)傳送指令:MOV DPH,#10H

46、 MOV DPH,#10H ;DPH10H,DPH10H,數(shù)的數(shù)的高高8 8位送位送DPHDPH, ,MOV DPL,#00H MOV DPL,#00H ;DPL00H,DPL00H,數(shù)的數(shù)的低低8 8位送位送DPLDPL。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)53(3 3) 以以直接尋址直接尋址directdirect為為目的操作數(shù)目的操作數(shù)指令指令 以直接尋址為目的操作數(shù)的以直接尋址為目的操作數(shù)的傳送指令傳送指令和和要素要素如下。如下。指令功能均是指令功能均是8 8位數(shù)位數(shù)送送片內(nèi)片內(nèi)RAMRAM低低128128字節(jié)或字節(jié)或SFRSFR直接直接地址單元。地址單元。2022-2-11

47、嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)54指令中的指令中的源源、目地目地操作數(shù)操作數(shù)dir1dir1和和dir2dir2都為都為直接直接尋址尋址, ,這就使得內(nèi)部這就使得內(nèi)部RAMRAM之間的數(shù)據(jù)傳送之間的數(shù)據(jù)傳送, ,不必通過累不必通過累加器加器A A為中介來間接傳送為中介來間接傳送, ,同時(shí)也說明訪問同時(shí)也說明訪問SFRSFR僅允許僅允許使用直接尋址使用直接尋址, ,例如:例如:MOV MOV 30H,31H30H,31H; ;機(jī)器碼機(jī)器碼853130, 853130, 功能為功能為30H 30H (31H31H)MOV MOV Pl ,BPl ,B; ;機(jī)器碼為機(jī)器碼為85F090, 85F090

48、, 功能為功能為P1 BP1 B2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)55(4 4) 以寄存器間址以寄存器間址RiRi為目的操作數(shù)指令為目的操作數(shù)指令指令功能均是把指令功能均是把源操作數(shù)源操作數(shù)指定的內(nèi)容傳送到指定的內(nèi)容傳送到RiRi所指向的所指向的片內(nèi)片內(nèi)RAMRAM單元單元中。中。RiRi不是不是目的地址目的地址,Ri,Ri中存放的中存放的片內(nèi)片內(nèi)RAMRAM單元的地單元的地址址才是真正才是真正目的地址目的地址。RiRi在機(jī)器碼中是用在機(jī)器碼中是用最后一位來最后一位來指定指定, ,0 0指定指定R0R0, ,1 1指定指定R1R1。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)56

49、例例 閱讀下面匯編源程序,問程序運(yùn)行后:閱讀下面匯編源程序,問程序運(yùn)行后: (1 1)A,B,R0,R1A,B,R0,R1和內(nèi)和內(nèi)RAM30HRAM30H31H31H內(nèi)容各為多少?內(nèi)容各為多少?解解: : 程序運(yùn)行后各單元的內(nèi)容為程序運(yùn)行后各單元的內(nèi)容為: : ORG 0030HSTART: MOV 30H, #0AAH MOV 31H, #30H MOV R1, #31H MOV R0, 31H MOV B,R0 MOV A, B MOV R1, A MOV P1, R1 END STARTA = B =A = B =(30H30H)= =(31H31H)= =(P1P1)= AAH= AA

50、H,R0 R0 = 30H= 30H,R1 = 31HR1 = 31H。課堂知識鞏固課堂知識鞏固2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)57(2 2)若若R0=50HR0=50H,R4=38HR4=38H,內(nèi),內(nèi)RAMRAM(40H40H)=05H=05H,內(nèi)內(nèi)RAMRAM(50H50H)=25H=25H, A=12H A=12H,則,則解解: : 程序運(yùn)行后各單元的內(nèi)容為程序運(yùn)行后各單元的內(nèi)容為: :MOV 50H,#20H;MOV 55H,40H ;MOV 5AH,A ; MOV 60H,R4 ; MOV 68H,R0;(50H50H)=20H=20H(55H55H)=05H=05H

51、(5AH5AH)=12H=12H(60H60H)=38H=38H(68H68H)=25H=25H(3 3)若)若R0=50HR0=50H,R1=60HR1=60H,內(nèi),內(nèi)RAMRAM(38H38H)=05H=05H,A=10HA=10H,則,則MOV R0, #40HMOV R1,38H MOV R1, A內(nèi)部數(shù)據(jù)傳送指令的使用內(nèi)部數(shù)據(jù)傳送指令的使用1 1)禁止非法指令禁止非法指令: MOV Rn,RiMOV Rn,Ri; MOV #DATA,AMOV #DATA,A2 2)正確正確的給程序的給程序注釋注釋 RnRn、A A、B B、DPTRDPTR等寄存器中的等寄存器中的內(nèi)容內(nèi)容作為作為源操

52、作數(shù)源操作數(shù)的時(shí)候不加的時(shí)候不加括號括號,目標(biāo)操作數(shù)目標(biāo)操作數(shù)的時(shí)候也不加。的時(shí)候也不加。3 3)()(RiRi)-表示表示操作數(shù)地址在操作數(shù)地址在RiRi中中(DPTRDPTR)-表示操作數(shù)在表示操作數(shù)在外部的外部的RAM/ROMRAM/ROM中,中,地址地址放在放在DPTRDPTR中中2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)592. 2. 訪問片外訪問片外RAMRAM指令指令訪問片外訪問片外RAMRAM指令有指令有4 4條條, ,片外片外RAMRAM單元單元與與累加器累加器A A可以可以互相傳送數(shù)據(jù)互相傳送數(shù)據(jù), ,都屬于都屬于寄存器間接尋址寄存器間接尋址方式。方式。第第1 12 2

53、兩組指令采用兩組指令采用8 8位地址指針位地址指針RiRi作間址寄存作間址寄存器,器,8 8位地址位地址和和數(shù)據(jù)數(shù)據(jù)均由均由P0P0口分時(shí)輸出或輸入口分時(shí)輸出或輸入, ,可尋址可尋址256B256B, ,此時(shí)此時(shí), ,P2P2口口仍可用做仍可用做通用通用I/OI/O口口。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)60在在MCS-51MCS-51指令系統(tǒng)中指令系統(tǒng)中, ,沒有專門對沒有專門對外設(shè)的外設(shè)的I/OI/O指指令令,I/O,I/O與片外與片外RAMRAM是是統(tǒng)一編址統(tǒng)一編址的,這的,這4 4條指令也可以作條指令也可以作為為I/OI/O指令指令。 例例 采用采用1616位地址指針位地址

54、指針DPTRDPTR, ,把數(shù)存入把數(shù)存入片外片外RAMRAM單元單元1000H1000H中。中。 ORG 0030H ORG 0030HSTART: MOV ASTART: MOV A,#0AAH#0AAH MOV DPTR , #1000H ; MOV DPTR , #1000H ;先送地址先送地址 MOVX DPTR , A ;MOVX DPTR , A ;后存數(shù)后存數(shù) ENDENDSTARTSTARTP93說明請改用8位地址指針R0,編寫相同功能的程序;ORG 0030HORG 0030HSTART: MOV ASTART: MOV A, #0AAH #0AAH MOV P2 , #1

55、0HMOV P2 , #10H ; ;高高8 8位地址送位地址送P2P2 MOV R0 , #00H MOV R0 , #00H ; ;低低8 8位地址送位地址送R0R0 MOVX R0 , A MOVX R0 , A ; ;存數(shù)存數(shù) END STARTEND START2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)623 3 . .訪問程序存儲(chǔ)器訪問程序存儲(chǔ)器ROMROM查表指令查表指令指令功能均是指令功能均是讀取程序存儲(chǔ)器讀取程序存儲(chǔ)器指令指令, ,屬于屬于變址尋址方式變址尋址方式, ,但兩者的但兩者的基址寄存器基址寄存器不同不同, , 適用范圍適用范圍也不同也不同。第第1 1條指令以條指

56、令以 DPTRDPTR為基址寄存器為基址寄存器, ,把表頭地址送入把表頭地址送入DPTRDPTR后后, ,就可就可以用它來方便地查找存放在以用它來方便地查找存放在程序存儲(chǔ)器程序存儲(chǔ)器64KB64KB范圍內(nèi)的范圍內(nèi)的遠(yuǎn)程表格遠(yuǎn)程表格數(shù)據(jù)數(shù)據(jù)。2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)63指令指令MOVMOVC C A,A+PC A,A+PC以以PCPC為基址寄存器為基址寄存器,CPU,CPU在讀在讀取指令時(shí)取指令時(shí), ,PCPC已經(jīng)加已經(jīng)加1 1, ,作為作為基址值基址值的已不是的已不是 , ,而而是是 。 由于由于PCPC值已經(jīng)確定值已經(jīng)確定, ,查表范圍只能由查表范圍只能由累加器累加器A

57、 A內(nèi)內(nèi)8 8位位數(shù)值數(shù)值確定確定, ,這樣這樣, ,使用此指令的表格只能存放在以使用此指令的表格只能存放在以 為起始地址的為起始地址的256B256B范圍內(nèi)范圍內(nèi), ,稱這為稱這為本地表本地表。當(dāng)前PC源PC當(dāng)前PC2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)64例:例: 0 04 4的平方表首址為的平方表首址為SQTBSQTB, ,如圖(如圖(a a)。下面程)。下面程序以序以DPTRDPTR為基址指針為基址指針, ,設(shè)設(shè)A = 3A = 3, ,用查表法求其用查表法求其平方值平方值。 ORG 0030HORG 0030HSTART: MOVSTART: MOVA A,#03H#03H;

58、所查數(shù)正好為離表首址偏移量所查數(shù)正好為離表首址偏移量 MOV DPTR MOV DPTR ,#SQTB,#SQTB;送平方表首址送平方表首址 MOVC AMOVC A,A+DPTRA+DPTR;查平方表查平方表SQTB: SQTB: DB 00H,01H,04H,09H,10HDB 00H,01H,04H,09H,10H ;建立平方表區(qū)域建立平方表區(qū)域 ENDEND STARTSTART2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)65(1 1)請改用)請改用PCPC為基址指針為基址指針, ,編寫相同功能的程序;編寫相同功能的程序;解解: :(1 1)見圖()見圖(b b), ,具有相同功能具

59、有相同功能, , 用用PCPC為基址指針程序如下:為基址指針程序如下: ORG0030HSTART: MOV A A, #03H03H ;所查數(shù)正好為離表首址偏移量 MOVC A, A+PCMOVC A, A+PC ;查平方表SQTB: DB 01H,04H,09H,10H ;設(shè)置平方表區(qū)域 END START2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)66上面程序中上面程序中本地表表頭地址本地表表頭地址SQTBSQTB緊跟在緊跟在查表指查表指令令之后之后, ,即即 正好指向正好指向SQTBSQTB, ,這時(shí)所查數(shù)(這時(shí)所查數(shù)(A = 3A = 3)正好為離正好為離表首址偏移量表首址偏移量;

60、如果如果 與與SQTBSQTB之間還隔有之間還隔有其它指令其它指令, ,則需要?jiǎng)t需要在查表指令前安排一條在查表指令前安排一條加法加法指令指令, ,使累加器使累加器 A A 中的值中的值等于所需的等于所需的地址偏移量地址偏移量。例:例:外部外部ROMROM從從1000H1000H中有一個(gè)中有一個(gè)0-90-9的平方表。利的平方表。利用查表指令來求用查表指令來求X X(0-90-9)的平方值的平方值. .當(dāng)前PC當(dāng)前PC2022-2-11嵌入式應(yīng)用基礎(chǔ)嵌入式應(yīng)用基礎(chǔ)67例:例:外部外部ROMROM從從1000H1000H中有一個(gè)中有一個(gè)0-90-9的平方表。利的平方表。利用查表指令來求用查表指令來求

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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

提交評論