n第3章 80C51單片機(jī)的指令系統(tǒng)_第1頁
n第3章 80C51單片機(jī)的指令系統(tǒng)_第2頁
n第3章 80C51單片機(jī)的指令系統(tǒng)_第3頁
n第3章 80C51單片機(jī)的指令系統(tǒng)_第4頁
n第3章 80C51單片機(jī)的指令系統(tǒng)_第5頁
已閱讀5頁,還剩153頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 基本內(nèi)容3.1概述 3.1.1指令分類 3.1.2指令格式 3.1.3指令系統(tǒng)中使用的符號3.2尋址方式和尋址空間3.3指令系統(tǒng) 3.3.1數(shù)據(jù)傳送類指令 3.3.2算術(shù)運(yùn)算類指令 3.3.3邏輯運(yùn)算類指令 3.3.4控制轉(zhuǎn)移類指令 3.3.5布爾(位)操作類指令3.1概述3.1.1指令分類80C51系列單片機(jī)完全繼承了MCS51的指令系統(tǒng),共有111條指令,按其功能可分為五大類: 數(shù)據(jù)傳送類指令(28條); 算術(shù)運(yùn)算類指令(24條); 邏輯運(yùn)算類指令(25條); 控制轉(zhuǎn)移類指令(17條); 布爾操作(位)類指令(17條)。 本章將分類介紹這五類指令,并在書后以附錄形式逐條列出。3.1.2指

2、令格式指令格式 指令的表示方法稱之為指令格式,其內(nèi)容包括指令的長度和指令內(nèi)部信息的安排的長度和指令內(nèi)部信息的安排等。一條指令通常由操作碼和操作數(shù)兩部分組成。操作碼是用來規(guī)定指令所完成的操作的,而操作數(shù)則表示操作的對象。操作數(shù)可能是一個(gè)具體的數(shù)據(jù),也可能是指出取得數(shù)據(jù)的地址或符號。單片機(jī)由于字長短,因此,指令都是不定長的即變長變長指令。在80C51系列的指令系統(tǒng)中,有單字節(jié)、雙字節(jié)和三字節(jié)等不同長度的指令。 單字節(jié)指令:指令只有一個(gè)字節(jié),操作碼和操作數(shù)同在一個(gè)字節(jié)中。在80C51系列的指令系統(tǒng)中,共有49條單字節(jié)指令。 雙字節(jié)指令:雙字節(jié)指令包括兩個(gè)字節(jié)。其中一個(gè)字節(jié)為操作碼,另一個(gè)字節(jié)是操作數(shù)

3、。在80C51系列的指令系統(tǒng)中,共有45條雙字節(jié)指令。 三字節(jié)指令:在三字節(jié)指令中,操作碼占一個(gè)字節(jié),操作數(shù)占兩個(gè)字節(jié)。其中操作數(shù)既可能是數(shù)據(jù),也可能是地址。在80C51系列的指令系統(tǒng)中,共有17條三字節(jié)指令。3.1.3指令系統(tǒng)中使用的符號 在說明和使用80C51系列的指令時(shí),經(jīng)常使用一些符號。下面將所使用的一些符號的意義作一簡單說明。Rn 當(dāng)前寄存器組的8個(gè)通用寄存器R0R7,所以n=07。Ri 可用作間接尋址的寄存器,只能是R0 、R1兩個(gè)寄存器,所以i=0,1。direct 內(nèi)部的8位地址,既可以指片內(nèi) RAM的低128個(gè)單元地址,也可以指特殊功能寄存器的地址或符號名稱,因此direct

4、表示直接尋址方式。#data 8位立即數(shù)。#data16 16位立即數(shù)。addr16 16位目的地址,只限于在LCALL和LJMP指令中使用。addr11 11位目的地址,只限于在ACALL和AJMP指令中使用。rel 相對轉(zhuǎn)移指令中的偏移量,為8位帶符號數(shù)。DPTR 數(shù)據(jù)指針。bit 片內(nèi)RAM (包括特殊功能寄存器)中的直接尋址位。A 累加器。B B寄存器。C 進(jìn)位標(biāo)志位,是布爾處理機(jī)中的累加器,也稱之為累加位。 間址寄存器的前綴標(biāo)志。/ 位地址的前綴標(biāo)志,表示對該位操作數(shù)取反。() 某寄存器或某單元的內(nèi)容。() 由尋址的單元中的內(nèi)容。 箭頭左邊的內(nèi)容被箭頭右邊的內(nèi)容所取代。3.2尋址方式

5、和尋址空間尋址方式和尋址空間 執(zhí)行任何一條指令都需要使用操作數(shù)。尋址方式就是在指令中用于說明操作數(shù)所在地址的方法。 根據(jù)指令操作的需要,計(jì)算機(jī)有多種尋址方式??偟膩碚f,尋址方式越多,計(jì)算機(jī)的功能就越強(qiáng),靈活性越大,指令系統(tǒng)也就愈加復(fù)雜。因此在設(shè)定尋址方式時(shí),應(yīng)考慮到需要和可能。80C51系列單片機(jī)指令系統(tǒng)中共有以下7種尋址方式。 1 立即尋址 立即尋址是指在指令中直接給出操作數(shù)。出現(xiàn)在指令中的操作數(shù)稱為立即數(shù),因此就將這種尋址方式稱為立即尋址。為了與直接尋址指令中的直接地址相區(qū)別,在立即數(shù)前面加前綴“#”。 例如: 指令 MOV A,#3AH 圖31“MOV A,#3AH”示意圖 其中3AH就

6、是立即數(shù),指令功能是把8位立即數(shù)3AH送入累加器,如圖3-1所示。 此外,在80C51系列指令系統(tǒng)中還有一條16位立即數(shù)指令,即: MOV DPTR,#data16其功能是把16位立即數(shù)送入數(shù)據(jù)指針寄存器。例如:執(zhí)行指令 MOV DPTR,#1556H,如圖3-2所示。圖3-2“MOV DPTR,#1556H”示意圖2 直接尋址 直接尋址是指在指令中直接給出操作數(shù)單元的地址。例如:指令 MOV A,3AH圖3-3“MOV A,3AH”示意圖 其功能是把片內(nèi)片內(nèi)RAM中 3AH單元內(nèi)的數(shù)據(jù)傳送給累加器A,如圖3-3所示。 直接尋址方式只能給出只能給出8位位地址,因此,這種尋址方式的尋址范圍只限于

7、片內(nèi)RAM,具體地說:(1) 低128單元,在指令中直接以單元地址形式給出。(2) 特殊功能寄存器,這時(shí)除可以單元地址形式給出外,還可以寄存器符號形式給出。雖然特殊功能寄存器可以使用符號標(biāo)志,但在指令代碼中還是按地址進(jìn)行編碼的。 應(yīng)當(dāng)說明的是,直接尋址是訪問特殊功能寄存器的惟一方法。3 寄存器尋址 寄存器尋址是指在指令中將指定寄存器的內(nèi)容作為操作數(shù)。因此指定了寄存器就能得到了操作數(shù)。 寄存器尋址方式中,用符號名稱來表示寄存器。例如:指令 INC R0 其功能是把寄存器R0的內(nèi)容加 1,再送回R0中。由于操作數(shù)在R0中,指定了R0,也就得到了操作數(shù),如圖3-4所示。圖3-4“INC R0”示意圖

8、寄存器尋址方式的尋址范圍包括:(1)四個(gè)寄存器組共32個(gè)通用寄存器。但在指令中只能使用當(dāng)前寄存器組。因此在使用前要通過指定PSW中的RS1、RS0,以選擇使用的當(dāng)前寄存器組。(2) 部分特殊功能寄存器。例如累加器A、AB寄存器對以及數(shù)據(jù)指針DPTR。4 寄存器間接尋址寄存器間接尋址 寄存器間接尋址是指在指令中要到寄存器的內(nèi)容所指的地址去取操作數(shù)??梢钥闯?,在寄存器尋址方式中,寄存器中存放的是操作數(shù);而在寄存器間接尋址方式中,寄存器中存放的則是操作數(shù)的地址。這就是說,指令的操作數(shù)是通過寄存器間接得到的,因此,稱為寄存器間接尋址。 寄存器間接尋址也需以寄存器符號名稱的形式表示。為了區(qū)別寄存器尋址和

9、寄存器間接尋址,在寄存器間接尋址中,應(yīng)在寄存器的名稱前面加前綴“”。 假定R1寄存器的內(nèi)容是60H,則指令A(yù)NL A,R1的功能是以R1寄存器的內(nèi)容60H為地址,將60H地址單元的內(nèi)容與累加器A中的數(shù)相“與”,其結(jié)果仍存放在A中。其功能示意請參見圖3-5。 圖3-5寄存器間接尋址示意圖寄存器間接尋址的尋址范圍:(1)片內(nèi)RAM低128單元:這里只能使用R0或R1為間址寄存器,其通用形式寫為Ri(i=,1)。(2) 片外RAM 64 KB:使用DPTR作為間址寄存器,其形式為DPTR,例如:MOVX A,DPTR,其功能是把DPTR指定的片外RAM單元的內(nèi)容送累加器A。(3) 片外RAM低256

10、單元:除可使用DPTR作為間址寄存器外,也可使用R0或R1作間址寄存器。例如:MOVX A,R0,即把R0指定的片外RAM單元的內(nèi)容送累加器A。(4) 堆棧區(qū):堆棧操作指令(PUSH和POP) 也應(yīng)算作是寄存器間接尋址,即以堆棧指針(SP)作間址寄存器的間接尋址方式。5 相對尋址 相對尋址是指在指令中給出的操作數(shù)為程序轉(zhuǎn)移的偏移量。相對尋址方式是為實(shí)現(xiàn)程序的相對轉(zhuǎn)移而設(shè)立的,為相對轉(zhuǎn)移指令所采用。 在相對轉(zhuǎn)移指令中,給出地址偏移量(在80C51系列單片機(jī)的指令系統(tǒng)中,以“rel”表示),把PC的當(dāng)前值加上偏移量就構(gòu)成了程序轉(zhuǎn)移的目的地址。而PC的當(dāng)前值是指執(zhí)行完轉(zhuǎn)移指令后的PC值,即轉(zhuǎn)移指令的

11、PC值加上它的字節(jié)數(shù)。因此轉(zhuǎn)移的目的地址可用如下公式表示: 目的地址= 轉(zhuǎn)移指令所在地址+轉(zhuǎn)移指令字節(jié)數(shù)+rel 在80C51系列單片機(jī)的指令系統(tǒng)中,有許多條相對轉(zhuǎn)移指令。這些指令多數(shù)均為兩字節(jié)指令,只有個(gè)別的是三字節(jié)的指令。偏移量rel是一個(gè)帶符號的8位二進(jìn)制補(bǔ)碼數(shù),所能表示的數(shù)的范圍是128+127。因此以相對轉(zhuǎn)移指令的所在地址為基點(diǎn),向前最大可轉(zhuǎn)移(127+轉(zhuǎn)移指令字節(jié)數(shù))個(gè)單元地址,向后最大可轉(zhuǎn)移(128轉(zhuǎn)移指令字節(jié)數(shù))個(gè)單元地址。 例如:指令 JC 80H 表示若進(jìn)位位C為0,則程序計(jì)數(shù)器PC中的內(nèi)容不變,即不轉(zhuǎn)移;若進(jìn)位位C為1,則以程序計(jì)數(shù)器PC中當(dāng)前值為基地址,加上偏移量80H

12、后所得結(jié)果作為該轉(zhuǎn)移指令的目的地址,其執(zhí)行示意圖如圖3-6所示。 圖3-6“JC 80H”示意圖 指令的操作碼存在1000H單元,偏移量存在1001H單元。執(zhí)行該指令后,程序計(jì)數(shù)器PC指向1002H(即當(dāng)前值)。這里80H128,故1002H與128(80H)相加(補(bǔ)碼運(yùn)算)后得到轉(zhuǎn)移地址0F82H。6 變址尋址變址尋址是指以DPTR或PC作基址寄存器,累加器A作變址寄存器,以兩者內(nèi)容相加形成的16位程序存儲器地址作為操作數(shù)地址。又稱基址寄存器+變址寄存器間接尋址。 例如: 指令MOVC A, A+DPTR 其功能是把DPTR和A的內(nèi)容相加所得到的程序存儲器地址單元的內(nèi)容送A。假定指令執(zhí)行前(

13、A)=54H,(DPTR)=3F21H 則該指令的操作示意請參見圖3-7。變址尋址形成的操作數(shù)地址為3F21H+54H=3F75H,若3F75H單元的內(nèi)容為7FH,則該指令執(zhí)行的結(jié)果是A的內(nèi)容為7FH。圖3-7 變址尋址示意圖 對80C51系列的指令系統(tǒng)中的變址尋址指令有如下特點(diǎn):(1)變址尋址方式只能對程序存儲器進(jìn)行尋址,或者說是專門針對程序存儲器的尋址方式; 變址尋址指令只有三條:MOVC A,A+DPTRMOVC A, A+PCJMP A+DPTR其中,前兩條是程序存儲器讀指令,后一條是無條件轉(zhuǎn)移指令;(3)盡管變址尋址方式復(fù)雜,但這三條指令卻都是單字節(jié)指令;(4)變址尋址方式用于查表操

14、作,還可用于散轉(zhuǎn)操作。7 位尋址 80C51系列單片機(jī)有位處理功能,可以對數(shù)據(jù)位進(jìn)行操作,因此就有相應(yīng)的位尋址方式。位尋址的尋址范圍:(1)片內(nèi)RAM中的位尋址區(qū) 片內(nèi)RAM中的單元地址20H2FH,共16個(gè)單元128位,為位尋址區(qū),位地址是0H7FH。對這128個(gè)位的尋址使用直接位地址表示。例如: MOV C,2BH指令的功能是把位尋址區(qū)的2BH位狀態(tài)送累加位C。(2) 可位尋址的特殊功能寄存器位 可供位尋址的特殊功能寄存器共有11個(gè),實(shí)有尋址位83位。對這些尋址位在指令中有如下4種表示方法: 直接使用位地址表示方法。 單元地址加位的表示方法。例如88H單元的位5,則表示為88H.5。 特殊

15、功能寄存器符號加位的表示方法。例如PSW寄存器的位5,可表示為PSW.5。 位名稱表示方法,特殊功能寄存器中的一些尋址位是有名稱的。例如PSW寄存器位5為F0標(biāo)志位,則可使用F0表示該位。 一個(gè)尋址位有多種表示方法,初看起來似乎是復(fù)雜,實(shí)際上將為程序設(shè)計(jì)帶來方便。對于指令中的操作數(shù),因?yàn)橹噶畈僮鞒0橛袕挠蚁蜃髠魉蛿?shù)據(jù)的內(nèi)容,所以常把左邊操作數(shù)稱為目的操作數(shù),而右邊操作數(shù)稱為源操作數(shù)。上面所講的各種尋址方式都是針對源操作數(shù)的,實(shí)際上,目的操作數(shù)也有尋址的問題。 例如:指令 MOV 45H,R1 其源操作數(shù)是寄存器尋址方式,而目的操作數(shù)則是直接尋址方式。上述指令的功能是,把按寄存器尋址取出的R1內(nèi)

16、容,再以直接尋址方式存放于內(nèi)部RAM的45H單元中。 總的來說,源操作數(shù)的尋址方式多,而目的操作數(shù)的尋址方式較少,只有寄存器尋址、直接尋址、寄存器間接尋址和位尋址四種方式。因此,知道了源操作數(shù)的尋址方式,也就不難了解目的操作數(shù)的尋址問題了。 以上介紹了80C51指令系統(tǒng)的7種尋址方式,概括起來如表3-1所列。 表3-180C51中的尋址方式和尋址空間序號 尋址方式 使用的變量 尋址空間1 立即尋址 程序存儲器2 直接尋址 片內(nèi)RAM低128 B 特殊功能寄存器3 寄存器尋址 R0R7、A、B、 DPTR、CY4 寄存器間接尋址 R0、R1、SP 片內(nèi)RAM R0、R1、DPTR 片外RAM5

17、相對尋址 PC+偏移量 程序存儲器6 變址尋址 A+PC、A+DPTR 程序存儲器7 位尋址 片內(nèi)RAM中的位尋址區(qū) 可以位尋址的特殊功能寄存器位3.3 指令系統(tǒng)3.3.1 數(shù)據(jù)傳送類指令 80C51具有豐富的數(shù)據(jù)傳送指令,能實(shí)現(xiàn)多種數(shù)據(jù)的傳送操作。數(shù)據(jù)傳送指令共有28條。數(shù)據(jù)傳送指令按功能又可分為:一般傳送指令、目的地址傳送指令、累加器傳送指令和棧操作指令。 數(shù)據(jù)傳送指令特點(diǎn)是: 可以進(jìn)行直接地址到直接地址的數(shù)據(jù)傳送,能把一個(gè)并行I/O口中的內(nèi)容傳送到片內(nèi)RAM單元中而不必經(jīng)過累加器A或工作寄存器Rn,這樣可以大大提高傳送速度,緩解累加器A的瓶頸效應(yīng)。 用R0和R1寄存器間址訪問片外數(shù)據(jù)存儲

18、器256個(gè)字節(jié)中的任一字節(jié)單元;用DPTR的16位數(shù)據(jù)指針間址訪問全部64 KB片外數(shù)據(jù)存儲器地址空間中的任何一個(gè)單元。 累加器A能與選定的Rn中任一個(gè)寄存器尋扯;直接尋址片內(nèi)RAM中的任一單元;特殊功能寄存器之間進(jìn)行一個(gè)字節(jié)的數(shù)據(jù)傳送;片內(nèi)RAM單元之間進(jìn)行低半字節(jié)的數(shù)據(jù)交換。 能用變址尋址方式訪問程序存儲器中的表格,將程序存儲器單元中的固定常數(shù)或表格字節(jié)內(nèi)容傳送到累加器A中。這為編程翻譯算法提供了方便。1一般傳送指令 一般傳送指令共有15條,這類傳送指令的格式為: MOV , 它的功能是把源字節(jié)的內(nèi)容送到目的字節(jié),而源字節(jié)的內(nèi)容不變。操作屬于拷貝性質(zhì),不屬于搬家性質(zhì)。 源操作數(shù)可以有: 累

19、加器A, 工作寄存器Rn(n=0,7), 直接地址direct、間接尋址寄存器Ri(i=0,1)和立即數(shù)#data。 目的操作數(shù)可以有: 累加器A,工作寄存器Rn(n=0,7),直接地址direct和間接尋址寄存器Ri(i=0,1)。 其間的傳送關(guān)系由表3-2表示。 表3-2一般傳送指令傳送數(shù)據(jù)關(guān)系 源 操 作 數(shù)ARndirectRi#data目的操作數(shù) ARndirectRi 這類指令是以MOV為其助記符的。從表上可以看出,以目的操作數(shù)為準(zhǔn),可將一般傳送指令分為4組。 (1)以累加器A為目的操作數(shù)的指令組,共有4條指令: MOV A, Rn ;(A) (Rn) MOV A,direct ;

20、(A)(direct) MOV A,Ri ;(A)(Ri) MOV A,#data ;(A)#data 這組指令的功能是把源操作數(shù)的內(nèi)容送入累加器。源操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等尋址方式。 傳送指令是以累加器A為中心的總體結(jié)構(gòu),絕大部分傳送操作均需通過A進(jìn)行的,所以累加器A是一個(gè)特殊的、使用十分頻繁的寄存器。但是在80C51中,由于可以進(jìn)行直接地址之間的數(shù)據(jù)傳送,極大地減輕了累加器的負(fù)擔(dān),大大地緩解了擁堵現(xiàn)象。 (2) 以寄存器Rn為目的操作數(shù)的指令組,共有3條指令:MOV Rn,A ;(Rn)(A) MOV Rn,direct ;(Rn)(direct) MOV

21、Rn,#data ;(Rn)#data 這組指令的功能是把源操作數(shù)的內(nèi)容送入當(dāng)前工作寄存器區(qū)的R0R7中的某一個(gè)寄存器。源操作數(shù)有寄存器尋址、直接尋址和立即尋址等尋址方式。(3) 以直接地址direct為目的操作數(shù)的指令組,共有5條指令:MOV direct,A ;(direct)(A) MOV direct,Rn ;(direct)(Rn)MOV direct,direct ;(direct2)(direct1)MOV direct,Ri ;(direct)(Ri)MOV direct,#data ;(direct)#data 這組指令的功能是把源操作數(shù)的內(nèi)容送入由直接地址指出的存儲單元。源

22、操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等尋址方式。 直接地址direct為8位直接地址,可尋址0255個(gè)單元,對于80C51可直接尋址內(nèi)部RAM 0127個(gè)地址單元和128255地址的特殊功能寄存器。對80C51而言,這128255 128個(gè)地址單元很多是沒有定義的。對于無定義的單元進(jìn)行讀寫時(shí),讀出的為不定數(shù),而寫入的數(shù)將被丟失。 這里,需要注意的,若累加器A以其直接地址0E0H來尋址,也可實(shí)現(xiàn)上述功能,即: MOV A, #data ; 機(jī)器碼 74 #data MOV 0E0H, #data ;機(jī)器碼 75 E0 #data但機(jī)器碼要多一個(gè)字節(jié),執(zhí)行時(shí)間也會加長。(4) 以

23、間接尋址寄存器Ri為目的操作數(shù)的指令組,共有3條指令:MOV Ri,A ;(Ri)(A) MOV Ri,direct ;(Ri)(direct) MOV Ri,#data ;(Ri)#data 這組指令的功能是把源操作數(shù)的內(nèi)容送入由R0和R1的內(nèi)容所指的內(nèi)部RAM中的存儲單元。源操作數(shù)有寄存器尋址、直接尋址和立即尋址等尋址方式。 間接尋址寄存器Ri由操作碼字節(jié)的最低位來選定是R0還是R1寄存器,間址是以Ri的內(nèi)容作為操作數(shù)的地址來進(jìn)行尋址的。也就是說,Ri的內(nèi)容并不是操作數(shù)而是操作數(shù)的地址,而此地址所對應(yīng)的存儲單元內(nèi)容才是真正的操作數(shù)。 直接尋址direct單元在編程時(shí)就巳明確,而間接尋址單元

24、是在程序進(jìn)行中明確的,間接尋址空間和直接尋址空間范圍相同,均為0255個(gè)單元地址。 立即數(shù)#data為一常數(shù),它是不帶符號的8位二進(jìn)制數(shù)。在編程中必須注意的是直接地址direct和立即數(shù)#data均以數(shù)據(jù)形式出現(xiàn),但兩者的含義是不相同的,故在指令中必須用“#”作為立即數(shù)的前綴以與直接地址相區(qū)別。 例如: MOV A,5EH ;表示片內(nèi)RAM中的5EH 單元 內(nèi)容送A,這里5EH為直接地址 MOV A,#5EH ;表示把立即數(shù)5EH送A MOV 5EH,#5EH ; 這是一條3字節(jié)指令,表示把立即數(shù)5EH送到片內(nèi)RAM中的5EH地址單元中去MOV 5EH,4EH ;這是一條3字節(jié)指令,表示把4E

25、H單元的內(nèi)容送到5EH單元中去。;這是片內(nèi)數(shù)據(jù)存儲單元中的直接地址單元數(shù)據(jù)之間的直接傳送2 目的地址傳送指令 MOV DPTR,#data16 ; (DPTR)#data16 這是80C51中惟一的一條16位指令。此指令把16位常數(shù)裝入數(shù)據(jù)指針DPTR,16位常數(shù)在指令的第二、第三字節(jié)中(第二字節(jié)為高位字節(jié)DPH,第三字節(jié)為低位字節(jié)DPL)。此操作不影響標(biāo)志位。例如: 執(zhí)行指令為 MOV DPTR,#1234H 執(zhí)行結(jié)果為 (DPH)=12H,(DPL)=34H。3 累加器傳送指令 累加器傳送指令均是以累加器為中心進(jìn)行的,這類指令共有10條,又可分為4組。(1)字節(jié)交換指令XCH組,共有3條指

26、令: XCH A,Rn XCH A,direct XCH A,Ri 這組指令的功能是將累加器A與源操作數(shù)的內(nèi)容互換。源操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址等尋址方式。操作碼分別為C5HCFH。 例如:設(shè) (R0)=30H,(A)=3FH,片內(nèi) RAM中(30H)=45H。執(zhí)行指令為 XCH A,R0執(zhí)行結(jié)果為 (A)=45H,(30H)=3FH。(2)半字節(jié)交換指令XCHD組,只有1條指令: XCHD A,RiXCHD指令是將Ri間接尋址單元的低4位內(nèi)容與累加器A的低4位內(nèi)容互換,而它們的高4位內(nèi)容均不變。此指令不影響標(biāo)志位。 例如: 設(shè)(R0)=20H,(A)=36H(0011011

27、0B),內(nèi)部RAM中(20H)=75H,(01110101B)。執(zhí)行指令為 XCHD A,R0執(zhí)行結(jié)果為 (20H)=01110110B=76H,(A)=00110101 B=35H。(3)A與片外數(shù)據(jù)存儲器的傳送指令MOVX組,共有4條指令: MOVX A,Ri MOVX A,DPTR MOVX Ri,A MOVX DPTR,A 這組的功能是實(shí)現(xiàn)累加器A與外部數(shù)據(jù)存儲器或I/O口之間傳送一個(gè)字節(jié)數(shù)據(jù)的指令。 采用間接尋址方式訪問外部數(shù)據(jù)存儲器,有Ri和DPTR兩種間接尋址方式。 采用R0或R1作間址寄存器時(shí),可尋址256個(gè)外部數(shù)據(jù)存儲器單元,8位地址和數(shù)據(jù)均由P0口分時(shí)輸入和輸出。這時(shí)若要訪

28、問大于256個(gè)單元的片外RAM時(shí),可選用任何其它輸出口線來輸出高于8位的地址(一般選用P2口輸出高8位地址)。 采用16位DPTR作間址時(shí),則可尋址整個(gè)64 KB片外數(shù)據(jù)存貯空間,低8位(DPL)由P0口進(jìn)行分時(shí)使用,高8位(DPH)由P2口輸出。 例如:設(shè)工作寄存器R0的內(nèi)容為12H,R1的內(nèi)容為34H,片外RAM 34H單元的內(nèi)容為56H。執(zhí)行指令為MOVX A, R1 ;(34H)=56H(A)MOVX R0,A ;(A)=56H12H單元中 執(zhí)行結(jié)果為 (34H)=56H, (12H)=56H。(4)A與程序存儲器傳送指令MOVC組或稱查表指令,共有2條指令: MOVC A,A+PC

29、MOVC A,A+DPTR 這兩條指令的功能均是從程序存儲器中讀取數(shù)據(jù),執(zhí)行過程相同,其差別是基址不同,因此適用范圍也不同。4 棧操作指令組這組指令共有2條指令:PUSH directPOP direct入棧(PUSH)操作指令,又稱“壓棧”操作。指令執(zhí)行后棧指針(SP)+1指向棧頂上一個(gè)空單元,將直接地址(direct)單元內(nèi)容送入SP所指示的堆棧單元。此操作不影響標(biāo)志位。 例如: 中斷響應(yīng)時(shí)(SP)=09H,DPTR的內(nèi)容為0123H,執(zhí)行入棧指令其結(jié)果怎樣?PUSH DPL ;DPL為低8位數(shù)據(jù)指針寄存器PUSH DPH ;DPH為高8位數(shù)據(jù)指針寄存器 執(zhí) 行 結(jié) 果 : 第 一 條 指

30、 令 (SP)+1=0AH(SP),(DPL)=23H(0AH)第 二 條 指 令 ( S P ) 十 1 = 0 B H (SP),(DPH)=01H(0BH)所以片內(nèi)RAM中,(0AH)=23,(0BH)=01H,(SP)=0BH。 出棧操作指令,又稱“彈出”操作。由棧指針(SP)所尋址的片內(nèi)RAM中棧頂?shù)膬?nèi)容(SP)送入直接尋址單元direct中,然后執(zhí)行(SP)-1并送入SP。此操作不影響標(biāo)志位。 例如: 設(shè)(SP)=32H,片內(nèi)RAM的30H32H單元中的內(nèi)容分別為20H,23H,01H,執(zhí)行下列指令的結(jié)果怎樣? POP DPH ;(SP)=(32H)=01HDPH ;(SP)-1=

31、32H-1=31HSPPOP DPL ;(SP)=(31H)=23HDPL ;(SP)-1=31H-1=30HSPPOP SP ;(SP)-1=2FHSP ;(SP)=(30H)=20HSP執(zhí)行結(jié)果為 (DPTR)=0123H,(SP)=20H。 以上第三條指令為特殊情況,先執(zhí)行 (SP)-1=2FH,后裝入由棧頂退出的值,所以執(zhí)行后(SP)=20H。 數(shù)據(jù)傳送類指令匯總見附錄中附表2。3.3.2算術(shù)運(yùn)算類指令 算術(shù)運(yùn)算類指令都是通過算術(shù)邏輯運(yùn)算單元ALU進(jìn)行數(shù)據(jù)運(yùn)算處理的指令。它包括各種算術(shù)操作,其中有加、減、乘、除四則運(yùn)算指令共有24條。80C51單片機(jī)還有帶借位減法、比較指令。這些運(yùn)算指

32、令,大大加強(qiáng)了80C51的運(yùn)算能力。 除了加1和減1指令之外,算術(shù)運(yùn)算結(jié)果將使進(jìn)位標(biāo)志(CY)、半進(jìn)位標(biāo)志(AC)、溢出標(biāo)志(OV)置位或復(fù)位。 算術(shù)運(yùn)算類指令中的源操作數(shù)與加1、減1指令中的源操作對象見表3-3及表3-4。 表3-3 算術(shù)運(yùn)算類指令中的源操作數(shù)源 操 作 數(shù)助記符 BRnDirectRi#dataDPTRADDADDCSUBBMUL DIV表34 加1和減1指令中的源操作對象助記符ARnDirectRiDPTRINCDEC1 加法指令 加法類指令共14條,包括加法、帶進(jìn)位的加法、加1以及二十進(jìn)制調(diào)整4組指令。(1)加法指令這組指令的助記符為ADD,共有4條指令: ADD A,

33、Rn ;(A)+(Rn)(A)ADD A,direct ;(A)+(direct)(A) ADD A,Ri ;(A)+(Rn)(A) ADD A,#data ;(A)+#data (A) 這組指令的源操作數(shù)為Rn、direct、Ri或立即數(shù),而目的操作數(shù)為累加器A中的內(nèi)容。這組指令的功能是將工作寄存器Rn、片內(nèi)RAM單元中的內(nèi)容、間接地址存儲器中的8位無符號二進(jìn)制數(shù)及立即數(shù)與累加器A中的內(nèi)容相加,相加的結(jié)果仍存放在A中。 這類指令將影響標(biāo)志位AC、CY、OV、P。 當(dāng)和的第3位與第7位有進(jìn)位時(shí),分別將AC、CY標(biāo)志置位,否則為0。 對于帶符號運(yùn)算數(shù)的溢出,當(dāng)和的第7位與第6位中有一位進(jìn)位而另一

34、位不產(chǎn)生進(jìn)位時(shí),溢出標(biāo)志OV置位,否則為0。(OV)=1表示兩個(gè)正數(shù)相加,和為負(fù)數(shù);或兩個(gè)負(fù)數(shù)相加,和為正數(shù)的錯(cuò)誤結(jié)果。 例如:設(shè)(A)=0C3H,(R0)=0AAH。執(zhí)行指令為 ADD A,R0執(zhí)行結(jié)果為 (A)=6DH,(CY)=1,(OV)=1,(AC)=1。(2)帶進(jìn)位位加法指令這組指令的助記符為ADDC,共有4條指令:ADDC A,Rn ;(A)(A)+(Rn)+(CY) ADDC A,direct ;(A)(A)+(direct)+(CY) ADDC A,Ri ;(A)(A)+(Rn)+(CY) ADDC A,#data ;(A)(A)+ #data +(CY) 這組指令的功能是將

35、工作寄存器Rn、片內(nèi)RAM單元中的內(nèi)容、間接地址存儲器中的8位無符號二進(jìn)制數(shù)及立即數(shù)與累加器A的內(nèi)容和當(dāng)前進(jìn)位標(biāo)志CY的內(nèi)容相加,相加的結(jié)果仍存放在A中。 這組指令常用于多字節(jié)加法。這類指令將影響標(biāo)志位AC、CY、OV、P。 當(dāng)和的第3位、第7位有進(jìn)位時(shí),分別將AC、CY標(biāo)志置位,否則為0。 例如:設(shè) (A)=0C3H,(R0)=0AAH,(CY)=1。執(zhí)行指令為 ADDC A,R0執(zhí)行結(jié)果為 (A)=6EH,(CY)=1,(OV)=1,(AC)=0。(3) 加1指令這組指令的助記符為INC,共有5條指令:INC Rn ;(Rn)(Rn)+1 INC direct ;(direct)(dire

36、ct)+1INC Ri ;(Ri)(Ri)+1INC A ;(A)(A)+1INC DPTR ;(DPTR)(DPTR)+1 這組指令的功能是將工作寄存器Rn、片內(nèi)RAM單元中的內(nèi)容、間接地址存儲器中的8位無符號二進(jìn)制數(shù)、累加器A和數(shù)據(jù)指針DPTR的內(nèi)容加1,相加的結(jié)果仍存放在原單元中。 這類指令不影響各個(gè)標(biāo)志位。 例如:設(shè)(R0)=7EH,(7EH)=0FFH,(7FH)=40H。執(zhí)行指令為 INC R0 ;0FFH+1=00H(7EH) INC R0 ;7EH+1=7FH (R0) INC R0 ;40H+1=41H (7FH) 執(zhí)行結(jié)果為(R0)=7FH,(7EH)=00H,(7FH)=

37、41H。(4)二十進(jìn)制調(diào)整指令 該指令的助記符為DA,只有1條指令: DA A 該指令的功能是對BCD碼的加法結(jié)果進(jìn)行調(diào)整。若兩個(gè)壓縮型BCD碼按二進(jìn)制數(shù)相加之后,必須經(jīng)此指令的調(diào)整才能得到壓縮型BCD碼的和數(shù)。 執(zhí)行本指令時(shí)的操作是: 若(A03)9或(AC)=1,則執(zhí)行(A03)+6(A03); 若(A47)9或(CY)=1,則執(zhí)行(A47)+6(A47)。 本指令是根據(jù)A的原始數(shù)值和PSW的狀態(tài),決定對A進(jìn)行加06H、60H或66H的操作的。 例如:設(shè)(A) = 0101 0110 = 56 BCD; (R3)= 0110 0111 = 67 BCD (CY)=1。執(zhí)行指令為 ADDC

38、A,R3 DA A執(zhí)行情況為 執(zhí)行ADDC A,R3: (A) 0101 0110 56 BCD (R3) 0110 0111 67 BCD+ (CY) 0000 0001 01 BCD 1011 1110執(zhí)行DA A:+ 0110 0110 1 0010 0100 124 BCD2 減法指令 減法類指令共8條,包括帶借位的減法、減1兩組指令。(1)帶借位減法指令 這類指令的助記符為SUBB,共有4條指令:SUBB A,Rn ;(A)-(Rn)-(CY)(A) SUBB A,direct ;(A)-(direct)-(CY)(A) SUBB A,Ri ; (A)-(Rn)-(CY)(A) SU

39、BB A,#data ;(A)-#data -(CY)(A) 這組指令的功能是從A中減去進(jìn)位位CY和指定的變量,結(jié)果(差)存A中。 若第7位有借位則CY置1,否則CY清0;若第3位有借位,則AC置1,否則AC清0。 若第7位和第6位中有一位需借位而另一位不借位,則OV置1;OV位用于帶符號的整數(shù)減法。OV=1,則表示正數(shù)減負(fù)數(shù)結(jié)果為負(fù)數(shù),或負(fù)數(shù)減正數(shù)結(jié)果為正數(shù)的錯(cuò)誤結(jié)果。 需要注意的是,在80C51指令系統(tǒng)中沒有不帶借位的減法。如果需要的話,可以在“SUBB” 指令前,用“CLR C” 指令將CY清零。 例如:設(shè)(A)=0C9H,(R2)=54H,(CY)=1。 執(zhí)行指令為 SUBB A,R2

40、 執(zhí)行結(jié)果為 (A)= 74H,(CY)= 0,(AC)= 0,(OV)=1。(2) 減1指令 這類指令的助記符為DEC,共有4條指令:DEC Rn;(Rn)-1(Rn) DEC direct ;(direct)-1(direct)DEC Ri ;(Ri)-1(Ri) DEC A ;(A)-1(A) 這組指令的功能是將工作寄存器Rn、片內(nèi)RAM單元中的內(nèi)容、間接地址存儲器中的8位無符號二進(jìn)制數(shù)和累加器A的內(nèi)容減1,相減的結(jié)果仍存放在原單元中。 這類指令不影響各個(gè)標(biāo)志位。 需要注意:執(zhí)行對并行I/O口的輸出內(nèi)容減1操作,是將該口輸出鎖存器的內(nèi)容讀出并減1,再寫入鎖存器,而不是對該輸出引腳上的內(nèi)容

41、進(jìn)行減1操作。 例如:設(shè)(R0)=7FH,(7EH)=00H,(7FH)=40H。執(zhí)行指令為 DEC R0 ;(7FH)-1=40H-1=3FH(7FH) DEC R0 ;(R0)-1=7FH-1=7EH (R0) DEC R0;(7EH)-1=00H-1=0FFH (7EH) 執(zhí)行結(jié)果為 (R0)=7EH,(7EH)=0FFH,(7FH)=3FH。3 乘法指令乘法指令的助記符為MUL, 只有1條指令: MUL AB 乘法指令的功能是將A和B中兩個(gè)無符號8位二進(jìn)制數(shù)相乘,所得的16位積的低8位存于A中,高8位存于B中。如果乘積大于255時(shí),即高位B不為0時(shí),OV置1;否則,OV置0,CY總是清

42、0的。例如: 設(shè)(A)=50H(80),(B)=0A0H(160)。執(zhí)行指令為 MUL AB執(zhí)行結(jié)果為 乘積3200H(12800),(A)=00H,(B)=32H,(OV)=1,(CY)=0。4 除法指令 除法指令的助記符為DIV,只有1條指令: DIV AB 除法指令的功能是將A中無符號8位二進(jìn)制數(shù)除以B中的無符號8位二進(jìn)制數(shù),所得商的二進(jìn)制數(shù)部分存于A,余數(shù)部分存于B中,并將CY和OV置0。當(dāng)除數(shù)(B)=0時(shí),結(jié)果不定,則OV置1。但CY總是清0的。 例如: 設(shè)(A)=0FBH(251),(B)=12H(18)。 執(zhí)行指令為 DIV AB執(zhí)行結(jié)果為 (A)=0DH(商13),(B)=11

43、H(余數(shù)17),(OV)=0,(CY)=0。 算術(shù)運(yùn)算類指令匯總見附錄中附表3。 3.3.3 邏輯運(yùn)算類指令 邏輯運(yùn)算類指令包括:與、或、異或、清除、求反、移位等操作,共有25條指令。 按參與運(yùn)算的操作數(shù)的個(gè)數(shù)可分為:單操作數(shù)邏輯運(yùn)算和雙操作數(shù)邏輯運(yùn)算兩類。1 單操作數(shù)邏輯運(yùn)算指令 單操作數(shù)邏輯運(yùn)算指令的操作對象都是累加器A,包括:清0、取反、循環(huán)左移、帶進(jìn)位循環(huán)左移、循環(huán)右移、帶進(jìn)位循環(huán)右移和半字節(jié)互換指令,共有7條。(1)累加器清0指令:CLR A 對進(jìn)行累加器清0。此操作不影響標(biāo)志位。 例如: 設(shè)(A)= 44H,執(zhí)行CLR A指令,執(zhí)行結(jié)果為 (A)= 00H。(2) 累加器取反指令:

44、CPL A對進(jìn)行累加器的內(nèi)容逐位取反,結(jié)果仍存在A中。此操作不影響標(biāo)志位。例如:設(shè)(A)= 21H,執(zhí)行CPL A指令,執(zhí)行結(jié)果為 (A)= 0DEH。(3) 循環(huán)右移指令:RR A它是將累加器的內(nèi)容逐位循環(huán)右移一位,并且a0的內(nèi)容移到a7,見圖3-8(a)所示。此操作不影響標(biāo)志位。例如: 設(shè)(A)=0A6H(10100110B), 執(zhí)行RR A指令, 執(zhí) 行 結(jié) 果 為 ( A ) = 5 3 H(01010011B)。 (4)帶進(jìn)位循環(huán)右移指令:RRC A它是將累加器的內(nèi)容和進(jìn)位位一起循環(huán)右移一位,并且a0移入進(jìn)位位CY,CY的內(nèi)容移到a7,見圖3-8(b)所示。此操作不影響CY之外的標(biāo)志

45、位。 例如:設(shè)(A)=0B4H(10110100B),(CY)=1, 執(zhí)行RRC A指令, 執(zhí)行結(jié)果為(A)=0DAH(11011010B),(CY)=0 圖3-8循環(huán)移位指令示意圖(5)循環(huán)左移指令: RL A 它是將累加器的內(nèi)容逐位循環(huán)左移一位,并且a7的內(nèi)容移到a0,見圖3-8(c)所示。此操作不影響標(biāo)志位。例如:設(shè)(A)=3AH(00111010B),執(zhí)行RL A指令,執(zhí)行結(jié)果為(A)= 74H(01110100B)。(6)帶進(jìn)位循環(huán)左移指令:RLC A 它是將累加器的內(nèi)容和進(jìn)位位一起循環(huán)左移一位,并且a7移入進(jìn)位位CY,CY的內(nèi)容移到a0,見圖3-8(d)所示。此操作不影響CY之外的

46、標(biāo)志位。例如:設(shè)(A)=3AH(00111010B),(CY)=1,執(zhí)行RLC A指令,執(zhí)行結(jié)果為(A)= 75H(01110101B),(CY)=0(7)累加器半字節(jié)互換指令:SWAP ASWAP指令是將累加器A的低半字節(jié)(a3a0)內(nèi)容與高半字節(jié)(a7a4)內(nèi)容互換, 見圖3-9所示。此操作不影響標(biāo)志位。圖3-9累加器半字節(jié)互換指令示意圖例如: 設(shè)(A)=36H(00110110B) ,執(zhí)行 SWAP A指令,執(zhí)行結(jié)果為(A)=63H(01100011B)。2 雙操作數(shù)邏輯運(yùn)算指令 雙操作數(shù)邏輯運(yùn)算指令包括:ANL(邏輯“與”)、ORL(邏輯“或”)及XOR(邏輯“異或”)三類操作,共18

47、條指令。 在指令中包含有兩個(gè)操作數(shù):第一操作數(shù) A,direct 第二操作數(shù) A,Rn,direct,#data,Ri 兩個(gè)操作數(shù)之間的配合關(guān)系如表3-5 所示表3-5 兩個(gè)操作數(shù)之間的配合關(guān)系第一操作數(shù) 第 二 操 作 數(shù)ARndirectRi#dataAAdirect 這組指令的特點(diǎn)為: 兩個(gè)操作數(shù)的ANL、ORL及XOR對于8位是逐位進(jìn)行的; 兩個(gè)操作數(shù)的邏輯運(yùn)算結(jié)果存在第一操作數(shù)中; 若是對口的操作,即為“讀改寫”; 操作不影響標(biāo)志位。(1)邏輯“與”運(yùn)算指令 這組指令的助記符為ANL,共有6條指令: ANL A,Rn;(A)(A)(Rn) ANL A,direct ;(A)(A)(d

48、irect) ANL A,Ri ;(A)(A)(Ri) ANL A, #data ;(A)(A) #data ANL direct,A ;(direct)(direct)(A) ANL direct, #data;(direct)(direct) #data例如: 設(shè)(A)= 0A3H(1010 0011B),(R0)= 0AAH(1010 1010B)。執(zhí)行指令為 ANL A,Rn:執(zhí)行結(jié)果為 (A)= 0A2H(1010 0010B)。 邏輯“與”運(yùn)算指令用做清除。(2)邏輯“或”運(yùn)算指令 這組指令的助記符為ORL,共有6條指令:ORL A,Rn ;(A)(A)(Rn) ORL A,dir

49、ect ;(A)(A)(direct) ORL A,Ri ;(A)(A)(Ri) ORL A, #data ;(A)(A)#dataORL direct,A ;(direct)(direct)(A) ORL direct, #data;(direct)(direct)#data例如: 設(shè)(A)= 0A3H(1010 0011B),(R0)= 045H(0100 0101B)。執(zhí)行指令為 ORL A,R0執(zhí)行結(jié)果為 (A)= 0E7H(1110 0111B)。邏輯“或”運(yùn)算指令用做置位。(3)邏輯“異或”運(yùn)算指令這組指令的助記符為XRL,共有6條指令: XRL A,Rn ;(A)(A)(Rn)

50、XRL A,direct ;(A)(A) (direct) XRL A,Ri ;(A)(A) (Ri) XRL A, #data ;(A)(A) #data XRL direct,A ;(direct)(direct) (A) XRL direct, #data(direct)(direct) #data例如: 設(shè)(A)= 0A3H(1010 0011B),(R0)= 045H(0100 0101B)。執(zhí)行指令為 XRL A,R0 執(zhí)行結(jié)果為 (A)= 0E6H(1110 0110B)。邏輯運(yùn)算類指令匯總見附錄中附表4。3.3.4控制轉(zhuǎn)移類指令 為了適應(yīng)復(fù)雜的控制系統(tǒng)的需要,80C51設(shè)有豐富

51、的控制轉(zhuǎn)移指令??刂妻D(zhuǎn)移指令共有17條,可分為:無條件轉(zhuǎn)移、調(diào)用和返回、條件轉(zhuǎn)移、循環(huán)轉(zhuǎn)移以及空操作指令。1 無條件轉(zhuǎn)移指令這類指令共有4條: SJMP rel AJMP addr11 LJMP addr16 JMP A+DPTR 這類指令的功能是程序無條件地轉(zhuǎn)移到各自指定的目標(biāo)地址去執(zhí)行,不同的指令形成的目標(biāo)地址不同。(1)相對轉(zhuǎn)移(SJMP)指令:其目標(biāo)地址是由PC(程序計(jì)數(shù)器)和指令的第二字節(jié)帶符號的相對地址相加而成的。指令可轉(zhuǎn)向指令前128 B或指令后127 B。例如: 設(shè)(PC)= 0101H,轉(zhuǎn)入地址為標(biāo)號RELADR所指的單元0123H,因此rel= 0123H(0101H+2)

52、= 20H 執(zhí)行指令為 SJMP RELADR執(zhí)行結(jié)果為 (PC)+2+rel= 0101H+2+20H=0123H所以,程序轉(zhuǎn)向0123H單元執(zhí)行。(2) 短轉(zhuǎn)移(AJMP)指令: 其提供11位地址,目標(biāo)地址由指令第一字節(jié)的高三位a10a8和指令第二字節(jié)的a7a0所組成。因此,程序的目標(biāo)地址必須包含AJMP指令后第一條指令的第一個(gè)字節(jié)在內(nèi)的2 KB范圍內(nèi)。 例如:設(shè)(PC)= 0456H,標(biāo)號JMPADR所指的單元0123H。 執(zhí)行指令為 AJMP JMPADR執(zhí)行結(jié)果為(PC)=0123H所以,程序轉(zhuǎn)向0123H單元執(zhí)行。(3) 長轉(zhuǎn)移(LJMP)指令:其提供16位地址,目標(biāo)地址由指令第二

53、字節(jié)和第三字節(jié)組成。因此,程序轉(zhuǎn)向的目標(biāo)地址可以包含程序存儲器的整個(gè)64 KB空間。例如: 設(shè)(PC)= 0123H,標(biāo)號JMPADR所指的單元3456H。執(zhí)行指令為 LJMP JMPADR執(zhí)行結(jié)果為 (PC)=3456H所以,程序轉(zhuǎn)向3456H單元執(zhí)行。(4) 間接轉(zhuǎn)移(JMP)指令:其目標(biāo)地址是將累加器A中的8位無符號數(shù)與數(shù)據(jù)指針DPTR的內(nèi)容相加而得。相加運(yùn)算不影響累加器A和數(shù)據(jù)指針DPTR的原內(nèi)容。若相加的結(jié)果大于64 KB,則從程序存儲器的零地址往下延續(xù)。例如:設(shè)(A)=5,(DPTR)=4567H。執(zhí)行指令為 JMP A+DPTR執(zhí) 行 結(jié) 果 為 ( P C ) = ( A )

54、+ ( D P T R )=4567H+5H= 456CH所以,程序轉(zhuǎn)向456CH單元執(zhí)行。 這里請注意,這4條指令的執(zhí)行均不影響標(biāo)志位。2 調(diào)用和返回指令這類指令共有4條:ACALL addr11 LCALL addr16 RET RETI(1)絕對調(diào)用(ACALL)指令: 其無條件地調(diào)用首址為addr11處的子程序。執(zhí)行時(shí),把PC加2以獲得下一條指令的地址,將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時(shí)棧指針加2。然后將指令提供的11位目標(biāo)地址,送入PC10PC0,而PC15PC11的值不變,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。目標(biāo)地址由指令第一字節(jié)的高三位和指令第二字節(jié)的所組成。所以,

55、所調(diào)用的子程序的首地址必須與ACALL后面指令的第一個(gè)字節(jié)在同一個(gè)2 KB區(qū)域內(nèi)。 本指令的操作不影響標(biāo)志位。 例如: 設(shè)(SP)=60H,(PC)= 0123H,子程序SUBRTN的首地址為0456H。 執(zhí)行指令為 ACALL SUBRTN執(zhí)行結(jié)果為 (PC)+2=0123H+2=0125H(PC)將(PC)壓入堆棧:25H壓入(SP)+1=61H,01H壓入(SP)+1=62H,此時(shí)(SP)=62H。(2) 長調(diào)用(LCALL)指令:其無條件地調(diào)用首址為addr16處的子程序。執(zhí)行時(shí),把PC加3以獲得下一條指令的地址,將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時(shí)棧指針加2。然后將指

56、令第2和第3字節(jié)所提供的16位目標(biāo)地址,送入PC15PC0,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。所調(diào)用的子程序的首地址可以在64 KB范圍內(nèi)。本指令的操作不影響標(biāo)志位。 例如: 設(shè)(SP)=60H,(PC)= 0123H,子程序SUBRTN的首地址為0456H。 執(zhí)行指令為 LCALL SUBRTN執(zhí)行結(jié)果為 (PC)+3=0123H+3=0126H(PC)將(PC)壓入堆棧:26H壓入(SP)+1=61H,01H壓入(SP)+1=62H,此時(shí)(SP)=62H。(3) 子程序返回(RET)指令: 其執(zhí)行時(shí)表示結(jié)束子程序,返回調(diào)用指令A(yù)CALL或LCALL的下一條指令,繼續(xù)往下執(zhí)行。執(zhí)行時(shí)將棧頂?shù)臄?/p>

57、點(diǎn)的地址送入PC,并把棧指針減2。本指令的操作不影響標(biāo)志位。 例如: 設(shè)(SP)=62H,RAM中的(62H)=01H,(61H)=26H。 執(zhí)行指令為 RET執(zhí)行結(jié)果為 (SP)=60H,PC=0126H。(4) 中斷返回(RETI)指令: 它是執(zhí)行從中斷程序的返回,并清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。因此,中斷服務(wù)程序必須以RETI為結(jié)束指令。CPU執(zhí)行RETI指令后至少再執(zhí)行一條指令,才能響應(yīng)新的中斷請求。 例如: 設(shè)(SP)=62H,中斷時(shí)斷點(diǎn)是:0123H,RAM中的(62H)=01H,(61H)=23H。執(zhí)行指令為 RETI執(zhí)行結(jié)果為 (SP)=60H,PC=0123H所以程序回到斷點(diǎn)

58、0123H處繼續(xù)執(zhí)行。 3 條件轉(zhuǎn)移指令這類指令共有6條: JZ rel JNZ rel CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel 可以看出,這類指令都是以相對轉(zhuǎn)移的方式轉(zhuǎn)向目標(biāo)地址的。偏移量rel的計(jì)算方法是 rel = 目標(biāo)地址- PC的當(dāng)前值 偏移量rel是用補(bǔ)碼形式表示的帶符號的8位數(shù),因此,程序轉(zhuǎn)移的目標(biāo)地址為指令前128 B或指令后127 B。 這些指令執(zhí)行后不影響任何操作數(shù)和標(biāo)志位。 這6條指令可分為判零轉(zhuǎn)移指令和比較轉(zhuǎn)移指令兩部分。(1)判零轉(zhuǎn)移(JZ 、JNZ)指令 指令分別對

59、累加器A的內(nèi)容為全零或不為全零進(jìn)行判別并轉(zhuǎn)移,當(dāng)滿足各自條件時(shí),程序轉(zhuǎn)向指定的目標(biāo)地址執(zhí)行;當(dāng)不滿足各自條件時(shí),程序繼續(xù)往下執(zhí)行。例如: 設(shè)(A)= 01H。執(zhí)行指令為JZ LABEL1 ;因?yàn)椋ˋ) 0,程序繼續(xù)執(zhí)行 DEC A ;(A) 1= 00HJZ LABEL2 ;因?yàn)椋ˋ)= 00H,程序轉(zhuǎn)向標(biāo)號LABEL2指示的地址執(zhí)行 若第一條指令的地址為100,LABEL1和LABEL2的地址分別為50、150,則第一條和第三條指令的偏移量分別為: 第一條指令 (PC)+2=102,又根據(jù)102+rel1=50,所以rel1=50-102=-52,即-34H=-00110100B,它的補(bǔ)碼形

60、式為0CCH(11001100B)。 第三條指令(PC)+2=103+2=105,LABEL2=150,所以 rel2=150-105=45=2DH。(2) 比較轉(zhuǎn)移指令 這組指令共有4條:CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel其指令格式為:其指令格式為: CJNE (目的字節(jié))目的字節(jié)),(源字節(jié)源字節(jié)), rel其中源操作數(shù)與目的操作數(shù)的關(guān)系如表3-6所示表3-6CJNE指令中源操作數(shù)與目的操作數(shù)的關(guān)系 目的操作數(shù) 源操作數(shù)direct#dataARnRi 這組指令的功能是對指定的目的字節(jié)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論