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

下載本文檔

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

文檔簡介

第三章MCS-51單片機(jī)指令系統(tǒng)1、指令的格式。2、尋址方式。3、分類指令。3.1

概述3.2

尋址方式本章主要內(nèi)容3.3

MCS-51單片機(jī)指令系統(tǒng)《單片機(jī)原理及應(yīng)用》

本節(jié)主要論述指令格式、指令的三種表示形式、指令字節(jié)數(shù)、指令分類和指令系統(tǒng)綜述等五個(gè)問題。3.1

概述

標(biāo)號(hào)又稱為指令地址符號(hào),一般由1-6個(gè)符組成,以字母開頭的字母數(shù)字串。一、指令格式[標(biāo)號(hào)]:操作碼[操作數(shù)][;注釋]注意:方括號(hào)是可選項(xiàng)。

操作碼用MCS-51單片機(jī)所規(guī)定的助記符來表示,它規(guī)定指令進(jìn)行何種操作。

操作數(shù)是指令操作的對(duì)象,分為目的操作數(shù)和源操作數(shù)。

注釋是對(duì)該指令作用或功能的說明。二、指令的三種表達(dá)形式1、指令的二進(jìn)制形式

2、指令的十六進(jìn)制形式3、指令的助記符形式

如果累加器A中已有一個(gè)加數(shù)20,那么能夠完成20+6并把結(jié)果送入累加器A的加法指令:

二進(jìn)制形式:

0011100000000110B

十六進(jìn)制形式:

3806H

助記符形式:

ADD

A,#06H;A←A+06H例如1、單字節(jié)指令(49條)

單字節(jié)指令只有一個(gè)字節(jié)。1)無操作數(shù)單節(jié)指令

只有操作碼字段,操作數(shù)隱含在操作碼中

例如:INCDPTR

指令碼:10100011三、指令的字節(jié)數(shù)

2)含有操作數(shù)寄存器號(hào)的單字節(jié)指令例如:八位數(shù)傳送指令

MOV

A,Rn其中,n的取值范圍為0~7。指令碼:11101rrr

這類指令的指令碼有操作碼字段和專門用來指示操作數(shù)所在寄存器號(hào)的字段組成。

雙字節(jié)指令含有兩個(gè)字,操作碼字節(jié)在前,操作數(shù)字節(jié)在后。

例如:八位數(shù)傳送指令

MOV

A,#data;A←data

指令碼:74××H2、雙字節(jié)指令(46條)指令碼的第一字節(jié)為操作碼,第二、三字節(jié)為操作數(shù)或操作數(shù)地址。3、三字節(jié)指令(16條)例如:邏輯與操作指令

ANL

direct,#data指令碼:53××

××

H1、指令分類2)算術(shù)運(yùn)算指令3)邏輯運(yùn)算指令1)數(shù)據(jù)傳送指令4)控制轉(zhuǎn)移和位操作指令四、指令的分類及符號(hào)說明1)Rn

:表示當(dāng)前選中的寄存器區(qū)的8個(gè)工作寄存器(n=0~7)中的一個(gè)。2)@Ri:表示寄存器間接尋址,Ri只能是R0或R1。3)#data:8位立即數(shù),實(shí)際使用時(shí)data應(yīng)是00H~0FFH中的一個(gè)。4)#data16:16位立即數(shù)。2、符號(hào)的說明5)direct:表示8位內(nèi)部數(shù)據(jù)存儲(chǔ)器單

元的地址。6)

addr16:表示16位的目的地址。7)addr11:表示11位的目的地址。8)rel

:表示8位帶符號(hào)地址偏移量。9)@DPTR

:表示以DPTR為數(shù)據(jù)指針的間接尋址,用于對(duì)外部64KRAM/ROM尋址。10)bit

:表示內(nèi)部RAM(包括專用寄存器)中

的直接尋址位。13)@:為間址寄存器或基址寄存器的前

綴。如@Ri,@A+PC,@A+DPTR。14)/:位操作數(shù)的前綴,表示對(duì)該位操作

數(shù)取反。如/bit.15)$:當(dāng)前指令的地址。返回

MCS-51單片機(jī)的指令系統(tǒng)共有七種尋址方式。3.2尋址方式

特點(diǎn):操作數(shù)以寄存器的名字表示。尋址范圍:工作寄存器R0~R7、A、B、DPTR。一、寄存器尋址例如:R0(35H)A結(jié)果A=35HMOVA,R0;AR0特點(diǎn):指令直接給出操作數(shù)。操作數(shù)字前加“#”符號(hào)為前綴,以區(qū)別直接地址。#data或#data16,只能做源操作數(shù),常用于賦初值。二、立即尋址例如(1)MOVA,44H;A(44H)(2)MOVA,#44H;A44H(1)將片內(nèi)RAM中44H單元的內(nèi)容送累加器A,屬于直接尋址。(2)則是把44H這個(gè)數(shù)本身送到累加器A,屬于立即尋址。功能:特點(diǎn):直接給出操作數(shù)地址,直接地址常用8位二進(jìn)制地址。尋址范圍:只限于內(nèi)部RAM。內(nèi)部RAM的低128單元和SFR,SFR除以單元地址形式給出外,還以寄存器符號(hào)形式給出。直接尋址是訪問SFR的唯一方法。三、直接尋址功能:

將片內(nèi)RAM56H單元中的內(nèi)容34H送到累加器A中。例如:MOVA,56H;A(56H)34H片內(nèi)RAM

34H累加器A56H圖3.1指令傳遞特點(diǎn):操作數(shù)地址以寄存器名稱間接給出,以寄存器中的內(nèi)容作為操作數(shù)的地址。加標(biāo)識(shí)符@區(qū)別于寄存器尋址。MCS-51規(guī)定:只能以R0、R1和DPTR實(shí)現(xiàn)問址。在寄存器前加“@”符號(hào)作前綴。四、寄存器間接尋址(1)內(nèi)部RAM低128單元:只能使用R0、R1作間址寄存器,通用形式為@Ri(i=0,1)。尋址范圍:(2)外部RAM64KB:只能使用DPTR作間址寄存器,其形式為@DPTR。(3)外部RAM低256單元:一個(gè)特殊尋址區(qū),除可用DPTR作為間址寄存器尋址外,還可用R0或R1作間址寄存器尋址。(4)堆棧操作指令(PUSH和POP)也應(yīng)算作寄存器間接尋址,即以堆棧指針SP作間址寄存器的間接尋址方式。寄存器間接尋址指令不能用于尋址SFR。寄存器間接尋址是訪問外部RAM的唯一方法。MOVA,R0;A←R0MOVA,@R0;A←(R0)例如:R0=65H,(65H)=26H26H片內(nèi)RAMA

65H

圖3.2

R065H①②注意:@是它區(qū)別寄存器尋址的標(biāo)志。執(zhí)行①結(jié)果A=65H,執(zhí)行②結(jié)果A=26H。特點(diǎn):只出現(xiàn)在相對(duì)轉(zhuǎn)移指令中。五、相對(duì)尋址目的地址=指令地址+指令字節(jié)數(shù)+rel“rel”是一個(gè)8位帶符號(hào)二進(jìn)制補(bǔ)碼數(shù),最大范圍是-128~+127。2000

8026H

SJMP

rel;PC←PC+2+rel程序存儲(chǔ)器A圖3-3指令過程

PC

26H0000H2000H2001H

80H

26H××

××2028H

02H

20H

ALU2002H┆例如

特點(diǎn):訪問ROM,以DPTR或PC基址寄存器和累加器A變址寄存器的內(nèi)容和為地址,尋址該地址單元,讀取數(shù)據(jù)。常用于查表操作。尋址范圍:64KB的ROM六、變址尋址(1)MOVC

A,@A+PC

;A←(A+PC)(2)MOVC

A,@A+DPTR;A←(A+DPTR)執(zhí)行第一條時(shí)先使當(dāng)前PC值加1,然后把這個(gè)加1后的PC值和累加器A中的偏移量相加,作為操作數(shù)地址,從該地址中取出操作數(shù)送入A中。第二條過程與第一條指令類似。

已知:片外ROM的2006H單元中有一數(shù)34H,編寫程序用變址尋址方法把這個(gè)數(shù)送入A中,試進(jìn)行分析。例3.1

解:根據(jù)題目要求,基址可定為2000H,地址偏移量則為06H,程序如下:

MOV

DPTR,#2000H;DPTR←2000HMOV

A,#06H;A←06HMOVC

A,@A+DPTR;A←34H程序存儲(chǔ)器A

圖3.4

DPTR

00H0000H34H××2006HALU

如圖3.4所示,這里A具有雙重作用,在指令執(zhí)行前用來存放地址偏移量,指令執(zhí)行后為目的操作數(shù)。20

06H尋址范圍:對(duì)片內(nèi)RAM的位尋址區(qū)和11個(gè)可位尋址的SFR進(jìn)行尋址。七、位尋址當(dāng)把八位二進(jìn)制數(shù)中某一位作為操作數(shù)看待時(shí),這個(gè)操作數(shù)的地址就稱為位地址,對(duì)位地址尋址簡稱位尋址。

MOV30H,C

;30H是位尋址位地址

MOVA,30H

;

30H是直接尋址的字節(jié)地址

MOVC,ACC.7;Cy←ACC.7由上面指令可知,位尋址的位地址與直接尋址的字節(jié)地址形式完全一樣,主要由操作碼來區(qū)分。例如返回

這類指令的源操作數(shù)和目的操作數(shù)地址都在單片機(jī)內(nèi)部。

MOV

dest,

src3.3MCS-51單片機(jī)指令系統(tǒng)一、數(shù)據(jù)傳送指令1、內(nèi)部數(shù)據(jù)傳送指令(15條)MOVA,Rn

;ARnMOVA,direct;A(direct)MOVA,@Ri;A(Ri)MOVA,#data;Adata1)以A為目的操作數(shù)MOVRn

,A;

RnAMOVRn

,direct;Rn

(direct)MOVRn

,#data;Rndata2)以Rn為目的操作數(shù)MOVdirect,A;directAMOVdirect,Rn

;direct

RnMOVdirect1,direct2;direct1

(direct2)MOVdirect,@Ri

;direct(Ri)MOVdirect,#data;directdata3)以直接地址為目的操作數(shù)MOV@Ri

,A;(Ri)

AMOV@Ri

,direct;(Ri)(direct)MOV@Ri

,#data;(Ri)data4)以寄存器間接尋址為目的操作數(shù)

已知:R1=30H,試問執(zhí)行如下指令后累加器A、R7、30H、31H單元中內(nèi)容各是什么?

MOV

A,#40HMOV

R7,

#50HMOV

@R1,

#45HMOV31H,#48H例3.2執(zhí)行后,結(jié)果為:A=40H,R7=50H,(30H)=45H,(31H)=48H

已知:R0=20H、(21H)=54H、(22H)=55H、(30H)=56H,試問執(zhí)行如下指令后,結(jié)果A、40H、R2、20H、和P2口中的內(nèi)容各是什么?

MOVA,21HMOV40H,AMOVR2,22HMOV@R0,21HMOVP2,30H例3.3結(jié)果為:A=54H,(40H)=54H,R2=55H,(20H)=54H,P2=56H

已知:(30H)=12H、(31H)=13H、R0=30H、R1=31H,試問執(zhí)行以下指令后A、30H、31H和32H各是什么?

MOVA,@R0MOV@R1,AMOV@R0,#34HMOV32H,@R1執(zhí)行后,A=12H,(30H)=34H

,(31H)=12H

,(32H)=12H例3.4內(nèi)部數(shù)據(jù)傳送指令的小結(jié)

圖3.5內(nèi)部指令描述Direct直接尋址@Ri間址

Rn寄存器data立即數(shù)累加器A122321223MOV

DPTR,#data16

;DPTR←data16

1)十六位數(shù)據(jù)傳送指令2、外部數(shù)據(jù)傳送指令(7條)MOVC

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

A,@A+PC

;PC←PC+1,

;A←(A+PC)2)外部ROM的字節(jié)數(shù)指令

例3.5

已知片外2008H單元中有一個(gè)數(shù)為34H,試用以上二條指令各寫一個(gè)程序,把數(shù)送到片內(nèi)7FH單元中。解:①采用DPTR作為基址寄存器

ORG0000H

LJMP

START ORG0100HSTART: CLRA

;清空A

MOVDPTR,#2008H

;表起始值

MOVCA,@A+DPTR;把A與DPTR相加,

;結(jié)果A=34H MOV7FH,A

;結(jié)果(7FH)=34H SJMP$

;停止②采用PC作為基址寄存器

ORG

0000H

LJMP

MAIN

ORG

2000H

MAIN:MOV

A,#05H

;偏移量為05H,因?yàn)樵撝噶钫?/p>

;二個(gè)字節(jié)數(shù)

MOVCA,@A+PC

;首先將PC+1,則PC=2003,

;然后加05H,則PC指向2008單元

MOV7FH,A

;結(jié)果(7FH)=34H

SJMP$

;停止3)外部RAM的字節(jié)傳送指令

MOVXA,@Ri;A←(Ri) MOVX@Ri,A;A→(Ri) MOVXA,@DPTR;A←(DPTR) MOVX@DPTR,A;A→(DPTR)

已知外部RAM的60H單元中有一個(gè)數(shù)為30H,試編程把30H送到片外RAM的2000H單元中。

解:雖都是片外RAM的地址單元,但不能直接傳送,必須經(jīng)過累加器A的轉(zhuǎn)送,才能實(shí)現(xiàn)。ORG

1000HMOVR1,#60H;R1=60HMOVXA,@R1;A=30HMOVDPTR

,#2000H;DPTR=2000HMOVX@DPTR,A

;2000H←30HSJMP$;停止例3.63、數(shù)據(jù)交換指令(5條)

XCHD

A,@Ri

;A3~0

(Ri)3~0SWAPA;A7~4A3~0XCH

A,Rn

;ARnXCHA,direct;A(direct)XCH

A,@Ri

;A(Ri)已知R0=20H,(20H)=75H,A=3FH(1)XCHA,@R0

(2)XCHDA,@R0

(3)SWAPA

例3.7結(jié)果:A=75H,(20H)=3FH,R0=20H結(jié)果:A=35H,(20H)=7FH,R0=20H結(jié)果:A=0F3H

已知:片內(nèi)20H單元有一個(gè)數(shù)為30H,片外20H單元有一個(gè)數(shù)為03H,編程把二個(gè)數(shù)相互交換。解:例3.8ORG

0100HMOVR0,#20H ;R0←20HMOVXA,@R0 ;A←03HXCHA,@R0;A←30H,(20H)←03HMOVX@R0,A;30H→(20H)(外部RAM)SJMP$ ;停止4、堆棧操作指令(2條)PUSHdirect;SP←SP+1,(SP)←(direct)POPdirect;(SP)→direct,SP←SP-1第一條指令稱為壓棧指令,用于把direct為地址的操作數(shù)傳送到堆棧中去。第二條指令稱為出棧指令。MOVSP,#70H

;棧底首地址為70HPUSH

30H

;SP←SP+1,71H←XPUSH

40H

;SP←SP+1,72H←YPOP30H

;30H←Y,SP←SP-1=71HPOP

40H

;40H←X,SP←SP-1=70H例3.9

已知:(30H)=X,(40H)=Y,編程用堆棧指令把30H和40H單元中內(nèi)容相交換。1、加法指令(13條)ADD A,Rn

ADD A,directADD A,@RiADD A,#data二、算術(shù)運(yùn)算指令(24條)1)不帶進(jìn)位位(Cy)加法指令(4條)

試分析執(zhí)行如下指令后,累加器A和PSW中各標(biāo)志的變化情況如何?

MOV

A,#5AH ADDA,#6BH

例3.10A=01011010Bdata=01101011B

90107+)111000101B1CS1970CP

1AC圖3.6加法指令執(zhí)行過程ADDCA,

RnADDCA,

#dataADDCA,

directADDCA,

@Ri2)帶進(jìn)位位(Cy)加法指令(4條)

已知:A=8FH、R1=20H、(20H)=12H、(21H)=0FEH和Cy=1,試問CPU依次執(zhí)行以下指令后累加器A和Cy中的值是多少。

a.ADDCA,R1b.ADDCA,21H c.ADDCA,@R1d.ADDCA,#7FH

例3.11解:操作結(jié)果應(yīng)為:

a.A=0B0H,Cy=0b.A=8DH,Cy=1 c.A=0A2H,Cy=0d.A=0FH,Cy=1INC

A ;A←A+1INC

Rn ;Rn←Rn+1INC

direct ;(direct)←(direct)+1INC

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

DPTR ;DPTR←DPTR+13)加1指令(5條)已知:A=34H、R0=42H、(43H)=23H、DPTR=3020H,試問CPU執(zhí)行如下程序后A、R4、45H、R0、DPTR中的內(nèi)容各是什么?

INCA INCR0 INC43H INC@R0

INCDPTR例3.12解:由加1指令的規(guī)則,上述指令執(zhí)行后的的操作結(jié)果為:A=35H、R0=43H、(43H)=25H、DPTR=3021H。2、減法指令(8條)SUBBA,Rn

;A←A-Rn-CySUBBA,@Ri

;A←A-(Ri)-CySUBBA,direct ;A←A-(direct)-CySUBBA,#data ;A←A-data-Cy1)帶進(jìn)位位(Cy)減法指令(4條)試分析執(zhí)行下列指令后,累加器A和PSW中各標(biāo)志位狀態(tài)?

CLRC MOVA,#35H SUBBA,#0B6H

解:第一條指令用于清標(biāo)志位Cy;第二條指令是對(duì)被減數(shù)送累加器A中;第三條指令是進(jìn)行減法指令,結(jié)果為:A=7FH,PSW為:000

0011CyACF0Rs1Rs0OV━1P例3.13DECA

;A←A-1DECRn

;Rn←Rn-1DECdirect

;direct←(direct)-1DEC@Ri;(Ri)←(Ri)-12)減1指令(4條)

已知:A=10H、R1=3BH、R7=34H、(60H)=00H、(3BH)=0FFH,試分析,執(zhí)行如下程序后累加器A和PSW中各標(biāo)志位狀態(tài)?①DECA

②DEC@R1③DEC60H

④DECR7例3.14解:根據(jù)減1指令功能,結(jié)果為:①A=0FH,P=1②(3BH)=0FEH,

PSW不變③(60H)=0FFH,PSW不變④R7=33H,

PSW不變3、十進(jìn)制調(diào)整指令(1條)DAA對(duì)A中兩個(gè)壓縮BCD數(shù)相加之和調(diào)整為2位BCD碼數(shù)。1)只能用在對(duì)BCD碼數(shù)進(jìn)行ADD或ADDC操

作后使用。2)影響標(biāo)志位:有進(jìn)位時(shí)C=1。1)BCD加法特點(diǎn):

試編程實(shí)現(xiàn)44H+86H的BCD加法程序,并對(duì)其工作原理分析。解:相應(yīng)BCD加法程序?yàn)椋?/p>

MOVA,#44H ;A←44H

ADD

A,#86H ;A←44+86=0CAH DAA

;A←30H,Cy=1,AC=1 SJMP$

例3.15A=01000100Bdata=10000110B4486+)011010000B11010011000

0B011001010B130

110B低4位>9,加6調(diào)整高4位>9,加6調(diào)整圖3.7BCD加法過程注意:對(duì)于BCD減法

MCS-51單片機(jī)中沒有十進(jìn)制減法調(diào)整指令,因此,BCD減法運(yùn)算必須采用BCD補(bǔ)碼運(yùn)算法則。4、乘法和除法指令MUL

AB;BA

A×B

C=0積>255OV=1DIV

AB;A…B←

A÷B

C=0除數(shù)=0OV=1除數(shù)≠0OV=01)乘法指令2)除法指令1、與指令A(yù)NLA,RnANLA,@RiANLA,directANLA,#dataANLdirect,AANLdirect,#data;AA∧

Rn;AA∧(Ri);AA∧(direct);AA∧#data;direct(direct)∧A;direct(direct)∧#data三、邏輯運(yùn)算指令(20條)結(jié)果:將P1口鎖存器的0、3、4、7位內(nèi)容屏蔽,而其余位保持原值不變。例如常用ANL指令屏蔽某些不用位或保留某些位ANLP1,#01100110B2、或指令ORLA,Rn ;A←A∨RnORLA,direct ;A←A∨(direct)ORLA,@Ri ;A←A∨(Ri)ORLA,#data ;A←A∨dataORLdirect,A ;direct←(direct)∨AORLdirect,#data;direct←(direct)∨data結(jié)果:將P1口鎖存器的1、4、5位進(jìn)行置位,而其余位保持原值不變。常用ORL指令對(duì)某些位置位或保留某些位例如ORLP1,#00110010B

ANLA,#00011111B(#1FH)

ANLP1,#11100000B(#0E0H)

ORLP1,A例3.16:將累加器A的內(nèi)容送P1口的低5位,要求傳送時(shí)不影響P1口的高3位。MOVR0,AMOVA,R0XRLA,Rn ;A←A⊕RnXRLA,direct ;A←A⊕(direct)XRLA,@Ri ;A←A⊕(Ri)XRLA,#data ;A←A⊕dataXRLdirect,A ;direct←(direct)⊕AXRLdirect,#data;direct←(direct)⊕data3、異或指令結(jié)果:將P1口鎖存器的0、4、5位內(nèi)容取反,而其余位保持原值不變。常用XRL指令對(duì)某些位取反或保留某些位XRLP1,#00110001B例如CPLACLRA;AA;

A04、累加器清零和取反指令RLA;RRA;ARLCA

;RRCA;5、移位指令(4條)A7A0CyA7A0CyA7A0A7A0AAA

已知:M和M+1單元中有一個(gè)16位二進(jìn)制數(shù)(M為低8),編程將其擴(kuò)大到二倍(注意:該數(shù)最大可擴(kuò)大到65536)。

解:一個(gè)16位二進(jìn)制數(shù)擴(kuò)大到二倍就等于是把它進(jìn)行一次算術(shù)左移。由于MCS-51單元片機(jī)的移位指令都是二進(jìn)制8位的移位指令,因此16位數(shù)的移位指令必須用程序來實(shí)現(xiàn)。

算法為:

M

M+1

0例3.17ORG

0030HCLR

C ;清進(jìn)位標(biāo)志位MOV

R0,#M ;操作數(shù)低8位地址送R0MOV

A,@R0 ;A←操作數(shù)低8位RLC

A ;低8位操作數(shù)左移低位補(bǔ)0MOV@R0,A ;結(jié)果送回M單元,Cy中為最高位INC

R0 ;R0指向M+1單元MOV

A,@R0 ;A←操作數(shù)高8位RLCA ;高8位操作數(shù)左移并加上低位CyMOV@R0,A ;結(jié)果送回M+1單元SJMP

$ ;停止LJMP

addr16;PC←addr16AJMPaddr11;PC←PC+2,PC10~0←addr11SJMPrel

;PC←PC+2,PC←PC+relJMP@A+DPTR ;PC←A+DPTR四、控制轉(zhuǎn)移和位操作指令1、控制轉(zhuǎn)移指令(17條)1)無條件轉(zhuǎn)移指令MCS-51系列單片機(jī)可以在64KB地址范圍內(nèi)尋址,絕對(duì)轉(zhuǎn)移指令的轉(zhuǎn)移范圍只在PC當(dāng)前值所指的2KB地址范圍內(nèi)。①長轉(zhuǎn)移指令LJMPaddr16;PCaddr16三字節(jié)指令,不影響標(biāo)志位,可在64KB地址范圍內(nèi)無條件轉(zhuǎn)移。②絕對(duì)轉(zhuǎn)移指令二字節(jié)指令,可在2KB地址范圍內(nèi)轉(zhuǎn)移。AJMPaddr11;

PC

PC+2,PC10~0addr11③短轉(zhuǎn)移指令機(jī)器碼:80H

rel

本指令是一條雙字節(jié)雙周期指令,在PC內(nèi)容加2所指地址上,以rel:-128~+127為偏移量。SJMPrel;PCPC+2+rel

ORG

1000H1000H7401H

START:MOV

A,#01H ;字位碼初值送A1002HF8H

MOVR0,A ;暫存于R01003H90CF01H

LOOP:MOVDPTR,#0CF01H

1017H80rel

SJMP

START

;轉(zhuǎn)入START┋

SJMP

$

例3.18下列程序中,請(qǐng)計(jì)算SJMPSTART指令碼中的rel,并分析目標(biāo)地址的轉(zhuǎn)移范圍。a)地址偏移量rel的計(jì)算:

目標(biāo)轉(zhuǎn)移地址=源地址+2+rel

rel=目標(biāo)轉(zhuǎn)移地址-源地址-2

=1000H-1017H-2=-25

rel應(yīng)采用補(bǔ)碼表示,為此rel=[-25]補(bǔ)=E7H解:SJMP指令中地址偏移量是采用START符號(hào)表示的,指明指令執(zhí)行后轉(zhuǎn)入本程序開頭重新執(zhí)行。b)轉(zhuǎn)移地址范圍的確定:轉(zhuǎn)移地址通常以SJMP指令始址為參照點(diǎn),但實(shí)際的參照點(diǎn)是對(duì)PC+2,因rel的取值范圍是-128~+127,故可得到轉(zhuǎn)移地址的實(shí)際轉(zhuǎn)移范圍為-126~+129。

變址尋址轉(zhuǎn)移指令機(jī)器碼:73H該類指令是一條單字節(jié)雙周期無條件轉(zhuǎn)移指令。在64KB地址范圍內(nèi)無條件轉(zhuǎn)移。

JMP@A+DPTR;PCA+DPTRJZrel;

A=0

PCPC+2+rel

A≠0PCPC+2JNZrel;A≠0

PCPC+2+rel

A=0

PCPC+2①累加器A判零轉(zhuǎn)移(2條)2)條件轉(zhuǎn)移指令CJNEA,#data,rel ;不相等轉(zhuǎn)移

;#data=A,PC←PC+3,C←0 ;#data<A,PC←PC+3+rel,C←0 ;#data>A,PC←PC+3+rel,C←1CJNEA,direct,rel;不相等轉(zhuǎn)移

;若A=(direct),則PC←PC+3,C←0;若A>(direct),則PC←PC+3+rel,C←0;若A<(direct),則PC←PC+3+rel,C←1②不相等轉(zhuǎn)移(影響標(biāo)志位)CJNERn,#data,rel;不相等轉(zhuǎn)移

;若Rn=data,則PC←PC+3,C←0;若Rn>data,則PC←PC+3+rel,C←0;若Rn<data,則PC←PC+3+rel,C←1CJNE@Ri,#data,rel;不相等轉(zhuǎn)移

;若(Ri)=data,則PC←PC+3,C←0;若(Ri)>data,則PC←PC+3+rel,C←0;若(Ri)<data,則PC←PC+3+rel,C←1

ORG2000HCLRA

MOVR0,#30HLOOP0:CJNE@R0,#64H,LOOP1INCALOOP1:INCR0

CJNER0,#3FH,LOOP0SJMP

$例3.19在內(nèi)部RAM30H~3EH中找出值為100(64H)的單元有多少個(gè)?MOVR1,#0FHDJNZR1,LOOP0DJNZdirect,rel;(direct)←(direct)-1;若(direct)≠0,則PC←PC+3+rel;若(direct)=0,則PC←PC+3DJNZRn,rel ;Rn

←Rn-1 ;若Rn=0則PC←PC+2 ;若Rn≠0則PC←PC+2+rel③減一不為零轉(zhuǎn)移

ORG1000HMOVR0,#9CLRALOOP:ADDA,R0DJNZR0,LOOPSJMP$例3.20編程計(jì)算的值①調(diào)用指令(2條)ACALL

addr11;PC

←PC+2

;SP

←SP+1

;(SP)←PC7~0

;SP

←SP-1

;(SP)←

PC15~8

;PC10~0

addr11

a)短調(diào)用指令3)子程序調(diào)用和返回指令機(jī)器碼:a10a9a810001a7a6a5a4a3a2a1a0雙字節(jié)指令,不影響標(biāo)志位,在2KB地址范圍內(nèi)尋址,以調(diào)用子程序。b)長調(diào)用指令LCALLaddr16;PC←PC+3;SP←

SP+1,(SP)←PC7~0;SP←SP+1,(SP)←PC15~8;PC

←addr16三字節(jié)指令,在64KB地址范圍內(nèi)調(diào)用子程序。②返回指令(2條)PC15~8

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

←(SP),SP←SP-1a)子程序返回指令

RET調(diào)用子程序后必須返回主程序,因此,每種子程序的最后一條指令必須是返回指令RET。返回時(shí)完成將調(diào)子時(shí)壓入堆棧的斷點(diǎn)地址送回PC以恢復(fù)斷點(diǎn)功能。堆棧遵循“后進(jìn)先出”原則。b)中斷返回指令RETI中斷服務(wù)程序的最后一條指令后是中斷返回指令RETI。其恢復(fù)斷點(diǎn)的操作與返回指令RET相同。此條指令前必須將相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器清0。PC15~8

←(SP),SP←

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(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)論