單片機(jī)原理及應(yīng)用第3章 mcs-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例ppt課件_第1頁(yè)
單片機(jī)原理及應(yīng)用第3章 mcs-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例ppt課件_第2頁(yè)
單片機(jī)原理及應(yīng)用第3章 mcs-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例ppt課件_第3頁(yè)
單片機(jī)原理及應(yīng)用第3章 mcs-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例ppt課件_第4頁(yè)
單片機(jī)原理及應(yīng)用第3章 mcs-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩135頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例第第3 3章章 MCS-51MCS-51單片機(jī)指令系統(tǒng)單片機(jī)指令系統(tǒng) 和匯編語(yǔ)言程序示例和匯編語(yǔ)言程序示例3.1 MCS-51單片機(jī)指令系統(tǒng)概述單片機(jī)指令系統(tǒng)概述3.2 尋址方式尋址方式3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令3.4 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令3.5 邏輯運(yùn)算及移位指令邏輯運(yùn)算及移位指令3.6 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令3.7 子程序調(diào)用與返回指令子程序調(diào)用與返回指令3.8 位操作類指令位操作類指令3.9 匯編程序格式與偽指令匯編程序格式與偽指令3.10 匯編程序設(shè)計(jì)示例匯編程序設(shè)計(jì)示例第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編

2、語(yǔ)言程序示例3.1 MCS-51單片機(jī)指令系統(tǒng)概述單片機(jī)指令系統(tǒng)概述3.1.1 指令、指令系統(tǒng)的概念指令、指令系統(tǒng)的概念 指令:能完成特定功能的命令。指令:能完成特定功能的命令。 指令描述的兩種基本形式:機(jī)器語(yǔ)言和匯編語(yǔ)言指令描述的兩種基本形式:機(jī)器語(yǔ)言和匯編語(yǔ)言 指令系統(tǒng):計(jì)算機(jī)能夠執(zhí)行的全部操作所對(duì)應(yīng)的指指令系統(tǒng):計(jì)算機(jī)能夠執(zhí)行的全部操作所對(duì)應(yīng)的指令集合。令集合。 編寫程序?qū)嶋H上是從指令系統(tǒng)中挑選一個(gè)指令子集編寫程序?qū)嶋H上是從指令系統(tǒng)中挑選一個(gè)指令子集的過(guò)程。的過(guò)程。 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 指令的屬性 指令一般有功能、時(shí)間和空間三種屬性。 功能屬性是指每條指

3、令都對(duì)應(yīng)一個(gè)特定的操作功能; 時(shí)間屬性是指一條指令執(zhí)行所用的時(shí)間,一般用機(jī)器 周期來(lái)表示; 空間屬性是指一條指令在程序存儲(chǔ)器中存儲(chǔ)所占用的 字節(jié)數(shù)。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.1.2 MCS-51單片機(jī)指令系統(tǒng)及其指令格式單片機(jī)指令系統(tǒng)及其指令格式 MCS-51單片機(jī)指令系統(tǒng)具有功能強(qiáng)、指令短、執(zhí)單片機(jī)指令系統(tǒng)具有功能強(qiáng)、指令短、執(zhí)行快等特點(diǎn),共有行快等特點(diǎn),共有111條指令。從功能上可劃分成數(shù)據(jù)條指令。從功能上可劃分成數(shù)據(jù)傳送、算術(shù)操作、邏輯操作、程序轉(zhuǎn)移位操作等五大傳送、算術(shù)操作、邏輯操作、程序轉(zhuǎn)移位操作等五大類;從空間屬性上分為單字節(jié)指令類;從空間屬性上分為單

4、字節(jié)指令(49條條)、雙字節(jié)指令、雙字節(jié)指令(46條條)和最長(zhǎng)的三字節(jié)指令和最長(zhǎng)的三字節(jié)指令(只有只有16條條)。從時(shí)間屬性上。從時(shí)間屬性上可分成單機(jī)器周期指令可分成單機(jī)器周期指令(64條條)、雙機(jī)器周期指令、雙機(jī)器周期指令(45條條)和只有乘、除法兩條和只有乘、除法兩條4個(gè)機(jī)器周期的指令??梢?jiàn),個(gè)機(jī)器周期的指令??梢?jiàn),MCS-51單片機(jī)指令系統(tǒng)在存儲(chǔ)空間和執(zhí)行時(shí)間方面具單片機(jī)指令系統(tǒng)在存儲(chǔ)空間和執(zhí)行時(shí)間方面具有較高的效率。有較高的效率。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 指令系統(tǒng)中的指令描述了不同的操作,不同操作對(duì)應(yīng)不同的指令。但結(jié)構(gòu)上,每條指令通常由操作碼和操作數(shù)兩部分組

5、成。操作碼表示計(jì)算機(jī)執(zhí)行該指令將進(jìn)行何種操作,操作數(shù)表示參加操作的數(shù)的本身或操作數(shù)所在的地址。MCS-51單片機(jī)的指令有無(wú)操作數(shù)、單操作數(shù)、雙操作數(shù)三種情況。匯編語(yǔ)言指令有如下的格式: 標(biāo)號(hào): 操作碼助記符 目的操作數(shù),源操作數(shù) ;注釋第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 為便于后面的學(xué)習(xí),在這里先對(duì)描述指令的一些符號(hào)的約定意義作以說(shuō)明: (1) Ri和Rn:表示當(dāng)前工作寄存器區(qū)中的工作寄存器,i取0或1,表示R0或R1。n取07,表示R0R7。 (2) #data:表示包含在指令中的8位立即數(shù)。 (3) #data16:表示包含在指令中的16位立即數(shù)。 (4) rel:以補(bǔ)碼

6、形式表示的8位相對(duì)偏移量,范圍為-128127,主要用在相對(duì)尋址的指令中。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 (5) addr16和addr11:分別表示16位直接地址和11位直接地址。 (6) direct:表示直接尋址的地址。 (7) bit:表示可位尋址的直接位地址。 (8) (X):表示X單元中的內(nèi)容。 (9) (X):表示以X單元的內(nèi)容為地址的存儲(chǔ)器單元內(nèi)容,即(X)作地址,該地址單元的內(nèi)容用(X)表示。 (10) / 和符號(hào):“/”表示對(duì)該位操作數(shù)取反,但不影響該位的原值?!啊北硎静僮髁鞒?,將箭尾一方的內(nèi)容送入箭頭所指另一方的單元中去。 第3章 MCS-51單片機(jī)

7、指令系統(tǒng)和匯編語(yǔ)言程序示例3.2 尋尋 址址 方方 式式 尋址方式:尋址方式:CPU尋找操作數(shù)或操作數(shù)地址的方法。尋找操作數(shù)或操作數(shù)地址的方法。 尋址方式越多,計(jì)算機(jī)指令功能越強(qiáng),靈活性越大。尋址方式越多,計(jì)算機(jī)指令功能越強(qiáng),靈活性越大。MCS-51采用采用7種尋址方式:種尋址方式:第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.2.1 立即尋址立即尋址 操作數(shù)直接出現(xiàn)在指令中,緊跟在操作碼的后面,作為指令操作數(shù)直接出現(xiàn)在指令中,緊跟在操作碼的后面,作為指令的一部分與操作碼一起存放在程序存儲(chǔ)器中,可以立即得到并執(zhí)的一部分與操作碼一起存放在程序存儲(chǔ)器中,可以立即得到并執(zhí)行,不需要經(jīng)過(guò)別的

8、途徑去尋找,故稱為立即尋址。匯編指令中,行,不需要經(jīng)過(guò)別的途徑去尋找,故稱為立即尋址。匯編指令中,在一個(gè)數(shù)的前面冠以在一個(gè)數(shù)的前面冠以#符號(hào)作前綴,就表示該數(shù)為立即尋址。符號(hào)作前綴,就表示該數(shù)為立即尋址。 指令:指令:MOV A,#5AH機(jī)器碼:機(jī)器碼:74H 5AH第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.2.2 寄存器尋址寄存器尋址 在指令選定的某寄存器中存放或讀取操作數(shù),以完成指令規(guī)在指令選定的某寄存器中存放或讀取操作數(shù),以完成指令規(guī)定的操作,稱為寄存器尋址。定的操作,稱為寄存器尋址。 例如:例如:MOVA,R7指令中源操作數(shù)和目的操作數(shù)都是寄存指令中源操作數(shù)和目的操作數(shù)都

9、是寄存器尋址。該指令的功能是把工作寄存器器尋址。該指令的功能是把工作寄存器R7中的內(nèi)容傳送到累加器中的內(nèi)容傳送到累加器A中,如中,如R7中的內(nèi)容為中的內(nèi)容為30H,則執(zhí)行該指令后,則執(zhí)行該指令后A的內(nèi)容也為的內(nèi)容也為30H。 指令:指令:MOV A,R7機(jī)器碼:機(jī)器碼:EFH第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.2.3 寄存器間接尋址寄存器間接尋址 由指令指出某一寄存器的內(nèi)容作為操作數(shù)地址的尋址方法,由指令指出某一寄存器的內(nèi)容作為操作數(shù)地址的尋址方法,稱為寄存器間接尋址。這里需要強(qiáng)調(diào)的是:寄存器中的內(nèi)容不是稱為寄存器間接尋址。這里需要強(qiáng)調(diào)的是:寄存器中的內(nèi)容不是操作數(shù)本身,而

10、是操作數(shù)的地址,到該地址單元中才能得到操作操作數(shù)本身,而是操作數(shù)的地址,到該地址單元中才能得到操作數(shù)。寄存器起地址指針的作用。數(shù)。寄存器起地址指針的作用。指令:指令:MOV A,R1機(jī)器碼:機(jī)器碼:E7H第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.2.4 直接尋址直接尋址 指令中直接給出操作數(shù)所在的存儲(chǔ)器地址,以供取數(shù)或存指令中直接給出操作數(shù)所在的存儲(chǔ)器地址,以供取數(shù)或存數(shù)的尋址方式稱為直接尋址。數(shù)的尋址方式稱為直接尋址。 指令:指令:MOV A,3FH機(jī)器碼:機(jī)器碼:E5H 3FH第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 MCS-51系列單片機(jī)的直接尋址可用于訪問(wèn)片內(nèi)

11、、外數(shù)據(jù)存儲(chǔ)器,也可用于訪問(wèn)程序存儲(chǔ)器。直接尋址可訪問(wèn)片內(nèi)RAM的低128個(gè)單元(00H7FH),同時(shí)也是用于訪問(wèn)高128個(gè)單元的特殊功能寄存器SFR的唯一方法。 由于52子系列的片內(nèi)RAM有256個(gè)單元,其高128個(gè)單元與SFR的地址是重疊的。為了避免混亂,單片機(jī)規(guī)定:直接尋址的指令不能訪問(wèn)片內(nèi)RAM的高128個(gè)單元(80HFFH),若要訪問(wèn)這些單元只能用寄存器間接尋址指令,而要訪問(wèn)SFR只能用直接尋址指令。訪問(wèn)SFR可在指令中直接使用該寄存器的名字來(lái)代替地址,如MOV A,80H,可以寫成MOV A,P0,因?yàn)镻0口的地址為80H。 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.

12、2.5 變址尋址變址尋址圖3.2 變址尋址示意圖 基址寄存器加變址寄存器間接尋址,簡(jiǎn)稱變址尋址。指令:指令:MOV A,A+DPTR機(jī)器碼:機(jī)器碼:93H第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.2.6 相對(duì)尋址相對(duì)尋址訪問(wèn)程序存儲(chǔ)器,出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。訪問(wèn)程序存儲(chǔ)器,出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。相對(duì)尋址是將程序計(jì)數(shù)器相對(duì)尋址是將程序計(jì)數(shù)器 PC中的當(dāng)前值與指令第二字中的當(dāng)前值與指令第二字節(jié)所給出的偏移量相加,其和為跳轉(zhuǎn)指令的轉(zhuǎn)移地址。節(jié)所給出的偏移量相加,其和為跳轉(zhuǎn)指令的轉(zhuǎn)移地址。偏移量范圍為偏移量范圍為-128 一一+127。例如例如 SJMP 20H ;機(jī)器碼為;機(jī)器碼為80

13、H 20H。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例在使用相對(duì)尋址時(shí)要注意以下兩點(diǎn): (1) 當(dāng)前PC值是指相對(duì)轉(zhuǎn)移指令的存儲(chǔ)地址加上該指令的字節(jié)數(shù)。例如:JZ rel 是一條累加器A為零就轉(zhuǎn)移的雙字節(jié)指令。若該指令的存儲(chǔ)地址為2050H,則執(zhí)行該指令時(shí)的當(dāng)前PC值即為2052H。即當(dāng)前PC值是對(duì)相對(duì)轉(zhuǎn)移指令取指結(jié)束時(shí)的值。 (2) 偏移量rel是有符號(hào)的單字節(jié)數(shù)。以補(bǔ)碼表示,其值的范圍是-128+127(00HFFH),負(fù)數(shù)表示從當(dāng)前地址向前轉(zhuǎn)移,正數(shù)表示從當(dāng)前地址向后轉(zhuǎn)移。所以,相對(duì)轉(zhuǎn)移指令滿足條件后,轉(zhuǎn)移的地址(目的地址)為: 目的地址=當(dāng)前PC值+rel = 指令存儲(chǔ)地址+

14、指令字節(jié)數(shù)+rel第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.2.7 位尋址位尋址 位尋址是在位操作指令中直接給出位操作數(shù)的地位尋址是在位操作指令中直接給出位操作數(shù)的地址,可以對(duì)片內(nèi)址,可以對(duì)片內(nèi)RAM中的中的128位和特殊功能寄存器位和特殊功能寄存器SFR中的中的93位進(jìn)行尋址。位進(jìn)行尋址。 例如指令例如指令MOV C,24H.0;機(jī)器碼為機(jī)器碼為A2H 20H,相,相當(dāng)于當(dāng)于MOV C,20H。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.3 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.3.1 訪問(wèn)片內(nèi)數(shù)據(jù)存儲(chǔ)器的一般數(shù)據(jù)傳送指

15、令訪問(wèn)片內(nèi)數(shù)據(jù)存儲(chǔ)器的一般數(shù)據(jù)傳送指令 該類指令的功能是實(shí)現(xiàn)數(shù)在片內(nèi)該類指令的功能是實(shí)現(xiàn)數(shù)在片內(nèi)RAM單元之間、寄存器之單元之間、寄存器之間、寄存器與間、寄存器與RAM單元之間的傳送。所有指令具有統(tǒng)一的格式,單元之間的傳送。所有指令具有統(tǒng)一的格式,其格式如下:其格式如下: MOV ,;目的操作數(shù)單元;目的操作數(shù)單元源操源操作數(shù)作數(shù)(或單元或單元) 操作碼助記符都是操作碼助記符都是MOV,目的操作數(shù)和源操作數(shù)不同尋,目的操作數(shù)和源操作數(shù)不同尋址方式的組合就派生出該類的全部指令。因此,記憶這類指令的址方式的組合就派生出該類的全部指令。因此,記憶這類指令的關(guān)鍵在于掌握兩個(gè)操作數(shù)的各種尋址方式的組合關(guān)

16、系。關(guān)鍵在于掌握兩個(gè)操作數(shù)的各種尋址方式的組合關(guān)系。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例圖3.3 訪問(wèn)片內(nèi)RAM的一般傳送指令操作關(guān)系圖 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例表表3.1 訪問(wèn)片內(nèi)訪問(wèn)片內(nèi)RAM的一般傳送指令表的一般傳送指令表第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例1 設(shè)內(nèi)部RAM(30H)=40H,(40H)=10H,(10H)=00H(P1)=CAH,分析以下程序執(zhí)行后各單元及寄存器、P2口的內(nèi)容。MOV R0,#30H;(R0)30HMOV A,R0;(A)(R0)MOV R

17、1,A;(R1)(A)MOV B,R1;(B)(R1)MOV R1,P1;(R1)(P1)MOV P2,P1;(P2)(P1)MOV 10H,#20H;(10H)20H 執(zhí)行上述指令后的結(jié)果為:(R0)=30H,(R1)=(A)=40H,(B)=10H,(40H)=(P1)=(P2)=CAH,(10H)=20H。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.3.2 片內(nèi)特殊傳送指令片內(nèi)特殊傳送指令 1堆棧操作指令堆棧操作指令 堆棧操作有進(jìn)棧和出棧,即壓入和彈出數(shù)據(jù),常用堆棧操作有進(jìn)棧和出棧,即壓入和彈出數(shù)據(jù),常用于保存或恢復(fù)現(xiàn)場(chǎng)。進(jìn)棧指令用于保存片內(nèi)于保存或恢復(fù)現(xiàn)場(chǎng)。進(jìn)棧指令用于保存

18、片內(nèi)RAM單元單元(低低128字節(jié)字節(jié))或特殊功能寄存器或特殊功能寄存器SFR的內(nèi)容;出棧指令用的內(nèi)容;出棧指令用于恢復(fù)片內(nèi)于恢復(fù)片內(nèi)RAM單元單元(低低128字節(jié)字節(jié))或特殊功能寄存器或特殊功能寄存器SFR的內(nèi)容。的內(nèi)容。 該類指令共有如下兩條指令:該類指令共有如下兩條指令:第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例(SP)(SP)-1 修改指針,指向新棧頂 (direct)(SP)+ 1) 把棧頂?shù)臄?shù)據(jù)彈出到直接尋址單元中去 PUSH direct ; POP direct ; (SP)direct 把直接地址單元的內(nèi)容壓入SP所指單元內(nèi) (SP)(SP)+ 1 修改指針,使其指

19、向棧頂上的一個(gè)存數(shù)單元 這兩條指令都是雙字節(jié)指令,機(jī)器碼分別為:C0 direct 和D0 direct。 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例2 若在外部程序存儲(chǔ)器中2000H單元開始依次存放09的平方值,數(shù)據(jù)指針(DPTR)=3A00H,用查表指令取得2019H單元的數(shù)據(jù)后,要求保持DPTR中的內(nèi)容不變。完成上述功能的程序如下:MOV A,#03H;(A)03HPUSH DPH;保護(hù)DPTR高8位入棧PUSH DPL;保護(hù)DPTR低8位入棧MOV DPTR,#2000H;(DPTR)2000HMOVC A,A+DPTR;(A)(2000H+03H)POP DPL ;彈出

20、DPTR低位POP DPH ;彈出DPTR高位執(zhí)行結(jié)果:(A)09H,(DPTR)=3A00H。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 2數(shù)據(jù)交換指令數(shù)據(jù)交換指令 數(shù)據(jù)傳送指令一般都是將操作數(shù)自源地址單元傳送到目數(shù)據(jù)傳送指令一般都是將操作數(shù)自源地址單元傳送到目的地址單元,指令執(zhí)行后,源地址單元的操作數(shù)不變,目的的地址單元,指令執(zhí)行后,源地址單元的操作數(shù)不變,目的地址單元的操作數(shù)則修改為源地址單元的操作數(shù)。交換指令地址單元的操作數(shù)則修改為源地址單元的操作數(shù)。交換指令數(shù)據(jù)作雙向傳送,涉及傳送的雙方互為源地址、目的地址,數(shù)據(jù)作雙向傳送,涉及傳送的雙方互為源地址、目的地址,指令執(zhí)行后每方

21、的操作數(shù)都修改為另一方的操作數(shù)。因此,指令執(zhí)行后每方的操作數(shù)都修改為另一方的操作數(shù)。因此,兩操作數(shù)均未沖掉、喪失。數(shù)據(jù)交換指令共有如下兩操作數(shù)均未沖掉、喪失。數(shù)據(jù)交換指令共有如下5條指令:條指令:第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例例例3 設(shè)設(shè)(R0) = 30H,30H = 4AH,(A) = 28H,那么,那么執(zhí)行執(zhí)行XCH A, R0后,結(jié)果為后,結(jié)果為(A) = 4AH,(30H) = 28H。執(zhí)行執(zhí)行XCHD A,R0后,結(jié)果為后,結(jié)果為(A) = 2AH,(30H) = 48H。執(zhí)行執(zhí)行SWAP A后,結(jié)果為后,結(jié)

22、果為(A) = 82H。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.3.3 片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送指令片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送指令 MCS-51單片機(jī)單片機(jī)CPU對(duì)片外擴(kuò)展的數(shù)據(jù)存儲(chǔ)器對(duì)片外擴(kuò)展的數(shù)據(jù)存儲(chǔ)器RAM或或I/O口進(jìn)口進(jìn)行數(shù)據(jù)傳送,必須采用寄存器間接尋址的方法,通過(guò)累加器行數(shù)據(jù)傳送,必須采用寄存器間接尋址的方法,通過(guò)累加器A來(lái)來(lái)完成。這類指令共有以下條單字節(jié)指令,指令操作碼助記符都完成。這類指令共有以下條單字節(jié)指令,指令操作碼助記符都為為MOVX。指令助記符指令助記符 操作功能注釋操作功能注釋 機(jī)器碼機(jī)器碼(H)MOVX A,DPTR ; (A)(DPTR) E6MOVX

23、A,Ri ; (A)(Ri) E2、E3MOVX DPTR ,A ; (DPTR)(A) F0MOVX Ri,A ; (Ri)(A) F2、F3第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例例例4 設(shè)外部設(shè)外部RAM(0203H)= FFH,分析以下指令執(zhí)行后的結(jié)果。,分析以下指令執(zhí)行后的結(jié)果。MOV DPTR,#0203H ;(DPTR)0203HMOVX A,DPTR ;(A)(DPTR)MOV 30H,A ;(30H)(A)MOV A,#0FH ;(A)0FHMOVX DPTR,A ;(DPTR)(A)執(zhí)行結(jié)果為:執(zhí)行結(jié)果為:(DPTR)=0203H,(30H)=FFH,(0203

24、H)=(A)=0FH。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.3.4 訪問(wèn)程序存儲(chǔ)器的數(shù)據(jù)傳送指令訪問(wèn)程序存儲(chǔ)器的數(shù)據(jù)傳送指令 訪問(wèn)程序存儲(chǔ)器的數(shù)據(jù)傳送指令又稱作查表指令,采用基址訪問(wèn)程序存儲(chǔ)器的數(shù)據(jù)傳送指令又稱作查表指令,采用基址寄存器加變址寄存器間接尋址方式,把程序存儲(chǔ)器中存放的表寄存器加變址寄存器間接尋址方式,把程序存儲(chǔ)器中存放的表格數(shù)據(jù)讀出,傳送到累加器格數(shù)據(jù)讀出,傳送到累加器A。共有如下兩條單字節(jié)指令,指令。共有如下兩條單字節(jié)指令,指令操作碼助記符為操作碼助記符為MOVC。指令助記符指令助記符 操作功能注釋操作功能注釋 機(jī)器碼機(jī)器碼(H)MOVC A, A+DPTR

25、;(A)(A)+(DPTR) 93MOVC A, A+PC ;(PC)(PC)+1,(A)(A)+(PC) 83第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 前一條指令采用DPTR作基址寄存器,16位地址送到DPTR,實(shí)現(xiàn)在整個(gè)64 KB程序存儲(chǔ)器單元到累加器A的數(shù)據(jù)傳送。 后一條指令以PC作為基址寄存器,CPU取完該指令操作碼時(shí)PC會(huì)自動(dòng)加1,指向下一條指令的第一個(gè)字節(jié)地址,即此時(shí)是用(PC)+1作為基址的。累加器A中的內(nèi)容為8位無(wú)符號(hào)數(shù),本指令查表范圍只能在256個(gè)字節(jié)范圍內(nèi)(即(PC)+1H(PC)+100H),使表格地址空間分配受到限制。同時(shí)編程時(shí)還需要進(jìn)行偏移量的計(jì)算,即MO

26、VC A,A+PC指令所在地址與表格存放首地址間的距離字節(jié)數(shù)的計(jì)算,并需要一條加法指令進(jìn)行地址調(diào)整。偏移量計(jì)算公式為:偏移量 = 表首地址-(MOVC指令所在地址+1)第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例5 從片外程序存儲(chǔ)器2000H單元開始存放09的平方值,以PC作為基址寄存器進(jìn)行查表得9的平方值。 設(shè)MOVC指令所在地址(PC)=1FF0H,則偏移量=2000H-(1FF0H+1)=0FH。 相應(yīng)的程序如下:MOV A,#09H ;(A)09HADD A,#0FH ;用加法指令進(jìn)行地址調(diào)整MOVC A,A+PC ;(A)(A)+(PC)+1)執(zhí)行結(jié)果為:(PC)=1FF

27、1H,(A)=51H。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例如果用以DPTR為基址寄存器的查表指令,其程序如下:MOV DPTR, 2000H;置表首地址MOV A, 09HMOVC A, A+DPTR第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例練習(xí)題 試分析以下程序的執(zhí)行結(jié)果。(DPL)=_,(B)=_。 MOV SP,#3AH MOV DPL,#20H MOV B,#30H PUSH DPL PUSH B POP DPL POP B第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.4 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令3.4.1 加、減法指令加、減法指令圖3.4 加減

28、法指令形式結(jié)構(gòu)圖(a) 加減法指令關(guān)系圖;(b) 加1、減1指令關(guān)系圖 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 算術(shù)運(yùn)算結(jié)果將影響CY、半進(jìn)位標(biāo)志AC、溢出標(biāo)志OV。加減法運(yùn)算結(jié)果將影響CY、AC、OV,乘除運(yùn)算只影響CY,OV。只有加1和減1指令不影響這三種標(biāo)志。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例表表3.2 加減法指令表加減法指令表第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例例6 設(shè)設(shè)(A) = 49H,(R0)=6BH,分析執(zhí)行指令,分析執(zhí)行指令A(yù)DD A,R0后的結(jié)果。后的結(jié)果。 結(jié)果為:結(jié)果為:(A)=B4H,OV=1,CY=0,AC=1,P

29、=0。 例例7 設(shè)設(shè)(A)=C3H,數(shù)據(jù)指針低位,數(shù)據(jù)指針低位(DPL)=ABH,CY=1,分析,分析執(zhí)行指令執(zhí)行指令A(yù)DDC A,DPL后的結(jié)果。后的結(jié)果。 結(jié)果為:結(jié)果為:(A)=6FH,CY=1,AC=0,P=0。 例例8 設(shè)設(shè) (A) = 52H,(R0)=B4H,分析執(zhí)行如下指令后的結(jié)果,分析執(zhí)行如下指令后的結(jié)果 CLR C ;是位操作指令,是進(jìn)位位清零;是位操作指令,是進(jìn)位位清零 SUBB A,R0 結(jié)果為:結(jié)果為:(A)=9EH,CY=1,AC=1,OV=1,P=1。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例例9 設(shè)設(shè) (R0) = 7EH,(7EH)=FFH,(7

30、FH)=38H,(DPTR)=10FEH,分析逐條執(zhí)行下列指令后各單元的內(nèi)容。,分析逐條執(zhí)行下列指令后各單元的內(nèi)容。INC R0 ;使;使7EH單元內(nèi)容由單元內(nèi)容由FFH變?yōu)樽優(yōu)?0HINC R0 ;使;使R0的內(nèi)容由的內(nèi)容由7EH變?yōu)樽優(yōu)?FHINC R0 ;使;使7FH單元內(nèi)容由單元內(nèi)容由38H變?yōu)樽優(yōu)?9HINC DPTR ;使;使DPL為為FFH,DPH不變不變INC DPTR ;使;使DPL為為00H,DPH為為11HINC DPTR ;使;使DPL為為01H,DPH不變不變第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.4.2 十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令假 設(shè) ( A )

31、 3 0 9 或 ( A C ) = 1 , 那 么(A)30(A)30+06H假 設(shè) ( A ) 7 4 9 或 ( C Y ) = 1 , 那 么(A)74(A)74+06HDA A ; 若AC=1,CY=1同時(shí)發(fā)生,或者高4位雖等于9但低4位修正后有進(jìn)位,則A應(yīng)加66H修正。 十進(jìn)制調(diào)整指令是一條對(duì)二-十進(jìn)制的加法進(jìn)行調(diào)整的指令。它是一條單字節(jié)指令,機(jī)器碼為D4H。兩個(gè)壓縮BCD碼按二進(jìn)制相加,必須在加法指令A(yù)DD、ADDC后,經(jīng)過(guò)本指令調(diào)整后才能得到正確的壓縮BCD碼和數(shù),實(shí)現(xiàn)十進(jìn)制的加法運(yùn)算。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例例10 對(duì)對(duì)BCD碼加法碼加法65

32、+ 58DBH,進(jìn)行十進(jìn)制調(diào)整。,進(jìn)行十進(jìn)制調(diào)整。 參考程序如下:參考程序如下:MOV A,#65H ;(A)65ADD A,#58H ;(A)(A)+58DA A ;十進(jìn)制調(diào)整;十進(jìn)制調(diào)整第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 使用時(shí)應(yīng)注意:DA指令不能對(duì)減法進(jìn)行十進(jìn)制調(diào)整。做減法運(yùn)算時(shí),可采用十進(jìn)制補(bǔ)碼相加,然后用 DA A指令進(jìn)行調(diào)整。例如 70 - 20 = 70 + 20補(bǔ) = 70 +(100 - 20)= 70 + 80 = 1 50 機(jī)內(nèi)十進(jìn)制補(bǔ)碼可采用:x補(bǔ) = 9AH - x 。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例例11 設(shè)片內(nèi)設(shè)片內(nèi)RAM

33、 30H,31H單元中分別存放著兩位單元中分別存放著兩位BCD碼表示的被減數(shù)和減數(shù),兩數(shù)相減的差仍以碼表示的被減數(shù)和減數(shù),兩數(shù)相減的差仍以BCD碼的形式存放碼的形式存放在在32H單元中??捎孟旅娴某绦?qū)崿F(xiàn):?jiǎn)卧小?捎孟旅娴某绦驅(qū)崿F(xiàn):CLR CMOV A,#9AHSUBB A,31H ;求減數(shù)的十進(jìn)制補(bǔ)碼;求減數(shù)的十進(jìn)制補(bǔ)碼ADD A,30H ;作十進(jìn)制補(bǔ)碼加法;作十進(jìn)制補(bǔ)碼加法DA A ;進(jìn)行;進(jìn)行BCD調(diào)整調(diào)整MOV 32H,A ;將;將BCD碼的差送存碼的差送存32H單元單元第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.4.3 乘、除法指令乘、除法指令MUL AB;(B)(A)

34、(B)158(A)(A)(B)70CY0機(jī)器碼:A4H 乘法指令的功能是把累加器A和寄存器B中的兩個(gè)8位無(wú)符號(hào)數(shù)相乘,將乘積16位數(shù)中的低8位存放在A中,高8位存放在B中。若乘積大于FFH(255),則溢出標(biāo)志OV置1,否則OV清零。乘法指令執(zhí)行后進(jìn)位標(biāo)志CY總是零,即CY=0。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例2除法指令除法指令DIV AB;(A)(A)(B)之商,(B)(A)(B)之余數(shù)(CY)0,(OV)0機(jī)器碼:84H 除法指令的功能是把累加器A中的8位無(wú)符號(hào)整數(shù)除以寄存器B中的8位無(wú)符號(hào)整數(shù),所得商存于累加器A中,余數(shù)存于寄存器B中,進(jìn)位標(biāo)志位CY和溢出標(biāo)志位OV均

35、被清零。若B中的內(nèi)容為0時(shí),溢出標(biāo)志OV被置1,即OV=1,而CY仍為0。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.5 邏輯運(yùn)算及移位指令邏輯運(yùn)算及移位指令圖3.5 邏輯指令形式結(jié)構(gòu)圖 與加、減法指令尋址方式相同的邏輯指令;(b) 與加、減法指令尋址方式不同的邏輯指令第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例表表3.3 邏輯操作指令表邏輯操作指令表第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例表表3.3 邏輯操作指令表邏輯操作指令表第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例例12 (P1)=C5H=11000101B,屏蔽,屏蔽P1口高口高4位而保留

36、低位而保留低4位。位。 執(zhí)行指令:執(zhí)行指令:ANL P1,#0FH 結(jié)果為:結(jié)果為:(P1)=05H=00000101B。 邏輯邏輯“或指令常用來(lái)使字節(jié)中某些位置或指令常用來(lái)使字節(jié)中某些位置“1”,其它位保,其它位保持不變。則欲置位的位用持不變。則欲置位的位用1與該位相或,保留不變的位用與該位相或,保留不變的位用0 與該位相或。與該位相或。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例例13 假設(shè)假設(shè)(A)=C0H,(R0)=3FH,(3FH)=0FH, 執(zhí)行指令:執(zhí)行指令:ORL A,R0 結(jié)果為:結(jié)果為:(A)=CFH=11001111B。 邏輯邏輯異或異或指令常用來(lái)使字節(jié)中某些

37、位進(jìn)行取反操作,其指令常用來(lái)使字節(jié)中某些位進(jìn)行取反操作,其它位保持不變。欲某位取反該位與它位保持不變。欲某位取反該位與1相異或;欲某位保留則相異或;欲某位保留則該位與該位與0 相異或。還可利用異或指令對(duì)某單元自身異或,以相異或。還可利用異或指令對(duì)某單元自身異或,以實(shí)現(xiàn)清零操作。實(shí)現(xiàn)清零操作。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例例14 假設(shè)假設(shè)(A)=B5H=10110101B,執(zhí)行下列操作:,執(zhí)行下列操作: XRL A,#0F0H ; A的高的高4位取反,低位取反,低4位保留,位保留, (A)=01000101B=45H MOV 30H,A ;(30H)=45H XRL A

38、,30H ;自身異或使;自身異或使A清零清零 用移位指令還可以實(shí)現(xiàn)算術(shù)運(yùn)算,左移一位相當(dāng)于原內(nèi)容用移位指令還可以實(shí)現(xiàn)算術(shù)運(yùn)算,左移一位相當(dāng)于原內(nèi)容乘以乘以2,右移一位相當(dāng)于原內(nèi)容除以,右移一位相當(dāng)于原內(nèi)容除以2,但這種運(yùn)算關(guān)系只對(duì)某,但這種運(yùn)算關(guān)系只對(duì)某些數(shù)成立些數(shù)成立(請(qǐng)讀者自行思考請(qǐng)讀者自行思考)。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例例例15 設(shè)設(shè)(A)=5AH=90,且,且CY=0,那么,那么執(zhí)行指令執(zhí)行指令RL A后,后,(A)=B4H=180。執(zhí)行指令執(zhí)行指令 RR A后,后,(A)=2DH=45。執(zhí)行指令執(zhí)行指令 RLC A后,后,(A)=B4H=180。執(zhí)行指令執(zhí)

39、行指令 RRC A后,后,(A)=2DH=45。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例練習(xí)題 數(shù)據(jù)拆分與拼裝 要求:從(30H)=x7x6x5x4x3x2x1x0中取出高5位,從(31H)=y7y6y5y4y3y2y1y0中取出低3位,拼裝后存入40H中,(40H)=y2y1y0 x7x6x5x4x3。編寫程序?qū)崿F(xiàn)。 ORG 0000H MOV A,30H SWAP A ;(X3X2X1X0 X7X6X5X4) RL A ;X2X1X0X7X6X5X4X3 MOV 40H,A第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 ANL 40H,#00011111B MOV A,3

40、1H MOV B,#20H MUL A,B ANL A,11100000B ORL 40H,A END第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.6 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令3.6.1 無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令表3.4 無(wú)條件轉(zhuǎn)移指令第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 1LJMP(長(zhǎng)轉(zhuǎn)指令長(zhǎng)轉(zhuǎn)指令) LJMP指令執(zhí)行后,程序無(wú)條件地轉(zhuǎn)向指令執(zhí)行后,程序無(wú)條件地轉(zhuǎn)向16位目標(biāo)地址位目標(biāo)地址(addr16)處執(zhí)行,不影響標(biāo)志位。由于指令中提供處執(zhí)行,不影響標(biāo)志位。由于指令中提供16位目標(biāo)地位目標(biāo)地址,所以執(zhí)行這條指令可以使程序從當(dāng)前地址轉(zhuǎn)移到址,所以執(zhí)行這條指

41、令可以使程序從當(dāng)前地址轉(zhuǎn)移到64 KB程程序存儲(chǔ)器地址空間的任意地址,故得名為序存儲(chǔ)器地址空間的任意地址,故得名為長(zhǎng)轉(zhuǎn)移長(zhǎng)轉(zhuǎn)移。該指令的。該指令的缺點(diǎn)是執(zhí)行時(shí)間長(zhǎng),字節(jié)多。缺點(diǎn)是執(zhí)行時(shí)間長(zhǎng),字節(jié)多。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例例:LJMP 0000H (對(duì)應(yīng)機(jī)器碼:020000) 在程序“跑飛時(shí),利用 “軟件陷阱方法使程序 重頭執(zhí)行。 020000 020000 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 2AJMP(絕對(duì)轉(zhuǎn)移指令絕對(duì)轉(zhuǎn)移指令) AJMP的機(jī)器碼是由的機(jī)器碼是由11位直接地址位直接地址addr11和指令操作碼和指令操作碼00001,按下列分布組

42、成的:,按下列分布組成的: a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 該指令執(zhí)行后,程序轉(zhuǎn)移的目的地址是由AJMP指令所在位置的地址PC值加上該指令字節(jié)數(shù)2,構(gòu)成當(dāng)前PC值。取當(dāng)前PC值的高5位與指令中提供的11位直接地址形成轉(zhuǎn)移的目的地址,即 PC15 PC14 PC13 PC12 PC11a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0轉(zhuǎn)移目的地址(PC) 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 由于11位地址的范圍是0000000000011111111111,即2 KB范圍,而目的地址的高5位是由PC當(dāng)前值,

43、所以程序可轉(zhuǎn)移的位置只能是和PC當(dāng)前值在同一2 KB范圍內(nèi)。本指令轉(zhuǎn)移可以向前也可以向后,指令執(zhí)行后不影響狀態(tài)標(biāo)志位。 例如:若AJMP指令地址(PC)=2300H。執(zhí)行指令A(yù)JMP 0FFH后,結(jié)果為:轉(zhuǎn)移目的地址(PC)=20FFH,程序向前轉(zhuǎn)到20FFH單元開始執(zhí)行。 又如:若AJMP指令地址(PC)=2FFFH。執(zhí)行指令A(yù)JMP 0FFH后,結(jié)果為:轉(zhuǎn)移目的地址(PC)=30FFH,程序向后轉(zhuǎn)到30FFH單元開始執(zhí)行。 由上可見(jiàn):若addr11相同,則AJMP指令的機(jī)器碼相同,但轉(zhuǎn)移的目的地址卻可能不同,這是因?yàn)檗D(zhuǎn)移的目的地址是由PC當(dāng)前值的高5位與addr11共同決定的。第3章 MC

44、S-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 判斷AJMP目標(biāo)的合法性 0000H AJMP 0111H 07FEH AJMP 0C10H 0100H AJMP 0B11H第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 3SJMP(相對(duì)短轉(zhuǎn)指令相對(duì)短轉(zhuǎn)指令) 指令的操作數(shù)指令的操作數(shù)rel用用8位帶符號(hào)數(shù)補(bǔ)碼表示,占指令的一個(gè)字位帶符號(hào)數(shù)補(bǔ)碼表示,占指令的一個(gè)字節(jié)。因?yàn)楣?jié)。因?yàn)?位補(bǔ)碼的取值范圍為位補(bǔ)碼的取值范圍為-128+127,所以該指令的轉(zhuǎn)移,所以該指令的轉(zhuǎn)移范圍是:相對(duì)范圍是:相對(duì)PC當(dāng)前值向前轉(zhuǎn)當(dāng)前值向前轉(zhuǎn)128字節(jié),向后轉(zhuǎn)字節(jié),向后轉(zhuǎn)127字節(jié)。即字節(jié)。即轉(zhuǎn)移目的地址轉(zhuǎn)移目的地址

45、= SJMP指令所在地址指令所在地址+2+rel 如在如在2100H單元有單元有SJMP指令,若指令,若rel = 5AH(正數(shù)正數(shù)),則轉(zhuǎn)移,則轉(zhuǎn)移目的地址為目的地址為215CH(向后轉(zhuǎn)向后轉(zhuǎn));若;若rel = F0H(負(fù)數(shù)負(fù)數(shù)),則轉(zhuǎn)移目的地,則轉(zhuǎn)移目的地址為址為20F2H(向前轉(zhuǎn)向前轉(zhuǎn))。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 用匯編語(yǔ)言編程時(shí),指令中的相對(duì)地址rel往往用欲轉(zhuǎn)移至的地址的標(biāo)號(hào)(符號(hào)地址)表示。機(jī)器匯編時(shí),能自動(dòng)算出相對(duì)地址值;但手工匯編時(shí),需自己計(jì)算相對(duì)地址值rel。rel的計(jì)算公式如下: 向前轉(zhuǎn)移:rel = FEH - (SJMP指令地址與目的地址差

46、的絕對(duì)值) 向后轉(zhuǎn)移:rel = FEH - (SJMP指令地址與目的地址差的絕對(duì)值) -2 若rel = FEH,即目的地址就是SJMP指令的地址,在匯編指令中的偏移地址可用 $ 符號(hào)表示。若在程序的末尾加上SJMP $(機(jī)器碼為80 FEH),則程序就不會(huì)再向后執(zhí)行,造成單指令的無(wú)限循環(huán),進(jìn)入等待狀態(tài)。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 4JMP A+DPTR(相對(duì)長(zhǎng)轉(zhuǎn)移指令相對(duì)長(zhǎng)轉(zhuǎn)移指令) 它是以數(shù)據(jù)指針?biāo)且詳?shù)據(jù)指針DPTR的內(nèi)容為基址,以累加器的內(nèi)容為基址,以累加器A的內(nèi)容的內(nèi)容為相對(duì)偏移量,在為相對(duì)偏移量,在64 KB范圍內(nèi)無(wú)條件轉(zhuǎn)移。該指令的特點(diǎn)是范圍內(nèi)無(wú)條件轉(zhuǎn)

47、移。該指令的特點(diǎn)是轉(zhuǎn)移地址可以在程序運(yùn)行中加以改變。例如,當(dāng)轉(zhuǎn)移地址可以在程序運(yùn)行中加以改變。例如,當(dāng)DPTR為確定為確定值,根據(jù)值,根據(jù)A的不同值就可以實(shí)現(xiàn)多分支的轉(zhuǎn)移。該指令在執(zhí)行的不同值就可以實(shí)現(xiàn)多分支的轉(zhuǎn)移。該指令在執(zhí)行后不會(huì)改變后不會(huì)改變DPTR及及A中原來(lái)的內(nèi)容。中原來(lái)的內(nèi)容。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例例例16 根據(jù)累加器根據(jù)累加器A的值,轉(zhuǎn)不同處理程序的入口。的值,轉(zhuǎn)不同處理程序的入口。 MOV DPTR,#TABLE ;表首地址送;表首地址送DPTR JMP A+DPTR ;根據(jù);根據(jù)A值轉(zhuǎn)移值轉(zhuǎn)移 TABLE:AJMP TAB1 ;當(dāng);當(dāng)(A)=0時(shí)

48、轉(zhuǎn)時(shí)轉(zhuǎn)TAB1執(zhí)行執(zhí)行 AJMP TAB2 ;當(dāng);當(dāng)(A)=2時(shí)轉(zhuǎn)時(shí)轉(zhuǎn)TAB2執(zhí)行執(zhí)行 AJMP TAB3 ;當(dāng);當(dāng)(A)=4時(shí)轉(zhuǎn)時(shí)轉(zhuǎn)TAB3執(zhí)行執(zhí)行第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.6.2 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令是當(dāng)某種條件滿足時(shí),程序轉(zhuǎn)移執(zhí)行;條件條件轉(zhuǎn)移指令是當(dāng)某種條件滿足時(shí),程序轉(zhuǎn)移執(zhí)行;條件不滿足時(shí),程序仍按原來(lái)順序執(zhí)行。轉(zhuǎn)移的條件可以是上一條不滿足時(shí),程序仍按原來(lái)順序執(zhí)行。轉(zhuǎn)移的條件可以是上一條指令或更前一條指令的執(zhí)行結(jié)果指令或更前一條指令的執(zhí)行結(jié)果(常體現(xiàn)在標(biāo)志位上常體現(xiàn)在標(biāo)志位上),也可以,也可以是條件轉(zhuǎn)移指令本身包含的某種運(yùn)算結(jié)果。由于該

49、類指令采用是條件轉(zhuǎn)移指令本身包含的某種運(yùn)算結(jié)果。由于該類指令采用相對(duì)尋址,因此程序可在以當(dāng)前相對(duì)尋址,因此程序可在以當(dāng)前PC值為中心的值為中心的-128+127范圍范圍內(nèi)轉(zhuǎn)移。該類指令共有內(nèi)轉(zhuǎn)移。該類指令共有8條,可以分為累加器判零條件轉(zhuǎn)移指條,可以分為累加器判零條件轉(zhuǎn)移指令、比較條件轉(zhuǎn)移指令和減令、比較條件轉(zhuǎn)移指令和減1條件轉(zhuǎn)移指令三類。表?xiàng)l件轉(zhuǎn)移指令三類。表3.5中列出中列出了這些指令。了這些指令。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例表表3.5 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 1判零條件轉(zhuǎn)移指令判零條件轉(zhuǎn)移指令 判零條件轉(zhuǎn)移指令

50、以累加器判零條件轉(zhuǎn)移指令以累加器A的內(nèi)容是否為的內(nèi)容是否為0作為轉(zhuǎn)移的條作為轉(zhuǎn)移的條件。件。JZ指令是為指令是為0轉(zhuǎn)移,不為轉(zhuǎn)移,不為0則順序執(zhí)行;則順序執(zhí)行;JNZ指令是不為指令是不為0轉(zhuǎn)移,為轉(zhuǎn)移,為0則順序執(zhí)行。累加器則順序執(zhí)行。累加器A的內(nèi)容是否為的內(nèi)容是否為0,是由這條指,是由這條指令以前的其它指令執(zhí)行的結(jié)果決定的,執(zhí)行這條指令不作任何令以前的其它指令執(zhí)行的結(jié)果決定的,執(zhí)行這條指令不作任何運(yùn)算,也不影響標(biāo)志位。運(yùn)算,也不影響標(biāo)志位。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 2比較轉(zhuǎn)移指令比較轉(zhuǎn)移指令 比較轉(zhuǎn)移指令共有比較轉(zhuǎn)移指令共有4條。這組指令是先對(duì)兩個(gè)規(guī)定的操作數(shù)條。

51、這組指令是先對(duì)兩個(gè)規(guī)定的操作數(shù)進(jìn)行比較,根據(jù)比較的結(jié)果來(lái)決定是否轉(zhuǎn)移。若兩個(gè)操作數(shù)相等,進(jìn)行比較,根據(jù)比較的結(jié)果來(lái)決定是否轉(zhuǎn)移。若兩個(gè)操作數(shù)相等,則不轉(zhuǎn)移,程序順序執(zhí)行;若兩個(gè)操作數(shù)不等,則轉(zhuǎn)移。比較是則不轉(zhuǎn)移,程序順序執(zhí)行;若兩個(gè)操作數(shù)不等,則轉(zhuǎn)移。比較是進(jìn)行一次減法運(yùn)算,但其差值不保存,兩個(gè)數(shù)的原值不受影響,進(jìn)行一次減法運(yùn)算,但其差值不保存,兩個(gè)數(shù)的原值不受影響,而標(biāo)志位要受到影響。利用標(biāo)志位而標(biāo)志位要受到影響。利用標(biāo)志位CY作進(jìn)一步的判斷,可實(shí)現(xiàn)作進(jìn)一步的判斷,可實(shí)現(xiàn)三分支轉(zhuǎn)移。三分支轉(zhuǎn)移。 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例CJNE執(zhí)行流程執(zhí)行流程第3章 MCS-51

52、單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例例18 當(dāng)從當(dāng)從P1口輸入數(shù)據(jù)為口輸入數(shù)據(jù)為01H 時(shí),程序繼續(xù)時(shí),程序繼續(xù)執(zhí)行,否則等待,直到執(zhí)行,否則等待,直到P1口出現(xiàn)口出現(xiàn)01H。參考程。參考程序如下:序如下: MOV A,#01H ;立即數(shù);立即數(shù)01H送送A WAIT: CJNE A,P1,WAIT ; (P1)01H,則等待則等待第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 3減減1條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 DJNZ Rn ,rel; (Rn) (Rn) -1 ;假設(shè);假設(shè)Rn)=0,那么那么(PC) (PC)+2 ;假設(shè);假設(shè)Rn)0,那么,那么(PC) (PC)+2+rel DJ

53、NZ direct ,rel功能:每執(zhí)行一次本指令,先將指定的功能:每執(zhí)行一次本指令,先將指定的 Rn 或或 direct 的內(nèi)容減的內(nèi)容減 1 ,再判別其內(nèi)容是否為,再判別其內(nèi)容是否為 0 。若不為。若不為 0 ,轉(zhuǎn)向目標(biāo)地址;若為,轉(zhuǎn)向目標(biāo)地址;若為 0 ,則執(zhí)行,則執(zhí)行 DJNZ下面的指令。下面的指令。這類指令在計(jì)數(shù)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)時(shí)很有用。這類指令在計(jì)數(shù)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)時(shí)很有用。例:從例:從 P1.7引腳輸出引腳輸出 5 個(gè)方波個(gè)方波 MOV R2,#10LOOP: CPL P1.7 DJNZ R2,LOOP第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 例19 將內(nèi)部RAM從D

54、ATA單元開始的10個(gè)無(wú)符號(hào)數(shù)相加,相加結(jié)果送SUM單元保存。 設(shè)相加結(jié)果不超過(guò)8位二進(jìn)制數(shù),則相應(yīng)的程序如下: MOV R0,#0AH ;設(shè)置循環(huán)次數(shù) MOV R1,#DATA ;R1作地址指針,指向數(shù)據(jù)塊首地址 CLR A ;A清零LOOP: ADD A,R1 ;加一個(gè)數(shù) INC R1 ;修改指針,指向下一個(gè)數(shù) DJNZ R0,LOOP ;R0減1,不為0循環(huán) MOV SUM,A ;存10個(gè)數(shù)相加的和第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.7 子程序調(diào)用與返回指令子程序調(diào)用與返回指令3.7.1 子程序調(diào)用指令子程序調(diào)用指令子程序調(diào)用指令有長(zhǎng)調(diào)用和絕對(duì)調(diào)用兩條,它們都是雙周期

55、指令。子程序調(diào)用指令有長(zhǎng)調(diào)用和絕對(duì)調(diào)用兩條,它們都是雙周期指令。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 LCALL和ACALL指令類似于轉(zhuǎn)移指令LJMP和AJMP,不同之處在于它們?cè)谵D(zhuǎn)移前要把執(zhí)行完該指令的PC內(nèi)容自動(dòng)壓入堆棧后,才將子程序入口地址addr16(或addr11)送PC,實(shí)現(xiàn)轉(zhuǎn)移。 LCALL與LJMP一樣提供16位地址,可調(diào)用64 KB范圍內(nèi)的子程序。由于該指令為3字節(jié),所以執(zhí)行該指令時(shí)首先應(yīng)執(zhí)行(PC)(PC)+3,以獲得下一條指令地址,并把此時(shí)的PC內(nèi)容壓入堆棧(先壓入低字節(jié),后壓入高字節(jié))作為返回地址,堆棧

56、指針SP加2指向棧頂,然后把目的地址addr16送入PC。該指令執(zhí)行不影響標(biāo)志位。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 ACALL與AJMP一樣提供11位地址,只能調(diào)用與PC在同一2 KB范圍內(nèi)的子程序。由于該指令為2字節(jié)指令,所以執(zhí)行該指令時(shí)應(yīng)執(zhí)行(PC)(PC)+2以獲得下一條指令地址,并把該地址壓入堆棧作為返回地址。該指令機(jī)器碼的構(gòu)成也與AJMP類似,只不過(guò)操作碼第一字節(jié)其高半字節(jié)的最后一位是1,機(jī)器碼的組成如下:a10 a9 a8 1 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 被調(diào)用子程序的目的地址也是由執(zhí)行 ACALL指令的當(dāng)前PC值的高5位與指

57、令中提供的11位直接地址形成。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.7.2 返回指令返回指令 返回指令共兩條:一條是對(duì)應(yīng)兩條調(diào)用指令的子程序返回指返回指令共兩條:一條是對(duì)應(yīng)兩條調(diào)用指令的子程序返回指令令RET,另一條是對(duì)應(yīng)從中斷服務(wù)程序的返回指令,另一條是對(duì)應(yīng)從中斷服務(wù)程序的返回指令RETI。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 從上述兩條指令的功能操作看,都是從堆棧中彈出返回地址送PC,堆棧指針減2,但它們是兩條不同的指令。其有下面兩點(diǎn)不同: (1) 從使用上,RET指令必須作子程序的最后一條指令;RETI必須作中斷服務(wù)程序的最后一條指令。 (2) RETI

58、指令除恢復(fù)斷點(diǎn)地址外,還恢復(fù)CPU響應(yīng)中斷時(shí)硬件自動(dòng)保護(hù)的現(xiàn)場(chǎng)信息。執(zhí)行RETI指令后,將清除中斷響應(yīng)時(shí)所置位的優(yōu)先級(jí)狀態(tài)觸發(fā)器,使得已申請(qǐng)的同級(jí)或低級(jí)中斷申請(qǐng)可以響應(yīng);而RET指令只能恢復(fù)返回地址。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.7.3 空操作指令空操作指令 NOP ;(PC)(PC)+1 空操作指令是一條單字節(jié)單周期指令。它控制空操作指令是一條單字節(jié)單周期指令。它控制 CPU不做任何操作,僅僅是消耗這條指令執(zhí)行所需要不做任何操作,僅僅是消耗這條指令執(zhí)行所需要的一個(gè)機(jī)器周期的時(shí)間,不影響任何標(biāo)志位,故稱為的一個(gè)機(jī)器周期的時(shí)間,不影響任何標(biāo)志位,故稱為空操作指令??詹僮?/p>

59、指令。NOP指令在設(shè)計(jì)延時(shí)程序、拼湊精確延指令在設(shè)計(jì)延時(shí)程序、拼湊精確延時(shí)時(shí)間及在程序等待或修改程序等場(chǎng)合是很有用的。時(shí)時(shí)間及在程序等待或修改程序等場(chǎng)合是很有用的。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例3.8 位操作類指令位操作類指令 位操作類指令在單片機(jī)指令系統(tǒng)中占有重要地位,這是因?yàn)閱纹瑱C(jī)在控制系統(tǒng)中主要用于控制線路通、斷,繼電器的吸合與釋放等。 位操作也稱布爾變量操作,它是以位(bit)作為單位來(lái)進(jìn)行運(yùn)算和操作的。MCS-51單片機(jī)內(nèi)部有一個(gè)功能相對(duì)獨(dú)立的布爾處理機(jī),它有借用進(jìn)位標(biāo)志CY作為位累加器,有位存儲(chǔ)器(即位尋址區(qū)中的各位),指令系統(tǒng)中有17條專門進(jìn)行位處理的指令集

60、。位處理指令可以完成以位為對(duì)象的數(shù)據(jù)轉(zhuǎn)送、運(yùn)算、控制轉(zhuǎn)移等操作。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例 在位操作指令中,位地址的表示有以下不同的方法(以下均以程序狀態(tài)字寄存器PSW的第5位F0標(biāo)志為例說(shuō)明): (1) 直接位地址表示,如D5H。 (2) 點(diǎn)表示(說(shuō)明是什么寄存器的什么位),如PSW.5,說(shuō)明是PSW的第5位。 (3) 位名稱表示,如直接用F0表示。 (4) 用戶定義名稱表示,如用戶定義用FLG這一名稱來(lái)代替F0,則在指令中允許用FLG表示F0標(biāo)志位。第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編語(yǔ)言程序示例表3.6 條件轉(zhuǎn)移指令 第3章 MCS-51單片機(jī)指令系統(tǒng)和匯編

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論