![單片機(jī)指令系統(tǒng)_第1頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f1.gif)
![單片機(jī)指令系統(tǒng)_第2頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f2.gif)
![單片機(jī)指令系統(tǒng)_第3頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f3.gif)
![單片機(jī)指令系統(tǒng)_第4頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f4.gif)
![單片機(jī)指令系統(tǒng)_第5頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f/45d556c9-1ad1-47fd-bef7-af0dbcd9a47f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)應(yīng)用技術(shù)1/81第第4 4章章 指令系統(tǒng)指令系統(tǒng) 單片機(jī)應(yīng)用技術(shù)2/814.1 4.1 助記符語(yǔ)言助記符語(yǔ)言 高級(jí)語(yǔ)言高級(jí)語(yǔ)言編程簡(jiǎn)單編程簡(jiǎn)單, ,執(zhí)行效率低執(zhí)行效率低, ,常用在計(jì)算和管理的場(chǎng)合。常用在計(jì)算和管理的場(chǎng)合。 匯編語(yǔ)言匯編語(yǔ)言(助記符語(yǔ)言)編程繁瑣,執(zhí)行效率高,宜用于需要結(jié)構(gòu)(助記符語(yǔ)言)編程繁瑣,執(zhí)行效率高,宜用于需要結(jié)構(gòu)緊湊、反應(yīng)快速的實(shí)時(shí)控制場(chǎng)合。緊湊、反應(yīng)快速的實(shí)時(shí)控制場(chǎng)合。 助記符助記符一般是由操作碼和操作數(shù)兩部分組成的。操作碼反映了指令一般是由操作碼和操作數(shù)兩部分組成的。操作碼反映了指令的功能,操作數(shù)代表了指令的操作對(duì)象。的功能,操作數(shù)代表了指令的操作對(duì)象。 例
2、如,例如,ADD A,#6AHADD A,#6AH;AA+#6AH;AA+#6AH 其中其中ADDADD是操作碼符號(hào)。是操作碼符號(hào)。A A和和6 6AHAH是操作數(shù)。前者反映了該指令的功能是操作數(shù)。前者反映了該指令的功能是做加法,后者則表示相加的對(duì)象是是做加法,后者則表示相加的對(duì)象是A A累加器中的內(nèi)容和立即數(shù)累加器中的內(nèi)容和立即數(shù)6 6AHAH。 由助記符構(gòu)成的編程語(yǔ)言一般稱為匯編語(yǔ)言。由助記符構(gòu)成的編程語(yǔ)言一般稱為匯編語(yǔ)言。 目前大多數(shù)單片機(jī)的編譯系統(tǒng)都支持目前大多數(shù)單片機(jī)的編譯系統(tǒng)都支持C C語(yǔ)言編程,并可以對(duì)編譯的代語(yǔ)言編程,并可以對(duì)編譯的代碼進(jìn)行優(yōu)化。使用碼進(jìn)行優(yōu)化。使用C C語(yǔ)言編
3、程,具有編寫簡(jiǎn)單、直觀易讀、通用性好等特語(yǔ)言編程,具有編寫簡(jiǎn)單、直觀易讀、通用性好等特點(diǎn),特別是控制任務(wù)比較復(fù)雜或者具有大量運(yùn)算的系統(tǒng)中,點(diǎn),特別是控制任務(wù)比較復(fù)雜或者具有大量運(yùn)算的系統(tǒng)中,C C語(yǔ)言更顯示語(yǔ)言更顯示出了超越匯編語(yǔ)言的優(yōu)勢(shì)。然而,匯編語(yǔ)言是理解和掌握單片機(jī)原理及出了超越匯編語(yǔ)言的優(yōu)勢(shì)。然而,匯編語(yǔ)言是理解和掌握單片機(jī)原理及應(yīng)用的基礎(chǔ),并且,在控制系統(tǒng)不太復(fù)雜、實(shí)時(shí)性要求較高的控制系統(tǒng)應(yīng)用的基礎(chǔ),并且,在控制系統(tǒng)不太復(fù)雜、實(shí)時(shí)性要求較高的控制系統(tǒng)中,較多的用戶還是使用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)。中,較多的用戶還是使用匯編語(yǔ)言進(jìn)行程序設(shè)計(jì)。 4.1.1 4.1.1 概述概述 單片機(jī)應(yīng)用技
4、術(shù)3/814.1.2 4.1.2 操作碼操作碼 操作碼是指令功能的英文縮寫。操作碼是指令功能的英文縮寫。 操作碼操作碼含義含義1. 1. 傳送類:傳送類: MOV MOV MOVX MOVX MOVC MOVC傳送字節(jié)變量(數(shù)據(jù)存儲(chǔ)器、傳送字節(jié)變量(數(shù)據(jù)存儲(chǔ)器、I/OI/O口)口)外部送數(shù)到外部送數(shù)到A A程序存儲(chǔ)器送數(shù)到程序存儲(chǔ)器送數(shù)到A A2. 2. 數(shù)據(jù)操作類:數(shù)據(jù)操作類: ADD ADD SUBB SUBB MUL MUL DIV DIV加加帶借位減帶借位減乘乘除除3. 3. 程序控制類程序控制類: AJMP AJMP(SJMPSJMP、LJMPLJMP) JZ JZ、JCJC、JBJ
5、B(JNZJNZ、JNCJNC、JNBJNB) ACALL ACALL(LCALLLCALL) RET RET CJNE CJNE絕對(duì)轉(zhuǎn)移(短轉(zhuǎn)移、長(zhǎng)轉(zhuǎn)移)絕對(duì)轉(zhuǎn)移(短轉(zhuǎn)移、長(zhǎng)轉(zhuǎn)移)有條件轉(zhuǎn)移有條件轉(zhuǎn)移絕對(duì)調(diào)用(長(zhǎng)調(diào)用)絕對(duì)調(diào)用(長(zhǎng)調(diào)用)子程序返回子程序返回第一操作數(shù)與第二操作數(shù)比較不等則轉(zhuǎn)移第一操作數(shù)與第二操作數(shù)比較不等則轉(zhuǎn)移4. 4. 邏輯操作類:邏輯操作類: ANL ANL ORL ORL XRL XRL與與或或異或異或單片機(jī)應(yīng)用技術(shù)4/814.1.3 4.1.3 操作數(shù)操作數(shù) 操作數(shù)操作數(shù)是一條指令操作的對(duì)象。不同功能的指令,操作對(duì)象形式不同。是一條指令操作的對(duì)象。不同功能的指令,操作
6、對(duì)象形式不同。 操作數(shù)可以是數(shù)據(jù),也可以是地址。操作數(shù)可以是數(shù)據(jù),也可以是地址。 操作數(shù)是指令中給出的數(shù)據(jù)時(shí),被稱為立即數(shù)。它有操作數(shù)是指令中給出的數(shù)據(jù)時(shí),被稱為立即數(shù)。它有8 8位和位和1616位二進(jìn)位二進(jìn)制數(shù)兩種。在助記符的數(shù)字前加以制數(shù)兩種。在助記符的數(shù)字前加以“#”“#”來標(biāo)記其是立即數(shù),常用符號(hào)來標(biāo)記其是立即數(shù),常用符號(hào)“#“#data”data”表示。表示。 操作數(shù)也可以是存放數(shù)據(jù)的地址,這些地址可以是:操作數(shù)也可以是存放數(shù)據(jù)的地址,這些地址可以是:1.1.所選定寄存器工作區(qū)內(nèi)的所選定寄存器工作區(qū)內(nèi)的R R7 7R R0 0,A A、B B、C C(位)、位)、ABAB(雙字節(jié)),
7、雙字節(jié)),DPTRDPTR(雙字節(jié))等可編址的寄存器。雙字節(jié))等可編址的寄存器。2.2. 內(nèi)部數(shù)據(jù)存儲(chǔ)器中低內(nèi)部數(shù)據(jù)存儲(chǔ)器中低128128字節(jié),專用寄存器字節(jié),專用寄存器SFRSFR,可尋址的位??蓪ぶ返奈弧?.3. 外部外部數(shù)據(jù)存儲(chǔ)器空間。數(shù)據(jù)存儲(chǔ)器空間。4.4. 程序存儲(chǔ)器空間。程序存儲(chǔ)器空間。 注意注意 :編寫程序時(shí),操作數(shù)的最高位大于:編寫程序時(shí),操作數(shù)的最高位大于9 9時(shí),在操作數(shù)的最高時(shí),在操作數(shù)的最高位前要加寫位前要加寫0 0。否則,編譯會(huì)提示出錯(cuò)。例如:。否則,編譯會(huì)提示出錯(cuò)。例如:MOV A,#0F8HMOV A,#0F8H是正確的,是正確的,而而MOV A,#F8HMOV
8、A,#F8H是不正確的。是不正確的。單片機(jī)應(yīng)用技術(shù)5/814.2 4.2 指令格式及分類指令格式及分類 用助記符來描述機(jī)器指令的語(yǔ)言稱為符號(hào)語(yǔ)言或匯編語(yǔ)言,匯編用助記符來描述機(jī)器指令的語(yǔ)言稱為符號(hào)語(yǔ)言或匯編語(yǔ)言,匯編語(yǔ)言是一種面向機(jī)器的程序設(shè)計(jì)語(yǔ)言。其規(guī)定的格式如下:語(yǔ)言是一種面向機(jī)器的程序設(shè)計(jì)語(yǔ)言。其規(guī)定的格式如下: 標(biāo)號(hào)標(biāo)號(hào):操作碼助記符操作碼助記符 第一操作數(shù)第一操作數(shù),第二操作數(shù)第二操作數(shù) , ,第三操作數(shù)第三操作數(shù) ; ;注釋注釋 標(biāo)號(hào)標(biāo)號(hào)是表示該指令所在的符號(hào)地址,一般是由字母開頭的字符串組成。是表示該指令所在的符號(hào)地址,一般是由字母開頭的字符串組成。例如:例如: ABC Q3 P
9、AT D678 ABC Q3 PAT D678 均為標(biāo)號(hào)的允許格式均為標(biāo)號(hào)的允許格式 5 5AC -PTR +AAC -PTR +A等等 均為標(biāo)號(hào)不允許的格式均為標(biāo)號(hào)不允許的格式 操作碼操作碼助記符表示了指令的功能。助記符表示了指令的功能。 第一第一操作數(shù)操作數(shù)、第二操作數(shù)都表示操作的對(duì)象,這些是指令的核心、第二操作數(shù)都表示操作的對(duì)象,這些是指令的核心部分。指令操作碼部分是必不可少的。操作數(shù)段有的指令可以沒有,部分。指令操作碼部分是必不可少的。操作數(shù)段有的指令可以沒有,或者只有一個(gè)操作數(shù),例如:或者只有一個(gè)操作數(shù),例如: RETIRETI; ;中斷返回,無(wú)操作數(shù)中斷返回,無(wú)操作數(shù) CPL AC
10、PL A; ;累加器逐位取反,只有一個(gè)操作數(shù)。累加器逐位取反,只有一個(gè)操作數(shù)。 注釋注釋字段是為方便用戶閱讀程序所加注的說明。字段是為方便用戶閱讀程序所加注的說明。 4.2.1 4.2.1 匯編語(yǔ)言匯編語(yǔ)言 單片機(jī)應(yīng)用技術(shù)6/814.2.2 4.2.2 指令代碼的存儲(chǔ)格式指令代碼的存儲(chǔ)格式 指令代碼是指令的二進(jìn)制表示方法,是指令在存儲(chǔ)器中存放的形指令代碼是指令的二進(jìn)制表示方法,是指令在存儲(chǔ)器中存放的形式。匯編語(yǔ)言只有經(jīng)式。匯編語(yǔ)言只有經(jīng)“編輯編輯/ /匯編匯編”程序翻譯成機(jī)器語(yǔ)言,才能被執(zhí)行。程序翻譯成機(jī)器語(yǔ)言,才能被執(zhí)行。STC12C5410ADSTC12C5410AD單片機(jī)指令系統(tǒng)中的指令
11、字長(zhǎng)有單字節(jié)、雙字節(jié)、三字單片機(jī)指令系統(tǒng)中的指令字長(zhǎng)有單字節(jié)、雙字節(jié)、三字節(jié)三種。指令字節(jié)數(shù)越多,所占用內(nèi)存單元越多。但是指令執(zhí)行時(shí)間節(jié)三種。指令字節(jié)數(shù)越多,所占用內(nèi)存單元越多。但是指令執(zhí)行時(shí)間長(zhǎng)短并不和所占用字節(jié)數(shù)的多少成比例。例如乘法為單字節(jié)指令,但長(zhǎng)短并不和所占用字節(jié)數(shù)的多少成比例。例如乘法為單字節(jié)指令,但是所需的指令執(zhí)行時(shí)間卻最長(zhǎng)。是所需的指令執(zhí)行時(shí)間卻最長(zhǎng)。 單字節(jié)指令:操作碼單字節(jié)指令:操作碼 例:例:RETRET;機(jī)器代碼:機(jī)器代碼:2222H H 雙字節(jié)指令:操雙字節(jié)指令:操 作作 碼操碼操 作作 數(shù)數(shù) 例:例:MOV A,#0FHMOV A,#0FH;機(jī)器代碼:機(jī)器代碼:74
12、 074 0F HF H 三字節(jié)指令:操作碼第一操作數(shù)第二操作數(shù)三字節(jié)指令:操作碼第一操作數(shù)第二操作數(shù) 例:例:MOV 74H,#0BHMOV 74H,#0BH; 機(jī)器代碼:機(jī)器代碼:75 74 075 74 0BHBH單片機(jī)應(yīng)用技術(shù)7/814.2.3 4.2.3 指令中的符號(hào)約定指令中的符號(hào)約定 符號(hào)符號(hào)含義含義A A累加器累加器ACCACCB B寄存器寄存器B BC C進(jìn)(借)位標(biāo)志位,在位操作指令中作為累加器使用進(jìn)(借)位標(biāo)志位,在位操作指令中作為累加器使用directdirect直接地址直接地址bitbit位地址,內(nèi)部位地址,內(nèi)部RAMRAM中的可尋址位和中的可尋址位和SFRSFR中的
13、尋址位中的尋址位# #datadata8 8位常數(shù)(位常數(shù)(8 8位立即數(shù))位立即數(shù))# #data16data161616位常數(shù)(位常數(shù)(1616位立即數(shù))位立即數(shù))間接尋址間接尋址relrel8 8位帶符號(hào)偏移量。位帶符號(hào)偏移量。RnRn當(dāng)前工作區(qū)(當(dāng)前工作區(qū)(0 03 3區(qū))的工作寄存器(區(qū))的工作寄存器(n=0,1,7n=0,1,7)RiRi可作地址寄存器的工作寄存器可作地址寄存器的工作寄存器R0R0和和R1R1(i=0,1i=0,1)(X X)X X寄存器內(nèi)容寄存器內(nèi)容(X X)由由X X寄存器尋址的存儲(chǔ)單元的內(nèi)容寄存器尋址的存儲(chǔ)單元的內(nèi)容表示數(shù)據(jù)的傳送方向表示數(shù)據(jù)的傳送方向/ /表
14、示位操作數(shù)取反表示位操作數(shù)取反表示邏輯與操作表示邏輯與操作表示邏輯或操作表示邏輯或操作表示邏輯異或操作表示邏輯異或操作單片機(jī)應(yīng)用技術(shù)8/814.3 4.3 尋址方式尋址方式 指令中的源操作數(shù)是立即數(shù),叫做立即尋址。立即數(shù)的類型可指令中的源操作數(shù)是立即數(shù),叫做立即尋址。立即數(shù)的類型可以是:二進(jìn)制以是:二進(jìn)制(B)(B)、十進(jìn)制、十六進(jìn)制、十進(jìn)制、十六進(jìn)制(H)(H)、整數(shù)、序數(shù)或者字符。、整數(shù)、序數(shù)或者字符。立即數(shù)的字長(zhǎng)可以是立即數(shù)的字長(zhǎng)可以是8 8位或位或1616位。位。例如例如: MOV A,#61HMOV A,#61H這條指令是把這條指令是把61H61H這個(gè)數(shù)據(jù)送入到累加器這個(gè)數(shù)據(jù)送入到累
15、加器A A中。中。例如例如: MOV DPTRMOV DPTR,#,#2050H2050H這條指令是把這條指令是把2050H2050H這個(gè)數(shù)據(jù)送入到數(shù)據(jù)指針這個(gè)數(shù)據(jù)送入到數(shù)據(jù)指針DPTRDPTR中。中。1 1立即尋址立即尋址 操作數(shù)是指令的重要組成部分,它指定了參與運(yùn)算的數(shù)或數(shù)所在操作數(shù)是指令的重要組成部分,它指定了參與運(yùn)算的數(shù)或數(shù)所在單元地址,而如何得到這個(gè)地址就稱為尋址方式。一般來說,尋址方單元地址,而如何得到這個(gè)地址就稱為尋址方式。一般來說,尋址方式越多,計(jì)算機(jī)功能越強(qiáng),靈活性越大。所以尋址方式對(duì)機(jī)器的性能式越多,計(jì)算機(jī)功能越強(qiáng),靈活性越大。所以尋址方式對(duì)機(jī)器的性能有重大影響。有重大影響
16、。STC12C5410ADSTC12C5410AD單片機(jī)共有單片機(jī)共有7 7種尋址方式,描述如下:種尋址方式,描述如下:0111010001100001PC操作碼立即數(shù)ACC中0E0H61H單片機(jī)應(yīng)用技術(shù)9/812 2直接尋址直接尋址 直接尋址就是在指令中包含了操作數(shù)的地址,該地址直接給出直接尋址就是在指令中包含了操作數(shù)的地址,該地址直接給出了參加運(yùn)算或傳送的單元或位。它可訪問三種地址空間:了參加運(yùn)算或傳送的單元或位。它可訪問三種地址空間: (1 1) 特殊功能寄存器特殊功能寄存器SFRSFR:直接尋址是唯一的訪問形式直接尋址是唯一的訪問形式 (2 2) 內(nèi)部數(shù)據(jù)內(nèi)部數(shù)據(jù)RAMRAM中的中的0
17、000H H7FH7FH的的128128個(gè)字節(jié)單元個(gè)字節(jié)單元 (3 3) 位地址空間位地址空間 例如:例如:MOV A,60H ;MOV A,60H ;把把60H60H單元內(nèi)容送入累加器單元內(nèi)容送入累加器A A中。中。 1110010101100000操作碼直接地址ACC 0E0HPC60H程序存儲(chǔ)器RAM89H89H單片機(jī)應(yīng)用技術(shù)10/813 3寄存器尋址寄存器尋址 指定某一可尋址的寄存器的內(nèi)容為操作數(shù),對(duì)寄存器指定某一可尋址的寄存器的內(nèi)容為操作數(shù),對(duì)寄存器ACCACC,B B,DPTRDPTR和和CYCY(進(jìn)位標(biāo)志,也是布爾處理機(jī)的累加器),其尋址時(shí)具體的進(jìn)位標(biāo)志,也是布爾處理機(jī)的累加器)
18、,其尋址時(shí)具體的寄存器已隱含在其操作碼中。而對(duì)選定的寄存器已隱含在其操作碼中。而對(duì)選定的8 8個(gè)工作寄存器個(gè)工作寄存器R R7 7R R0 0,則用則用指令操作碼的低指令操作碼的低3 3位指明所用的寄存器。在應(yīng)用中,可以先通過位指明所用的寄存器。在應(yīng)用中,可以先通過PSWPSW中中的的RS1RS1、RS0RS0兩位來選擇寄存器組,再用操作碼中低兩位來選擇寄存器組,再用操作碼中低3 3位來確定是組內(nèi)哪位來確定是組內(nèi)哪一個(gè)寄存器,達(dá)到尋址的目的。一個(gè)寄存器,達(dá)到尋址的目的。 例如:例如:INC R5INC R5; ;把寄存器把寄存器R3R3的內(nèi)容加的內(nèi)容加1 1后再送回后再送回R5R5000011
19、01110000RS1RS0PSWALU內(nèi)部RAMPC D5D6D7單片機(jī)應(yīng)用技術(shù)11/814 4寄存器間接尋址寄存器間接尋址 指令指定某一寄存器的內(nèi)容作為操作數(shù)地址。指令指定某一寄存器的內(nèi)容作為操作數(shù)地址。 STC12C5410AD STC12C5410AD單片機(jī)中可用來間接尋址的寄存器有:選定工作寄存器區(qū)的單片機(jī)中可用來間接尋址的寄存器有:選定工作寄存器區(qū)的R R0 0、R R1 1,1616位的數(shù)據(jù)指針位的數(shù)據(jù)指針DPTRDPTR,使用時(shí)前面加使用時(shí)前面加 表示間接尋址。表示間接尋址。 例如例如:MOV A MOV A , ,R0 R0 ; ;將將R0R0中的內(nèi)容所表示的地址單元中的內(nèi)容
20、送給中的內(nèi)容所表示的地址單元中的內(nèi)容送給A A MOVX MOVX DPTP DPTP , ,A A1110011 00D5D6D700110111RS1 RS00110000000110111內(nèi)部RAM000021形成8位地址34PSW A 單片機(jī)應(yīng)用技術(shù)12/815 5變址尋址變址尋址 由指令指定的偏移量寄存器和變址寄存器由指令指定的偏移量寄存器和變址寄存器DPTRDPTR或或PCPC相相加所得結(jié)果作為操作數(shù)地址。加所得結(jié)果作為操作數(shù)地址。 例如例如:MOVC A MOVC A , ,A+PCA+PC 其中其中A A作為偏移量寄存器,作為偏移量寄存器,PCPC作為變址寄存器,作為變址寄存器
21、,A A中內(nèi)中內(nèi)容為無(wú)符號(hào)數(shù)和容為無(wú)符號(hào)數(shù)和PCPC相加,從而得到其真正的操作數(shù)地址。相加,從而得到其真正的操作數(shù)地址。單片機(jī)應(yīng)用技術(shù)13/816 6相對(duì)尋址相對(duì)尋址 把指令中給定的地址偏移量與本指令所在單元地址(即程序計(jì)數(shù)把指令中給定的地址偏移量與本指令所在單元地址(即程序計(jì)數(shù)器器PCPC中的內(nèi)容)相加,即得到真正的程序轉(zhuǎn)移地址。與變址方式不同。中的內(nèi)容)相加,即得到真正的程序轉(zhuǎn)移地址。與變址方式不同。該偏移量有正、負(fù)號(hào),在該機(jī)器指令中必須以補(bǔ)碼形式給出,所轉(zhuǎn)移該偏移量有正、負(fù)號(hào),在該機(jī)器指令中必須以補(bǔ)碼形式給出,所轉(zhuǎn)移的范圍為相對(duì)于當(dāng)前的范圍為相對(duì)于當(dāng)前PCPC值的值的-128-128+1
22、27+127之間。之間。 例如例如:JC 80HJC 80H 若若C=0C=0,則則PCPC值不變,若進(jìn)位值不變,若進(jìn)位C=1C=1,則以現(xiàn)行的則以現(xiàn)行的PCPC為基地址加上為基地址加上8080H H得到轉(zhuǎn)向地址。得到轉(zhuǎn)向地址。 1005H0100000010000000PC+11006HPC+2ALU1007H PC操作碼偏移量1007H-80H=0F87H0F87HPC1007H單片機(jī)應(yīng)用技術(shù)14/817 7位尋址位尋址 支持位單元存取操作是支持位單元存取操作是STC12C5410ADSTC12C5410AD單片機(jī)的一個(gè)主要特點(diǎn)。單片機(jī)的一個(gè)主要特點(diǎn)。位操作指令能對(duì)位地址空間的每一位都可進(jìn)
23、行運(yùn)算和傳送操作。位操作指令能對(duì)位地址空間的每一位都可進(jìn)行運(yùn)算和傳送操作。例如:例如:MOV C,P1.0MOV C,P1.0; ;將將P1.0P1.0的狀態(tài)傳送到的狀態(tài)傳送到C C SETB 20.6H SETB 20.6H ; ;將將2020H H單元的第單元的第6 6位置為位置為1 1 MOV A,50HMOV A,50H;50H;50H是字節(jié)地址是字節(jié)地址 MOV C,50H MOV C,50H ;50H;50H是位地址是位地址 MOV 60H,50HMOV 60H,50H;50H;50H是字節(jié)地址是字節(jié)地址單片機(jī)應(yīng)用技術(shù)15/814.4 4.4 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送
24、類指令是使用頻率最高的一類數(shù)據(jù)傳送類指令是使用頻率最高的一類指令。主要用來給指令。主要用來給STC12C5410ADSTC12C5410AD系統(tǒng)的內(nèi)部系統(tǒng)的內(nèi)部和外部資源賦值,進(jìn)行堆棧的存取操作等。和外部資源賦值,進(jìn)行堆棧的存取操作等。數(shù)據(jù)傳送類指令執(zhí)行前后,對(duì)程序狀態(tài)字?jǐn)?shù)據(jù)傳送類指令執(zhí)行前后,對(duì)程序狀態(tài)字PSWPSW不產(chǎn)生影響。按其操作方式,又可把它不產(chǎn)生影響。按其操作方式,又可把它們分為三種:們分為三種: 數(shù)據(jù)傳送數(shù)據(jù)傳送 數(shù)據(jù)交換數(shù)據(jù)交換 棧操作棧操作 單片機(jī)應(yīng)用技術(shù)16/814.4.1 4.4.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 格式:格式:MOV MOV , 功能:把第二操作數(shù)指定的字節(jié)變
25、量傳送功能:把第二操作數(shù)指定的字節(jié)變量傳送到由第一操作數(shù)指定的單元中,不影響源字節(jié),到由第一操作數(shù)指定的單元中,不影響源字節(jié),不影響任何別的寄存器或標(biāo)志。這是最靈活的不影響任何別的寄存器或標(biāo)志。這是最靈活的操作,允許操作,允許1515種源和目的尋址方式組合。種源和目的尋址方式組合。一、一、 MOV指令指令單片機(jī)應(yīng)用技術(shù)17/811. 1. 立即數(shù)送累加器立即數(shù)送累加器A A和內(nèi)部數(shù)據(jù)存儲(chǔ)器(和內(nèi)部數(shù)據(jù)存儲(chǔ)器(RnRn,內(nèi)部?jī)?nèi)部RAMRAM,SFRSFR)。共有共有4 4條指令:條指令:MOV A, #data MOV A, #data ; ;(A A) #data #dataMOV direc
26、tMOV direct, ,#data #data ; ;(directdirect) #data #dataMOV MOV RiRi, #data , #data ; ;(RiRi) #data #dataMOV MOV RnRn, #data , #data ; ;(RnRn) #data #data 符號(hào)表示間接尋址,(符號(hào)表示間接尋址,(RiRi)表示把立即數(shù)送到由表示把立即數(shù)送到由RiRi寄存器的內(nèi)容所寄存器的內(nèi)容所指出的那個(gè)指出的那個(gè)RAMRAM單元中去。單元中去。RiRi中中i=0i=0或或i=1i=1。例例1 1 MOV MOV RR0 0,#56H,#56H MOV MOV
27、RR1 1,#59H,#59H 假設(shè)假設(shè)R0R0的內(nèi)容為的內(nèi)容為2020H H,則執(zhí)行上述第一條指令后則執(zhí)行上述第一條指令后,立即數(shù)立即數(shù)5656H H將送入內(nèi)部將送入內(nèi)部數(shù)據(jù)數(shù)據(jù)RAMRAM字節(jié)地址為字節(jié)地址為2020H H的單元中。的單元中。例例2 2 MOVMOVR R0 0,#79H,#79H ; ;將立即數(shù)將立即數(shù)7979H H送到送到R0R0中中 MOVMOVR R1 1,#15H,#15H ; ;將立即數(shù)將立即數(shù)1515H H送到送到R1R1中中例例3 3 利用直接尋址可把立即數(shù)送入內(nèi)部數(shù)據(jù)利用直接尋址可把立即數(shù)送入內(nèi)部數(shù)據(jù)RAMRAM任意單元或任意單元或SFRSFR中任一特殊功
28、中任一特殊功能寄存器,如例能寄存器,如例1 1用間接尋址給內(nèi)部用間接尋址給內(nèi)部RAM 20HRAM 20H單元送立即數(shù)單元送立即數(shù)5656H H,需兩條指令:需兩條指令: MOVMOVR R0 0,#20H,#20H MOV MOVRR0 0,#56H,#56H 用直接尋址只用一條指令:用直接尋址只用一條指令: MOVMOV20H,#56H20H,#56H 而指令而指令MOVMOVP1,#80HP1,#80H 則可把立即數(shù)則可把立即數(shù)8080H H直接送入直接送入P1P1(字節(jié)地址為字節(jié)地址為9090H H)口中??谥小纹瑱C(jī)應(yīng)用技術(shù)18/81 2.2.內(nèi)部數(shù)據(jù)存儲(chǔ)器(內(nèi)部數(shù)據(jù)存儲(chǔ)器(RnRn
29、,內(nèi)部?jī)?nèi)部RAMRAM,SFRSFR)與累加器與累加器A A傳送數(shù)據(jù)傳送數(shù)據(jù)共有共有6 6條指令:條指令: MOV AMOV A, , direct direct; ;(A A) (directdirect) MOV A, MOV A, RiRi ; ;(A A) (RiRi) MOV A, MOV A, RnRn ; ;(A A) (RnRn) MOV directMOV direct, , A A ; ;(directdirect) (A A) MOV MOV RiRi, A , A ; ;(RiRi) (A A) MOV MOV RnRn, A , A ; ;(RnRn)(A A) 間接
30、尋址間接尋址 RiRi是以是以RiRi的內(nèi)容作為地址,由于的內(nèi)容作為地址,由于RiRi為八位寄存器,尋址范圍為八位寄存器,尋址范圍為為0 0255255。但由于特殊功能寄存器。但由于特殊功能寄存器SFRSFR只能被直接尋址,而只能被直接尋址,而對(duì)于普通的對(duì)于普通的8051單片機(jī)來說,單片機(jī)來說,在在SFRSFR地址范圍(地址范圍(128128255255)中很多單元又無(wú)定義,若對(duì)之讀)中很多單元又無(wú)定義,若對(duì)之讀寫,將得不到確定的值,寫入的數(shù)也將丟失。所以對(duì)內(nèi)部數(shù)據(jù)存儲(chǔ)器來說間寫,將得不到確定的值,寫入的數(shù)也將丟失。所以對(duì)內(nèi)部數(shù)據(jù)存儲(chǔ)器來說間接尋址的真正作用范圍實(shí)際上只有接尋址的真正作用范圍實(shí)
31、際上只有0 0127127個(gè)單元的內(nèi)部數(shù)據(jù)個(gè)單元的內(nèi)部數(shù)據(jù)RAMRAM地址。地址。 例例4 4 指令序列:指令序列: MOV R1, #82HMOV R1, #82H MOV A, R1 MOV A, R1 上述指令對(duì)于普通上述指令對(duì)于普通80518051單片機(jī)是不正確的,因?yàn)閱纹瑱C(jī)是不正確的,因?yàn)?282H H是特殊功能寄存器是特殊功能寄存器DPLDPL的地址值,對(duì)特殊功能寄存器來說,這種間接尋址方式無(wú)效。但是,對(duì)的地址值,對(duì)特殊功能寄存器來說,這種間接尋址方式無(wú)效。但是,對(duì)于于STC12C5410ADSTC12C5410AD單片機(jī)而言則是正確的,其功能是將內(nèi)部單片機(jī)而言則是正確的,其功能是
32、將內(nèi)部RAMRAM的的8282H H單元中的單元中的內(nèi)容送到內(nèi)容送到A A中。并且,對(duì)于中。并且,對(duì)于80528052的內(nèi)部的內(nèi)部80H80HFFHFFH的的RAMRAM單元,只能使用這種間單元,只能使用這種間接尋址方式進(jìn)行訪問。接尋址方式進(jìn)行訪問。 所以欲從所以欲從DPLDPL取數(shù)到累加器取數(shù)到累加器A A,可用直接尋址方式:可用直接尋址方式:MOV A, 82HMOV A, 82H單片機(jī)應(yīng)用技術(shù)19/813.3.內(nèi)部數(shù)據(jù)存儲(chǔ)器中內(nèi)部數(shù)據(jù)存儲(chǔ)器中RnRn、SFRSFR和內(nèi)部數(shù)據(jù)和內(nèi)部數(shù)據(jù)RAMRAM之間的數(shù)據(jù)傳送之間的數(shù)據(jù)傳送, ,共有共有5 5條條指令:指令: MOV direct, di
33、rect MOV direct, direct ; ;(directdirect目目) (directdirect源源) MOV directMOV direct, RiRi ; ;(directdirect)(RiRi) MOV direct, MOV direct, RnRn ; ;(directdirect)(RnRn) MOV MOV RiRi, direct , direct ; ;(RiRi)(directdirect) MOV MOV RnRn, direct , direct ; ;(RnRn)(directdirect) 該該5條指令共有三種尋址方式:直接尋址,寄存器尋址,寄
34、存器間接尋址。條指令共有三種尋址方式:直接尋址,寄存器尋址,寄存器間接尋址。對(duì)于直接尋址方式,可訪問內(nèi)部對(duì)于直接尋址方式,可訪問內(nèi)部RAM 00H7FH地址空間的單元和所有特殊功地址空間的單元和所有特殊功能寄存器,對(duì)能寄存器,對(duì)80HFFH地址單元需要使用寄存器簡(jiǎn)介尋址方式進(jìn)行訪問。地址單元需要使用寄存器簡(jiǎn)介尋址方式進(jìn)行訪問。 例例5 5 指令指令 MOV P3, P1MOV P3, P1 可把可把P1P1口的內(nèi)容直接送到口的內(nèi)容直接送到P3P3口輸出,而不必經(jīng)過累加器口輸出,而不必經(jīng)過累加器A“A“中轉(zhuǎn)中轉(zhuǎn)”。 例例6 6 若設(shè)若設(shè)PSWPSW中標(biāo)志位中標(biāo)志位RS1RS1、RS0RS0為為“
35、11”“11”,則選中第三組工作寄存器區(qū),則選中第三組工作寄存器區(qū),在,在 這種情況下:這種情況下: MOV direct, R0MOV direct, R0 與與 MOV direct, 18HMOV direct, 18H兩指令是等價(jià)的。兩指令是等價(jià)的。 例例7 7 用立即尋址指令可直接給內(nèi)部用立即尋址指令可直接給內(nèi)部RAMRAM中中2020H H、25H25H和和P1P1口上置數(shù):口上置數(shù): MOV 20H, #25HMOV 20H, #25H MOV 25H, #10H MOV 25H, #10H MOV P1 , #0CAH MOV P1 , #0CAH執(zhí)行后使(執(zhí)行后使(2020H
36、 H)=25H=25H,(,(25H25H)=10H=10H,(,(P1P1)=0CAH=0CAH。單片機(jī)應(yīng)用技術(shù)20/81 4.4. 目標(biāo)地址傳送目標(biāo)地址傳送, ,只有一條指令:只有一條指令: MOV DPTR ,#data16 MOV DPTR ,#data16 功能:把功能:把1616位常數(shù)裝入數(shù)據(jù)指針。位常數(shù)裝入數(shù)據(jù)指針。 例例8 8 指令指令 MOV DPTR ,#2003HMOV DPTR ,#2003H 表示把表示把1616位常數(shù)裝入數(shù)據(jù)指針。其中位常數(shù)裝入數(shù)據(jù)指針。其中DPH=20HDPH=20H,DPL=03HDPL=03H。單片機(jī)應(yīng)用技術(shù)21/81二、外部數(shù)據(jù)存儲(chǔ)器與累加器
37、二、外部數(shù)據(jù)存儲(chǔ)器與累加器A A傳送指令傳送指令MOVXMOVX MOVX MOVX指令主要用于累加器指令主要用于累加器A A和外部擴(kuò)充的和外部擴(kuò)充的RAMRAM或擴(kuò)展或擴(kuò)展I/OI/O口進(jìn)行數(shù)據(jù)傳口進(jìn)行數(shù)據(jù)傳送。這種傳送只有一種尋址方式,就是寄存器間接尋址。送。這種傳送只有一種尋址方式,就是寄存器間接尋址。有兩種寄存器間有兩種寄存器間接尋址:接尋址: 1)用)用R1或或R0進(jìn)行寄存器間接尋址。在傳統(tǒng)的進(jìn)行寄存器間接尋址。在傳統(tǒng)的8051單片機(jī)中,這種單片機(jī)中,這種方式能訪問外部數(shù)據(jù)存儲(chǔ)器(或擴(kuò)展方式能訪問外部數(shù)據(jù)存儲(chǔ)器(或擴(kuò)展I/O口)口)256個(gè)字節(jié)中的一個(gè)字節(jié)。若個(gè)字節(jié)中的一個(gè)字節(jié)。若要
38、訪問更大的空間,需使用要訪問更大的空間,需使用P2口輸出高口輸出高8位地址。需先給位地址。需先給P2和和Ri賦值,然賦值,然后執(zhí)行后執(zhí)行MOVX指令。指令。在在STC12C5410AD單片機(jī)中,由于不再支持外部總單片機(jī)中,由于不再支持外部總線的擴(kuò)展,因此,使用線的擴(kuò)展,因此,使用R1或者或者R0間接尋址外部存儲(chǔ)器時(shí),不再需要由間接尋址外部存儲(chǔ)器時(shí),不再需要由P2口輸出地址高口輸出地址高8位,執(zhí)行該指令時(shí),也不會(huì)對(duì)位,執(zhí)行該指令時(shí),也不會(huì)對(duì)I/O口的內(nèi)容造成任何影響??诘膬?nèi)容造成任何影響。 2)用)用16位的數(shù)據(jù)存儲(chǔ)器地址指針位的數(shù)據(jù)存儲(chǔ)器地址指針DPTR進(jìn)行寄存器間接尋址。進(jìn)行寄存器間接尋址。
39、 指令格式:指令格式:MOVX MOVX , MOVX A, DPTR MOVX A, DPTR ; ;(A A)(DPTRDPTR) MOVX A, MOVX A, RiRi ; ;(A A)(RiRi) MOVX DPTR,A MOVX DPTR,A ; ;(DPTRDPTR)(A A) MOVX MOVX RiRi, A , A ; ;(RiRi)(A A)在實(shí)際應(yīng)用中,一般使用在實(shí)際應(yīng)用中,一般使用DPTR寄存器間接尋址方式訪問外部數(shù)據(jù)存儲(chǔ)器。寄存器間接尋址方式訪問外部數(shù)據(jù)存儲(chǔ)器。 例例 若外部數(shù)據(jù)存儲(chǔ)器單元中:(若外部數(shù)據(jù)存儲(chǔ)器單元中:(30073007H H)= =(60H60H)
40、,(),(3008H3008H)= =(2FH2FH)則執(zhí)行:則執(zhí)行: MOV DPTR ,#3007HMOV DPTR ,#3007H MOVX A, DPTR MOVX A, DPTR使累加器(使累加器(A A)=60H=60H單片機(jī)應(yīng)用技術(shù)22/81三、程序存儲(chǔ)器向累加器三、程序存儲(chǔ)器向累加器A A傳送指令傳送指令MOVCMOVC 對(duì)于程序存儲(chǔ)器,對(duì)于程序存儲(chǔ)器,STC12C5410ADSTC12C5410AD單片機(jī)提供了兩條極其有用的單片機(jī)提供了兩條極其有用的查表指令。這兩條指令采用變址尋址,以查表指令。這兩條指令采用變址尋址,以PCPC或或DPTRDPTR為基址寄存器,為基址寄存器,
41、以累加器以累加器A A為變址寄存器,基址寄存器與變址寄存器內(nèi)容相加即得為變址寄存器,基址寄存器與變址寄存器內(nèi)容相加即得到程序存儲(chǔ)器某單元的地址值,到程序存儲(chǔ)器某單元的地址值,MOVCMOVC指令則把該存貯單元的內(nèi)容指令則把該存貯單元的內(nèi)容傳送到累加器傳送到累加器A A中。中。 指令格式:指令格式:MOVC A ,A+PCMOVC A ,A+PC ; PC ; PC(PCPC)+1 +1 (A A)(A A)+ +(PCPC) MOVC A ,A+DPTR ; MOVC A ,A+DPTR ; (A A)(A A)+ +(DPTRDPTR) 功能:把累加器功能:把累加器A A中內(nèi)容與基址寄存器(
42、中內(nèi)容與基址寄存器(PCPC、DPTRDPTR)內(nèi)容相加,內(nèi)容相加,求得程序存儲(chǔ)器某單元地址,再把該地址單元內(nèi)容送累加器求得程序存儲(chǔ)器某單元地址,再把該地址單元內(nèi)容送累加器A A。指指令執(zhí)行后不改變基址寄存器內(nèi)容,由于執(zhí)行令執(zhí)行后不改變基址寄存器內(nèi)容,由于執(zhí)行1616位加法,從低位加法,從低8 8位產(chǎn)位產(chǎn)生的進(jìn)位將傳送到高位去,不影響任何標(biāo)志。這兩條指令主要用生的進(jìn)位將傳送到高位去,不影響任何標(biāo)志。這兩條指令主要用于查表,即完成從程序存儲(chǔ)器讀取數(shù)據(jù)的功能。但由于兩條指令于查表,即完成從程序存儲(chǔ)器讀取數(shù)據(jù)的功能。但由于兩條指令使用的基址寄存器不同,因此使用范圍也不同。使用的基址寄存器不同,因此使
43、用范圍也不同。單片機(jī)應(yīng)用技術(shù)23/81 MOVC A ,A+PCMOVC A ,A+PC 以以PCPC作為基址寄存器,在作為基址寄存器,在CPUCPU取完指令操作碼時(shí)取完指令操作碼時(shí)PCPC會(huì)自動(dòng)加會(huì)自動(dòng)加1 1,指向下一條指令的第一字節(jié)地址,所以這時(shí)作為基址寄存器的指向下一條指令的第一字節(jié)地址,所以這時(shí)作為基址寄存器的PCPC已已不是原值,而是不是原值,而是PC+1PC+1值。因?yàn)槔奂悠髦械膬?nèi)容為值。因?yàn)槔奂悠髦械膬?nèi)容為8 8位無(wú)符號(hào)整數(shù),位無(wú)符號(hào)整數(shù),這就使得本指令查表范圍只能在以這就使得本指令查表范圍只能在以PCPC當(dāng)前值開始后的當(dāng)前值開始后的256256個(gè)字節(jié)范個(gè)字節(jié)范圍內(nèi)圍內(nèi), ,
44、偏移量的計(jì)算公式如下:偏移量的計(jì)算公式如下: 偏移量:偏移量: DIS = DIS = 表首地址表首地址 (該指令所在地址(該指令所在地址+1+1) 例例1 1 若要根據(jù)累加器若要根據(jù)累加器A A的內(nèi)容找出由偽指令的內(nèi)容找出由偽指令DBDB所定義的四個(gè)值所定義的四個(gè)值中的一個(gè)。可用下列程序:中的一個(gè)??捎孟铝谐绦颍簆pqqppqq: ADD A ,#01HADD A ,#01Hppqq+2ppqq+2: MOVC A ,A+PCMOVC A ,A+PCppqq+3ppqq+3: RETRETppqq+4ppqq+4:STARSTAR: DB 66H DB 66H DB 77HDB 77H DB
45、 88HDB 88H DB 99HDB 99H單片機(jī)應(yīng)用技術(shù)24/81 MOVC A ,A+DPTRMOVC A ,A+DPTR 指令基址寄存器為數(shù)據(jù)指針指令基址寄存器為數(shù)據(jù)指針DPTRDPTR,表格常數(shù)可設(shè)置在表格常數(shù)可設(shè)置在6464K K程序存儲(chǔ)器的程序存儲(chǔ)器的任何地址空間,而不必像任何地址空間,而不必像MOVC A ,A+PCMOVC A ,A+PC指令只設(shè)在指令只設(shè)在PCPC值以下的值以下的256256個(gè)單元個(gè)單元中。其缺點(diǎn)是若中。其缺點(diǎn)是若DPTRDPTR已有它用,在賦表首地址之前必須保護(hù)現(xiàn)場(chǎng),執(zhí)行完已有它用,在賦表首地址之前必須保護(hù)現(xiàn)場(chǎng),執(zhí)行完查表后再予以恢復(fù)。查表后再予以恢復(fù)。例
46、例2 2 試編制根據(jù)累加器試編制根據(jù)累加器A A中的數(shù)(中的數(shù)(0 09 9之間)查其平方表的子程序。之間)查其平方表的子程序。 COUNTCOUNT: PUSH DPH PUSH DPH ; ;保護(hù)保護(hù)DPTRDPTR內(nèi)容內(nèi)容 PUSH DPL PUSH DPL ; ; MOV DPTR ,#TABLE MOV DPTR ,#TABLE; ;賦表首址賦表首址DPTRDPTR MOVC A ,A+DPTR MOVC A ,A+DPTR ; ;據(jù)據(jù)A A中內(nèi)容查表中內(nèi)容查表 POP DPL POP DPL ; ;恢復(fù)恢復(fù)DPTRDPTR原內(nèi)容原內(nèi)容 POP DPH POP DPH RET RET
47、 ; ;返回主程序返回主程序 TABLETABLE: DB 00 DB 00 DB 01 DB 01 DB 04 DB 04 DB 09 DB 09 DB 16 DB 16 DB 25 DB 25 DB 36 DB 36 DB 49 DB 49 DB 64 DB 64 DB 81 DB 81單片機(jī)應(yīng)用技術(shù)25/814.4.2 4.4.2 數(shù)據(jù)交換指令數(shù)據(jù)交換指令 1 1字節(jié)交換指令字節(jié)交換指令 XCH A,direct XCH A,direct ; ;(A A) (directdirect) XCH XCH A,RiA,Ri ; ;(A A) (RiRi) XCH XCH A,RnA,Rn ;
48、 ;(A A) (RnRn) 上述指令把累加器上述指令把累加器A A中內(nèi)容與第二操作數(shù)所指定的工作寄存器,中內(nèi)容與第二操作數(shù)所指定的工作寄存器,間接尋址和直接尋址的某單元內(nèi)容互相交換。間接尋址和直接尋址的某單元內(nèi)容互相交換。例例 設(shè)(設(shè)(R0R0)=20H=20H,(,(A A)=3FH=3FH,(,(20H20H)=75H=75H,執(zhí)行指令執(zhí)行指令 XCH A,R0XCH A,R0 將使(將使(A A)=75H=75H,(,(20H20H)=3FH=3FH,實(shí)現(xiàn)了累加器實(shí)現(xiàn)了累加器A A和內(nèi)部和內(nèi)部RAM RAM 20H20H單元內(nèi)容的互換。單元內(nèi)容的互換。 單片機(jī)應(yīng)用技術(shù)26/81 2 2
49、半字節(jié)交換指令半字節(jié)交換指令 XCHD XCHD A,RiA,Ri ; ;(A A3030)(RiRi)3030) 該指令把累加器該指令把累加器A A的低的低4 4位和寄存器間接尋址的內(nèi)部位和寄存器間接尋址的內(nèi)部RAMRAM單元的低單元的低4 4位交換,高位交換,高4 4位內(nèi)容不變,不影響標(biāo)志位。位內(nèi)容不變,不影響標(biāo)志位。 例例 設(shè)設(shè)R1R1的內(nèi)容為的內(nèi)容為3030H H,A A的內(nèi)容為的內(nèi)容為6767H H,內(nèi)部?jī)?nèi)部RAMRAM中中3030H H的內(nèi)容為的內(nèi)容為8484H H,執(zhí)行指令執(zhí)行指令 XCHD A,R1 XCHD A,R1 結(jié)果:(結(jié)果:(A A)=64H=64H,(,(30H30
50、H)=87H=87H單片機(jī)應(yīng)用技術(shù)27/814.4.3 4.4.3 棧操作指令棧操作指令 PUSH direct PUSH direct; ;(SPSP)(SPSP)+1+1(SPSP)(directdirect) POP direct POP direct; ;(directdirect)(SPSP)()(SPSP)(SPSP)- 1- 1 堆棧中的數(shù)據(jù)是以堆棧中的數(shù)據(jù)是以“后進(jìn)先出后進(jìn)先出”的結(jié)構(gòu)方式處理的,這種的結(jié)構(gòu)方式處理的,這種“后進(jìn)先出后進(jìn)先出”的特點(diǎn)是由堆棧指針的特點(diǎn)是由堆棧指針SPSP來控制的,來控制的,SPSP用來自動(dòng)跟蹤棧頂?shù)刂?。由于單片機(jī)堆用來自動(dòng)跟蹤棧頂?shù)刂贰S捎趩纹瑱C(jī)
51、堆棧編址采用向上生成方式,即棧底占用較低地址,棧頂占用較高地址,所以棧編址采用向上生成方式,即棧底占用較低地址,棧頂占用較高地址,所以其過程為:其過程為: 入棧操作:先(入棧操作:先(SPSP)+1+1(SPSP),),指向棧頂?shù)纳弦粋€(gè)空單元,后把直接指向棧頂?shù)纳弦粋€(gè)空單元,后把直接尋址單元的內(nèi)容壓入尋址單元的內(nèi)容壓入SPSP所指的單元中。所指的單元中。 出棧操作:先彈出棧頂內(nèi)容到直接尋址單元,后(出棧操作:先彈出棧頂內(nèi)容到直接尋址單元,后(SPSP)- 1- 1(SPSP),),形形成新的堆棧指針。成新的堆棧指針。例例 PUSH ACC ;PUSH ACC ;保護(hù)累加器保護(hù)累加器ACCACC
52、中內(nèi)容中內(nèi)容 PUSH PSW PUSH PSW ; ;保護(hù)標(biāo)志寄存器內(nèi)容保護(hù)標(biāo)志寄存器內(nèi)容 ; ; 執(zhí)行服務(wù)程序執(zhí)行服務(wù)程序 POP PSW POP PSW ; ;恢復(fù)標(biāo)志寄存器內(nèi)容恢復(fù)標(biāo)志寄存器內(nèi)容 POP ACC ;POP ACC ;恢復(fù)累加器恢復(fù)累加器ACCACC中內(nèi)容中內(nèi)容 該程序執(zhí)行后,累加器該程序執(zhí)行后,累加器ACCACC和和PSWPSW寄存器中的內(nèi)容可得到正確的恢復(fù)。寄存器中的內(nèi)容可得到正確的恢復(fù)。 若為:若為: PUSH ACCPUSH ACC PUSH PSW PUSH PSW POP ACC POP ACC POP PSW POP PSW 則執(zhí)行后,將使得則執(zhí)行后,將使得
53、ACCACC和和PSWPSW中的內(nèi)容互換。中的內(nèi)容互換。單片機(jī)應(yīng)用技術(shù)28/81在數(shù)據(jù)傳送類操作中應(yīng)注意以下幾點(diǎn):在數(shù)據(jù)傳送類操作中應(yīng)注意以下幾點(diǎn): 1 1除了用除了用POPPOP或或MOVMOV指令將數(shù)據(jù)傳送到指令將數(shù)據(jù)傳送到PSWPSW外,傳送操作一般不影響外,傳送操作一般不影響標(biāo)志位。標(biāo)志位。 2 2執(zhí)行傳送類指令時(shí),把源地址單元的內(nèi)容送到目的地址單元后,執(zhí)行傳送類指令時(shí),把源地址單元的內(nèi)容送到目的地址單元后,源地址單元中的內(nèi)容不變。源地址單元中的內(nèi)容不變。 3 3對(duì)特殊功能寄存器對(duì)特殊功能寄存器SFRSFR的操作必須使用直接尋址,也就是說,直的操作必須使用直接尋址,也就是說,直接尋址是
54、訪問接尋址是訪問SFRSFR的唯一方式。的唯一方式。 4. 4.對(duì)于對(duì)于80528052單片機(jī)內(nèi)部單片機(jī)內(nèi)部RAMRAM的的80H80HFFHFFH單元只能使用單元只能使用 RiRi間接尋址方間接尋址方式訪問式訪問 5 5將累加器將累加器ACCACC壓入堆?;驈棾龆褩r(shí),應(yīng)使用壓入堆?;驈棾龆褩r(shí),應(yīng)使用PUSH ACCPUSH ACC和和POP POP ACCACC指令,不能使用指令,不能使用PUSH APUSH A和和POP APOP A指令。否則,程序編譯會(huì)出錯(cuò)。指令。否則,程序編譯會(huì)出錯(cuò)。單片機(jī)應(yīng)用技術(shù)29/814.5 4.5 邏輯操作類指令邏輯操作類指令 邏輯操作類指令共有邏輯操作類
55、指令共有2424條,包括與、或、清除、求反、條,包括與、或、清除、求反、左右移位等邏輯操作。按操作數(shù)可劃分為單操作數(shù)和雙操左右移位等邏輯操作。按操作數(shù)可劃分為單操作數(shù)和雙操作數(shù)兩種。作數(shù)兩種。 單操作數(shù)是專門對(duì)累加器單操作數(shù)是專門對(duì)累加器A A進(jìn)行的邏輯操作,這些操進(jìn)行的邏輯操作,這些操作主要是:清作主要是:清0 0、求反、左右移位等,操作結(jié)果保存在累、求反、左右移位等,操作結(jié)果保存在累加器加器A A中。中。 雙操作數(shù)主要是累加器雙操作數(shù)主要是累加器A A和第二操作數(shù)之間執(zhí)行邏輯和第二操作數(shù)之間執(zhí)行邏輯與、或和異或操作,第二操作數(shù)可以是立即數(shù),也可以是與、或和異或操作,第二操作數(shù)可以是立即數(shù),
56、也可以是內(nèi)部數(shù)據(jù)存儲(chǔ)器的內(nèi)部數(shù)據(jù)存儲(chǔ)器的RnRn、內(nèi)部數(shù)據(jù)內(nèi)部數(shù)據(jù)RAMRAM單元或者單元或者SFRSFR。其對(duì)應(yīng)其對(duì)應(yīng)的尋址方式是:寄存器、寄存器間接、直接尋址。邏輯操的尋址方式是:寄存器、寄存器間接、直接尋址。邏輯操作的結(jié)果保存在作的結(jié)果保存在A A中。也可將直接尋址單元作為第一操作中。也可將直接尋址單元作為第一操作數(shù),和立即數(shù),累加器數(shù),和立即數(shù),累加器A A執(zhí)行邏輯與、或和異或操作,結(jié)執(zhí)行邏輯與、或和異或操作,結(jié)果存在直接尋址單元中。果存在直接尋址單元中。單片機(jī)應(yīng)用技術(shù)30/81左移左移帶進(jìn)位左移帶進(jìn)位左移單操作數(shù)單操作數(shù)CyD0D7CyD0D7CyD0D7CyD0D7D0D7D4 D
57、3低4位高4位交換RnRiaddressdata#(A A)/A/Adata#AANLANL(ORLORL,XRLXRL) A,A,ANLANL(ORLORL,XRLXRL)directdirect, ,異或異或或或(A A)AXAX(A A)AVXAVX(A A)AXAX其中,其中,X X代表第二操作數(shù)代表第二操作數(shù)directdirectYdirectdirectYdirectdirect VYdirectdirect VYdirectdirectYdirectdirectY其中,其中,Y Y代表代表A A或者或者#data#data與與雙操作數(shù)雙操作數(shù)SWAP ASWAP A4 4位環(huán)移
58、位環(huán)移RRC ARRC A帶進(jìn)位右移帶進(jìn)位右移RR ARR A右移右移RLC ARLC ARL ARL ACPL ACPL A取反取反(A A)00CLR ACLR A清零清零執(zhí)行結(jié)果執(zhí)行結(jié)果指令形式指令形式功能功能單片機(jī)應(yīng)用技術(shù)31/814.5.1 4.5.1 對(duì)累加器對(duì)累加器A A進(jìn)行的邏輯操作進(jìn)行的邏輯操作 1. 1. 累加器累加器A A清清0 0指令:指令: CLR A ;CLR A ;(A A)00功能:把功能:把0000H H送入累加器送入累加器A A中中2. 2. 累加器累加器A A求反求反指令:指令: CPL A;CPL A;(A A)()()功能:把累加器內(nèi)容求反后送入累加器
59、功能:把累加器內(nèi)容求反后送入累加器A A中。中。例例 設(shè)累加器原來內(nèi)容為設(shè)累加器原來內(nèi)容為0707H H,則執(zhí)行則執(zhí)行CLR A CLR A 后將變成后將變成0000H H,再執(zhí)行再執(zhí)行CPL ACPL A后將變?yōu)楹髮⒆優(yōu)? 0FFHFFH。單片機(jī)應(yīng)用技術(shù)32/813. 3. 累加器累加器A A左右移位左右移位 RL ARL A; ;累加器左循環(huán)移位累加器左循環(huán)移位 RLC ARLC A; ;累加器通過累加器通過C C左循環(huán)移位左循環(huán)移位 RR ARR A; ;累加器右循環(huán)移位累加器右循環(huán)移位 RRC ARRC A; ;累加器通過累加器通過C C右循環(huán)移位右循環(huán)移位 SWAP ASWAP A;
60、 ;交換累加器兩個(gè)半字節(jié)交換累加器兩個(gè)半字節(jié)(4(4位循環(huán)移位位循環(huán)移位) ) 左移一位相當(dāng)于乘左移一位相當(dāng)于乘2 2。例例 MOV A ,#01HMOV A ,#01H;01H;01H送累加器送累加器A A RL A RL A ;02H;02H送送A A RL A RL A ;04H;04H送送A A RL A RL A ;08H;08H送送A A 右移一位相當(dāng)于除右移一位相當(dāng)于除2 2,上述累加器(,上述累加器(A A)=08H=08H,執(zhí)行指令:執(zhí)行指令: RR A RR A ; ;(A A)04H04H RR A RR A ; ;(A A)02H02H RR A RR A ; ;(A
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 18181-3:2025 EN Information technology - JPEG XL image coding system - Part 3: Conformance testing
- 經(jīng)典技術(shù)協(xié)議合同書
- 認(rèn)證委托服務(wù)協(xié)議書
- 個(gè)人合伙退伙協(xié)議書
- 水電施工總承包合同
- 建筑水電勞務(wù)安裝合同
- 電商行業(yè)退換貨服務(wù)免責(zé)協(xié)議
- 借款擔(dān)保合同合同
- 動(dòng)遷房房屋買賣合同
- 房建勞務(wù)分包施工合同
- 2024年南京交通職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 中小學(xué)校食堂建設(shè)與設(shè)備配置規(guī)范
- 鄉(xiāng)村法律明白人培訓(xùn)課件
- 2024年度農(nóng)村電子商務(wù)ppt演示課件
- 中注協(xié)財(cái)務(wù)報(bào)表審計(jì)工作底稿(第二版)全文
- 企業(yè)專職消防隊(duì)建設(shè)標(biāo)準(zhǔn)
- 醫(yī)院科普直播方案
- 高原反應(yīng)的癥狀和處理方法
- 2023年6月新高考天津卷英語(yǔ)試題真題及答案解析(精校打印版)
- 中國(guó)商貿(mào)文化 貨幣簡(jiǎn)史
- 高中校本課程-網(wǎng)絡(luò)營(yíng)銷概述教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
評(píng)論
0/150
提交評(píng)論