《單片機(jī)原理、接口與C51應(yīng)用程序設(shè)計(jì)》課件第3章_第1頁
《單片機(jī)原理、接口與C51應(yīng)用程序設(shè)計(jì)》課件第3章_第2頁
《單片機(jī)原理、接口與C51應(yīng)用程序設(shè)計(jì)》課件第3章_第3頁
《單片機(jī)原理、接口與C51應(yīng)用程序設(shè)計(jì)》課件第3章_第4頁
《單片機(jī)原理、接口與C51應(yīng)用程序設(shè)計(jì)》課件第3章_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章MCS-51的匯編語言指令與程序設(shè)計(jì)3.1MCS-51指令系統(tǒng)概述3.2MCS-51指令系統(tǒng)的尋址方式3.3MCS-51指令系統(tǒng)的指令3.4偽指令3.5匯編語言程序設(shè)計(jì)舉例

3.1MCS-51指令系統(tǒng)概述

指令就是能完成特定功能的命令。計(jì)算機(jī)只能直接識別二進(jìn)制指令。采用二進(jìn)制指令的計(jì)算機(jī)語言稱為機(jī)器語言。由于機(jī)器語言不方便人們識別、記憶和使用,因此給每條機(jī)器語言指令賦予一個助記符,這就是匯編語言指令。匯編語言指令是機(jī)器語言指令的符號化形式,它和機(jī)器語言之間是一一對應(yīng)的,對于不同的計(jì)算機(jī),匯編語言是不一樣的。

指令系統(tǒng)是指CPU所能執(zhí)行的各種指令的集合。MCS-51單片機(jī)是8位機(jī),可以識別28=256種數(shù)據(jù)和代碼,實(shí)際中有255種操作碼(代碼A5H無對應(yīng)指令),對應(yīng)的指令系統(tǒng)可分為5大類,共計(jì)111條:從存儲時所占的存儲器空間的大小上來看,單字節(jié)49條,雙字節(jié)46條,三字節(jié)16條;從執(zhí)行時間上看,指令的運(yùn)行時間用機(jī)器周期度量,其中單周期指令64條,雙周期指令45條,4周期指令2條(MUL和DIV)。在所有的指令中,乘、除法指令是單字節(jié)4周期的,所以指令的字節(jié)數(shù)與指令周期不是對等的關(guān)系。

程序輸入時,可以采用二進(jìn)制的機(jī)器碼形式,也可以將其寫成十六進(jìn)制,還可以是指令的“助記符”方式——匯編格式。但是十六進(jìn)制的指令和匯編指令必須把它們“翻譯”為二進(jìn)制形式的“機(jī)器碼”后才能為CPU所識別和執(zhí)行。不論何種語言,指令從結(jié)構(gòu)上看均是“操作碼+操作數(shù)或操作數(shù)地址”的形式。

MCS-51的指令系統(tǒng)按指令功能分為五大類:數(shù)據(jù)傳送類、算術(shù)運(yùn)算類、邏輯運(yùn)算類、控制轉(zhuǎn)移類和位操作類。 3.2MCS-51指令系統(tǒng)的尋址方式

1.直接尋址

直接尋址是指指令中直接給出了操作數(shù)的地址,即指令本身含有操作數(shù)的(8位或16位)地址??梢灾苯訉ぶ返拇鎯ζ饔衅瑑?nèi)RAM區(qū)和特殊功能寄存器SFR區(qū)。

采用直接尋址的指令長度是兩個或三個字節(jié),其中第一個字節(jié)是操作碼,而操作數(shù)地址占1或2字節(jié)。當(dāng)訪問片內(nèi)RAM低128單元時,直接給出單元地址。當(dāng)訪問SFR時可以直接給出地址,也可以給出寄存器符號。例如,“MOVA,80H”可以寫成“MOVA,P0”,后者用SFR中寄存器的名字取代它的物理地址80H。程序設(shè)計(jì)中提倡用SFR中寄存器的名稱來代替直接地址。

2.立即尋址

立即尋址是指指令中直接給出操作數(shù)(稱為立即數(shù)),一般用于為寄存器或存儲器賦常數(shù)初值。例如,“MOVA,#30H”表示將8位立即數(shù)30H送累加器A中;“MOVDPTR,#2000H”表示將16位立即數(shù)2000H送DPTR寄存器中。在MCS-51匯編指令中,立即數(shù)前面必須加“#”號,以區(qū)別立即數(shù)和直接地址。

3.寄存器尋址

寄存器尋址是指以寄存器中的內(nèi)容為操作數(shù),寄存器作為操作數(shù)的地址。

寄存器尋址方式的尋址范圍包括工作寄存器R0~R7、累加器A、通用寄存器B、數(shù)據(jù)指針DPTR和程序狀態(tài)寄存器PSW的進(jìn)位標(biāo)示位Cy等。需要注意的是,在使用工作寄存器時,首先要通過程序狀態(tài)寄存器PSW的RS1RS0來選擇當(dāng)前寄存器組。

4.寄存器間接尋址

寄存器間接尋址是指以指令中給出的寄存器的內(nèi)容作為操作數(shù)的地址。MCS-51的匯編語言指令中,在寄存器前面加上符號“@”來表示寄存器間接尋址。例如,“MOVA,@R0”,設(shè)指令執(zhí)行前A中的值為00H,R0中的值為30H,存儲器單元內(nèi)容如圖3.1所示。由于寄存器R0的內(nèi)容30H是操作數(shù)的地址,而30H單元中的值為48H,所以執(zhí)行指令后,A中的值就變成48H。圖3.1寄存器間接尋址示意圖

5.變址尋址

變址尋址是指將基址寄存器(DPTR或PC)與變址寄存器(A)的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。例如,“MOVCA,@A+DPTR”表示將累加器A和寄存器DPTR的內(nèi)容相加,相加結(jié)果作為操作數(shù)的地址,再將該地址中的內(nèi)容取出來送到累加器A中。

6.相對尋址

相對尋址是指將指令中的地址偏移量與程序計(jì)數(shù)器PC的當(dāng)前值相加,其結(jié)果作為跳轉(zhuǎn)指令的目的地址。例如,指令“SJMP21H”表示將21H與PC當(dāng)前的內(nèi)容相加,結(jié)果再送回PC中,成為下一條將要執(zhí)行指令的地址。設(shè)指令“SJMP21H”存放在2000H處,當(dāng)執(zhí)行到該指令時,先從2000H和2001H單元取出指令,PC自動變?yōu)?002H,再把PC的內(nèi)容與操作數(shù)21H相加,形成目標(biāo)地址2023H,送回PC,使程序跳轉(zhuǎn)到2023H單元繼續(xù)執(zhí)行。在使用相對尋址時需要注意下列兩點(diǎn):

(1)程序計(jì)數(shù)器PC的當(dāng)前值是指取完指令之后的值(存放操作數(shù)的下一單元),它等于存放轉(zhuǎn)移指令的入口地址加上轉(zhuǎn)移指令所占的字節(jié)數(shù),所以目標(biāo)地址的計(jì)算式為:目標(biāo)地址=轉(zhuǎn)移指令的入口地址+轉(zhuǎn)移指令所占的字節(jié)數(shù)+偏移量。

(2)指令中偏移量為8位有符號數(shù),以補(bǔ)碼形式表示,所以控制程序轉(zhuǎn)移的地址范圍為-128~+127,負(fù)表示向前轉(zhuǎn)移,正表示向后跳轉(zhuǎn)。

7.位尋址

MCS-51單片機(jī)中,操作數(shù)不僅可以按字節(jié)進(jìn)行操作,也可以按位進(jìn)行操作。當(dāng)把某一位作為操作數(shù)時,這個操作數(shù)的地址稱為位地址。位尋址就是按位尋找操作數(shù)或操作數(shù)地址的尋址方式。前述6種尋址方式都是按字節(jié)進(jìn)行的尋址操作。

位尋址區(qū)包括片內(nèi)RAM中的兩個區(qū)域:一個是片內(nèi)RAM的位尋址區(qū),地址范圍是20H~2FH,共占16個RAM單元,位地址為00H~7FH;另一個是有位地址的特殊功能寄存器SFR,在所有21個SFR中有11個寄存器可以位尋址。例如,指令“SETB20H”表示將位地址為20H的位置1。同字節(jié)尋址中的直接尋址一樣,為了增加程序的可讀性,凡SFR中的位地址都可以使用符號地址來替代。例如,指令“SETBP0.1”與“SETB81H”均表示將P0.1口置1。

以上介紹的7種尋址方式的匯總與比較如表3.1所示。表3.1MCS-51的尋址方式及尋址空間

3.3MCS-51指令系統(tǒng)的指令

為了方便指令的學(xué)習(xí),下面先說明指令中用到的符號的意義。

(1)?Rn和Ri:表示工作寄存器組的8個通用寄存器,n的取值為0~7,表示R0~R7中的一個,i的取值為0和l,表示R0和R1兩個寄存器中的一個。

(2)?direct:直接地址,片內(nèi)RAM的8位地址。

(3)?#data和?#datal6:包含在指令中的8位或16位常數(shù)。

(4)?addr11和addr16:表示11位或16位直接地址。

(5)?rel:相對尋址中以補(bǔ)碼形式表示的8位偏移量,取值范圍為-128~+127。

(6)?DPTR:數(shù)據(jù)指針,可用作16位的地址寄存器。

(7)?bit:片內(nèi)RAM或SFR中直接尋址的位地址。

(8)?Cy:PSW中的進(jìn)位標(biāo)志或進(jìn)位位。

(9)?A和B:表示累加器A和寄存器B。

(10)?C:位運(yùn)算中的累加器。

(11)?(X):X中的內(nèi)容。

(12)?((X)):由X間接尋址的單元中的內(nèi)容。

(13)?@:寄存器間接尋址或變址尋址的前綴。

(14)?/:位地址的前綴標(biāo)志,表示對該位操作數(shù)取反,如/bit。

(15)?←:表示將箭頭右邊的內(nèi)容傳送到左邊。

(16)?$:當(dāng)前指令的地址。

MCS-51指令的書寫格式為:

標(biāo)號:操作碼操作數(shù)或操作數(shù)地址1,操作數(shù)或操作數(shù)地址2;注釋

3.3.1數(shù)據(jù)傳送指令

MCS-51單片機(jī)數(shù)據(jù)傳送指令的匯編指令格式為

操作碼<目的操作數(shù)>,<源操作數(shù)>

1.內(nèi)部數(shù)據(jù)傳送指令

內(nèi)部數(shù)據(jù)傳送指令使用助記符MOV,完成片內(nèi)數(shù)據(jù)存儲器RAM之間以及片內(nèi)數(shù)據(jù)存儲器與累加器A之間的數(shù)據(jù)傳送。此指令把16位常數(shù)裝入數(shù)據(jù)指針DPTR,即數(shù)據(jù)高八位送入DPH寄存器,數(shù)據(jù)低八位送入DPL寄存器。

使用內(nèi)部數(shù)據(jù)傳送指令時,可以根據(jù)實(shí)際情況選用恰當(dāng)?shù)膶ぶ贩绞?。對于上面給出的傳送指令,Intel公司在設(shè)計(jì)MCS-51的硬件時就已經(jīng)確定下來,編程人員只能像查字典一樣去查找、使用,不能根據(jù)主觀意愿去“創(chuàng)造”指令。使用內(nèi)部數(shù)據(jù)傳送指令時應(yīng)注意:一條指令中不能同時出現(xiàn)兩個工作寄存器;間址寄存器只能使用R0、R1;SFR區(qū)只能直接尋址,不能用寄存器間接尋址。內(nèi)部數(shù)據(jù)傳送指令的組合關(guān)系可用圖3.2來表示。圖3.2內(nèi)部數(shù)據(jù)傳送指令的組合

2.外部數(shù)據(jù)存儲器傳送指令

外部數(shù)據(jù)存儲器傳送指令完成片外數(shù)據(jù)存儲器RAM與累加器A之間的數(shù)據(jù)傳送,使用MOVX作為助記符,片外數(shù)據(jù)存儲器只能采用寄存器間接尋址。外部數(shù)據(jù)存儲器傳送指令MOVX共有下列四條:

MOVXA,@DPTR ;A←(DPTR)

MOVX@DPTR,A ;(DPTR)←A

MOVXA,@Ri ;A←(Ri)

MOVX@Ri,A ;(Ri)←A

以DPTR作16位數(shù)據(jù)指針,可尋片外64KB的RAM空間,以Ri作8位數(shù)據(jù)指針,可尋片外256B的RAM空間。外部RAM只能通過累加器A進(jìn)行數(shù)據(jù)傳送。

3.程序存儲器傳送指令

程序存儲器傳送指令實(shí)現(xiàn)片外程序存儲器ROM與累加器A之間的數(shù)據(jù)傳送,使用MOVC作為助記符。片外程序存儲器只能用變址尋址方式。程序存儲器傳送指令MOVC有下列兩條:

MOVCA,@A+DPTR ;A←(A+DPTR)

MOVCA,@A+PC ;PC←PC+1,A←(A+PC)

這兩條指令通常用于訪問表格數(shù)據(jù),因此也稱為查表指令。第一條指令中,用DPTR作為基地址。使用前,先將數(shù)據(jù)表的首地址送入DPTR中,累加器A作為偏移量,由兩者數(shù)據(jù)相加得到待查的表中數(shù)據(jù)地址并取出,查找范圍為64KB。第二條指令以程序計(jì)數(shù)器PC為基地址,但這里的PC值是執(zhí)行完“MOVCA,@A+PC”后的值,即PC=PC+1,而不是當(dāng)前的PC,查找范圍為當(dāng)前PC值之后256B。

4.數(shù)據(jù)交換指令

數(shù)據(jù)交換指令實(shí)現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送,包括字節(jié)交換和半字節(jié)交換兩種形式。

(1)字節(jié)交換指令:

XCHA,Rn ;A?Rn

XCHA,@Ri ;A?(Ri)

XCHA,direct ;A?direct

這組指令的功能是將累加器A與源操作數(shù)的字節(jié)內(nèi)容互換。

(2)半字節(jié)交換指令:

XCHDA,@Ri;A0~A3?(Ri)0~A3

該指令的功能是將Ri間接尋址單元的低4位內(nèi)容與累加器A的低4位內(nèi)容互換,而它們的高4位內(nèi)容均不變。

SWAPA ;A4~A7?A0~A3

該指令的功能是將累加器A中的高、低4位互換。

5.堆棧操作指令

堆棧是在片內(nèi)RAM中按“先進(jìn)后出”原則設(shè)置的專用存儲區(qū)。在MCS-51單片機(jī)中,數(shù)據(jù)的入棧和出棧由堆棧指針SP來管理,SP總是指向棧頂。堆棧操作有下列兩條指令:

PUSHdirect;(SP)←(SP)+1,((SP))←(direct)

POPdirect;(direct)←((SP)),(SP)←(SP)-1入棧(PUSH)指令執(zhí)行后堆棧指針SP上移一個單元,指向棧頂上一個空單元,將直接地址direct單元中的內(nèi)容送入SP所指示的堆棧單元。

出棧(POP)指令將堆棧指針SP所指向的片內(nèi)RAM中棧頂?shù)膬?nèi)容送入直接地址direct中,然后堆棧指針下移一個單元,繼續(xù)指向堆棧的棧頂。

堆棧操作必須是字節(jié)操作,且只能直接尋址。

堆棧是用戶自己設(shè)定的片內(nèi)RAM中的一塊專用存儲區(qū),通常用于臨時保護(hù)數(shù)據(jù)及程序調(diào)用時保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場。堆棧指針默認(rèn)指向07H,但這屬于工作寄存器區(qū)。不能開辟堆棧,堆棧一般開辟在片內(nèi)RAM的用戶RAM區(qū)(30H~7FH)。使用時一定先設(shè)置堆棧指針,以適應(yīng)具體編程的需要。3.3.2算術(shù)運(yùn)算指令

1.加法指令

ADDA,Rn ;(A)←(A)+(Rn)

ADDA,direct ;(A)←(A)+(direct)

ADDA,@Ri ;(A)←(A)+((Ri))

ADDA,#data ;(A)←(A)+data

這組指令的功能是將源操作數(shù)與目的累加器A中的值相加,相加的結(jié)果仍存放在A中。源操作數(shù)可以是Rn、Direct、@Ri或立即數(shù),目的操作數(shù)是累加器A。

2.帶進(jìn)位加法指令

ADDCA,Rn ;(A)←(A)+(Rn)+(Cy)

ADDCA,direct ;(A)←(A)+(direct)+(Cy)

ADDCA,@Ri ;(A)←(A)+((Ri))+(Cy)

ADDCA,#data ;(A)←(A)+data+(Cy)

這組指令的功能是將源操作數(shù)與目的累加器A中的值和當(dāng)前進(jìn)位標(biāo)志Cy的內(nèi)容相加,相加的結(jié)果仍存放在A中。其用法除考慮Cy之外,其余與ADD一樣。Cy是下一位進(jìn)上來的,在計(jì)算的末尾。

3.自加1指令

INC Rn ;(Rn)←(Rn)+1

INCdirect ;(direct)←(direct)+1

INC@Ri ;((Ri))←((Ri))+1

INC A ;(A)←(A)+l

INCDPTR ;(DPTR)←(DPTR)+1

這組指令的功能是指令中變量的值自加1,且不影響各個標(biāo)志位。

4.帶借位減法指令

SUBB A,Rn ;(A)←(A)-(Rn)-(Cy)

SUBB A,direct ;(A)←(A)-(direct)-(Cy)

SUBB A,@Ri ;(A)←(A)-(Ri)-(Cy)

SUBB A,#dala ;(A)←(A)-data-(Cy)

帶借位減法指令的功能是從A中減去指定的變量和進(jìn)位標(biāo)志位Cy,結(jié)果存入A中。

5.自減1指令

DEC Rn ;(Rn)←(Rn)-1

DEC direct ;(direct)←(direct)-1

DEC @Ri ;((Ri))←((Ri))-1

DEC A ;(A)←(A)-1

這組指令的功能是指定的變量自減1。

6.?BCD碼調(diào)整指令

DAA

指令“DAA”只能跟在ADD或ADDC加法指令后面,將A中的二進(jìn)制碼自動調(diào)整為8421BCD碼,用于實(shí)現(xiàn)BCD碼的加法運(yùn)算。

調(diào)整規(guī)則為:

(1)若累加器A的低4位大于9(A~F),或者輔助進(jìn)位標(biāo)志位Ac=1,則累加器A的內(nèi)容加06H。

(2)若累加器A的高4位大于9(A~F),或進(jìn)位標(biāo)志位Cy=1,則累加器A的內(nèi)容加60H。

調(diào)整的實(shí)質(zhì)是將十六進(jìn)制的加法運(yùn)算轉(zhuǎn)換成十進(jìn)制。

7.乘法和除法指令

MULAB;A×B=BA

DIVAB;A÷B=A…B

這是MCS-51單片機(jī)唯一的一類單字節(jié)4周期指令,它的運(yùn)行時間相當(dāng)于4條加法指令的運(yùn)行時間。在乘法指令中,當(dāng)積超過255時,OV等于1,積的高8位存放在B中,低8位存放在A中,否則,積只放在A中;在除法指令中,當(dāng)B為0時OV等于1,表示除數(shù)為0,除法無意義。3.3.3邏輯運(yùn)算指令

邏輯運(yùn)算指令有24條,包括邏輯與、邏輯或、邏輯異或、清0、取反、循環(huán)移位等操作。

1.邏輯與指令

ANLA,Rn ;(A)←(A)^(Rn)

ANLA,direct ;(A)←(A)

(direct)

ANLA,@Ri ;(A)←(A)

((Ri))

ANLA,#data ;(A)←(A)

data

ANLdirect,A ;(direct)←(direct)

(A)

ANLdirect,#data ;(direct)←(direct)

(data)

2.邏輯或指令

ORLA,Rn ;(A)←(A)

(Rn)

ORLA,direct ;(A)←(A)

(direct)

ORLA,@Ri ;(A)←(A)

((Ri))

ORLA,#data ;(A)←(A)

data

ORLdirect,A ;(direct)←(direct)

(A)

ORLdirect,#data ;(direct)←(direct)

(data)

3.邏輯異或指令

XRLA,Rn ;(A)←(A)(Rn)

XRLA,direct ;(A)←(A)(direct)

XRLA,@Ri ;(A)←(A)((Ri))

XRLA,#data ;(A)←(A)data

XRLdirect,A ;(direct)←(direct)(A)

XRLdirect,#data ;(direct)←(direct)(data)

4.清零和取反指令

CLRA ;A←0

CPLA ;A←/A

MCS-51系統(tǒng)中只能對累加器A清零和取反。

5.循環(huán)移位指令

(1)?8位循環(huán)指令:

RLA ;A中的值循環(huán)左移一位

RRA ;A中的值循環(huán)右移一位

(2)?9位循環(huán)指令:

RLCA ;帶Cy循環(huán)左移一位

RRCA ;帶Cy循環(huán)右移一位

3.3.4控制轉(zhuǎn)移指令

控制轉(zhuǎn)移指令用于改變程序計(jì)數(shù)器PC值,以控制程序走向,其作用區(qū)域是程序存儲器空間??刂妻D(zhuǎn)移指令分為無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、調(diào)用與返回指令及空操作指令等。

1.無條件轉(zhuǎn)移指令

無條件轉(zhuǎn)移指令實(shí)現(xiàn)程序無條件地轉(zhuǎn)移到指定的目標(biāo)地址去執(zhí)行。無條件轉(zhuǎn)移指令包括長轉(zhuǎn)移指令、絕對轉(zhuǎn)移指令、短轉(zhuǎn)移指令和間接轉(zhuǎn)移指令。

(1)長轉(zhuǎn)移指令:

LJMPaddr16;(PC)←addr16

程序能跳轉(zhuǎn)到addr16指定的64KB程序存儲器空間的任何地址處。

(2)絕對轉(zhuǎn)移指令:

AJMPaddr11;(PC)←(PC)+2,(PC10~0)←addr11

這是一條雙字節(jié)指令,執(zhí)行該指令時先將PC加2,使PC指向下一條指令,然后把a(bǔ)ddr11送入PC10~PC0,PC15~PC11保持不變,程序轉(zhuǎn)移范圍為2KB。

MCS-51的ROM是以2KB為一頁來劃分的,這樣4KB的ROM劃分成2頁,64KB的ROM劃分成32頁。在執(zhí)行AJMP指令時,PC的高5位決定了ROM中的頁地址,而AJMP指令的低11位地址用來選擇頁內(nèi)地址。轉(zhuǎn)移目標(biāo)必須與AJMP下一條指令的第一個字節(jié)在同一個2KB范圍內(nèi),否則轉(zhuǎn)移將會出現(xiàn)錯誤。AJMP指令用來實(shí)現(xiàn)同一頁內(nèi)2KB范圍的轉(zhuǎn)移。

(3)短轉(zhuǎn)移指令:

SJMPrel;(PC)←(PC)+2,(PC)←(PC)+rel

這也是一條雙字節(jié)指令,執(zhí)行該指令時先將PC加2,使PC指向下一條指令,然后PC值加上偏移量rel,計(jì)算出轉(zhuǎn)移地址。轉(zhuǎn)移范圍為-128B~+127B,負(fù)數(shù)表示向后轉(zhuǎn)移。

(4)間接轉(zhuǎn)移指令:

JMP@A+DPTR;(PC)←(A)+(DPTR)

這是一條單字節(jié)指令,轉(zhuǎn)移目標(biāo)的地址是A中8位無符號數(shù)和16位數(shù)據(jù)指針DPTR相加的結(jié)果。

2.條件轉(zhuǎn)移指令

與無條件轉(zhuǎn)移指令不同,條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件時才執(zhí)行轉(zhuǎn)移,否則程序順序執(zhí)行。轉(zhuǎn)移范圍是以下一條指令地址為中心的-128B~+127B范圍內(nèi)。

(1)累加器判零轉(zhuǎn)移指令:

JZ rel ;若(A)=0,則(PC)=(PC+2)+rel

;若(A)≠0,則(PC)=(PC)+2

JNZrel ;若(A)≠0,則(PC)=(PC+2)+rel

;若(A)=0,則(PC)=(PC)+2

(2)比較轉(zhuǎn)移指令:

CJNEA,direct,rel

CJNEA,#data,rel

CJNERn,#data,rel

CJNE@Ri,#data,rel

這是一個3字節(jié)指令,用于比較源操作數(shù)和目的操作數(shù),不相等則轉(zhuǎn)移,相等則順序繼續(xù)執(zhí)行下一條指令。如果目的操作數(shù)小于源字節(jié),則Cy置1,否則Cy清0。具體操作過程為:

(目的字節(jié))-(源字節(jié))>0,PC+3+rel→PC,Cy=0

(目的字節(jié))-(源字節(jié))<0,PC+3+rel→PC,Cy=1

(目的字節(jié))-(源字節(jié))=0,PC+3→PC

(3)減1不為0轉(zhuǎn)移指令:

DJNZRn,rel;(Rn)-1,若(Rn)=0,則(PC)←(PC)+2;若(Rn)≠0,則(PC)←(PC)+2+rel

DJNZdirect,rel

這組指令每執(zhí)行一次,就將指定的Rn或direct的內(nèi)容減1,再判別其內(nèi)容是否為0。若不為0,轉(zhuǎn)向目標(biāo)地址;若為0,程序順序執(zhí)行。

3.調(diào)用與返回指令

調(diào)用與返回指令包括2條子程序調(diào)用指令和2條返回指令。

(1)長調(diào)用指令:

指令格式:

LCALLaddr16“LCALLaddr16”指令可調(diào)用64KB范圍內(nèi)的子程序。“ACALLaddr11”的調(diào)用范圍是2KB,用法與AJMP類似,調(diào)用范圍必須與AJMP下一條指令的第一個字節(jié)在同一個

2KB范圍內(nèi)。

(3)子程序返回指令:

格式:

RET

操作:

PC15~8←(SP),SP←SP-1;

PC7~0←(SP),SP←SP-1;

指令執(zhí)行時將子程序調(diào)用時入棧的地址出棧,第一次出棧的值送給PC的高8位,第二次出棧的值送給PC的低8位。

(4)中斷序返回指令:

格式:

RETI

操作:

PC15~8←(SP),SP←SP-1;

PC7~0←(SP),SP←SP-1;

RETI與RET的區(qū)別在于返回主程序后,RETI還要清除相應(yīng)的中斷優(yōu)先級狀態(tài)位,使系統(tǒng)響應(yīng)低優(yōu)先級的中斷。

4.空操作指令

NOP;PC←PC+1

CPU不執(zhí)行任何實(shí)際操作,只是消耗1個機(jī)器周期的時間,常用于時間的延遲。3.3.5位操作指令

MCS-51單片機(jī)內(nèi)有一個位處理機(jī),能完成對位地址空間的操作。位操作是針對片內(nèi)RAM的位尋址區(qū)和11個可位尋址的SFR而言的。

1.位傳送指令

MOVC,bit ;(C)←(bit)

MOVbit,C ;(bit)←(C)

2.位置位和位清零指令

CLRC ;(Cy)←0

CLRbit ;(bit)←0

SETBC ;(Cy)←1

SETBbit ;(bit)←1

3.位邏輯運(yùn)算指令

(1)位與:

ANLC,bit ;C←C∧(bit)

ANLC,/bit ;C←C∧/(bit)

(2)位或:

ORLC,bit ;C←C∨(bit)

ORLC,/bit ;C←C∨/(bit)

(3)位取反:

CPLC ;C←/C

CPLbit ;bit←/(bit)

4.位控制轉(zhuǎn)移指令

位控制轉(zhuǎn)移指令包括以Cy內(nèi)容為條件的轉(zhuǎn)移指令和以位地址內(nèi)容為條件的轉(zhuǎn)移指令,共5條。

(1)以Cy內(nèi)容為條件的轉(zhuǎn)移指令:

JCrel ;若Cy=1,則PC←PC+2+rel(跳轉(zhuǎn));若Cy=0,則PC←PC+2(順序執(zhí)行)

JNCrel ;若Cy=0,則PC←PC+2+rel(跳轉(zhuǎn));若Cy=1,則PC←PC+2(順序執(zhí)行)

(2)以位地址內(nèi)容為條件的轉(zhuǎn)移指令:

JBbit,rel;若(bit)=1,則PC←PC+3+rel(跳轉(zhuǎn));若(bit)=0,則PC+3→PC(順序執(zhí)行)

JNBbit,rel?;若(bit)=0,則PC←PC+3+rel(跳轉(zhuǎn));若(bit)=1,則PC+3→PC(順序執(zhí)行)

JBCbit,rel;若(bit)=1,則PC←PC+3+rel(跳轉(zhuǎn)),bit←0;若(bit)=0,則PC+3→PC(順序執(zhí)行) 3.4偽指令

1.設(shè)置起始地址偽指令

格式:

ORG16位的地址

ORG(Origin)偽指令放在一段源程序或數(shù)據(jù)前面,用于規(guī)定以下程序塊或數(shù)據(jù)塊存放的起始位置。一般源程序的開始都要使用ORG來設(shè)置存放程序的起始地址,若沒有,則首地址為0000H。不同程序段

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論