微型計算機原理及其應用 第11章 湖南大學出版社_第1頁
微型計算機原理及其應用 第11章 湖南大學出版社_第2頁
微型計算機原理及其應用 第11章 湖南大學出版社_第3頁
微型計算機原理及其應用 第11章 湖南大學出版社_第4頁
微型計算機原理及其應用 第11章 湖南大學出版社_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第十一章

單片機指令系統(tǒng)本章內容尋址方式指令的分類、格式及符號說明各類指令的說明

掌握MCS-51指令系統(tǒng)的各種尋址方式掌握每條指令的格式、功能及用法掌握指令的操作過程中操作數(shù)的變化情況以及對標志位的影響學會正確選用指令完成簡單的程序設計學習目的

MCS-51指令系統(tǒng)共有111條指令,共255種操作代碼,11.1MCS-51指令系統(tǒng)簡介按功能劃分可分為五類:數(shù)據(jù)傳送指令(29條)

算術運算指令(24條)邏輯運算及轉移指令(24條)控制轉移指令(17條)位操作指令(17條)單字節(jié)指令(49條)雙字節(jié)指令(45條)三字節(jié)指令(17條)

按指令字節(jié)數(shù)劃分可分為三種:單機器周期指令(64條)雙機器周期指令(45條)四機器周期指令(2條)按指令的執(zhí)行時間劃分可分為三種:

指令的表示方法稱為指令格式。表達形式為:11.1.1

指令格式標號又稱為指令地址符號,一般由1-8個字符組成,是以字母開頭的字母數(shù)字串。[標號]:操作碼[操作數(shù)];[注釋]

操作碼

用MCS-51單片機所規(guī)定的助記符來表示,用來規(guī)定指令進行什么操作。

注釋是對指令作用或功能的說明,是方便閱讀而添加的解釋說明性文字,用分號“;”開頭。

操作數(shù)指出了指令的操作對象,它可以是一個具體的數(shù)據(jù),也可以是指出到哪里取得數(shù)據(jù)的地址或符號。在一條指令中可能沒有操作數(shù),也可能有多個操作數(shù)。Rn:當前選中的工作寄存器區(qū)的8個工作寄存器R0~R7中的一個(n=0~7)Ri:可用于寄存器間接尋址的工作寄存器

R0、R1(i

=

0,1)Direct:8位直接地址??梢允莾炔縍AM的低128個單元地址;或是特殊功能存器地址。11.1.2

指令中常用符號說明#data:8位立即數(shù)。#data16:16位立即數(shù)。rel:8位補碼數(shù)的地址偏移量。bit:位地址,表示片內RAM或特殊功能寄存器中的直接尋址位。addr11:11位目的地址。addr16:16位目的地址。@:間接尋址寄存器前綴。$:

當前指令的地址。X:

由X指定的地址單元或寄存器中的內容(X):以X指定的地址單元或寄存器中的內容作為 地址的存儲單元的內容?!?/p>

將箭頭左邊的內容送到箭頭右邊的單元中。/:

位操作數(shù)的前綴,表示對該位操作數(shù)取反。

MCS-51指令系統(tǒng)共有七種尋址方式:

立即尋址直接尋址寄存器尋址寄存器間接尋址相對尋址變址尋址位尋址11.2尋址方式1.

直接尋址指令中直接給出了操作數(shù)所在的存儲單元地址,只限于訪問片內數(shù)據(jù)存儲器:(1)片內RAM低128個字節(jié)單元,(2)特殊功能寄存器,在指令中既可用特殊功能寄存器的單元地址形式給出,也可以用特殊功能寄存器的符號名稱來表示。

功能:

將片內RAM56H單元中的內容34H送到累加器A中。例:MOVA,56H;A(56H)機器碼:E55634H片內RAM

34H累加器A56H

圖11.1指令傳遞

操作數(shù)在指令中直接給出,該操作數(shù)稱為立即數(shù)。 操作數(shù)字前加“#”符號為前綴,以區(qū)別直接地址。使用時一定要注意!

2.

立即尋址

特點功能:

(1)將片內RAM中44H單元的內容送累加器A, 屬于直接尋址;

(2)則是把44H這個數(shù)本身送到累加器A,屬于立即尋址。

(1)MOVA,44H;(44H)→A (2)MOVA,#44H;44H→A例3.寄存器尋址以寄存器的內容為操作數(shù)的尋址方式。可進行寄存器尋址的寄存器有:R0~R7、A、B、DPTR和CY。

4.寄存器間接尋址

指令指定寄存器中的內容為操作數(shù)的地址。

工作寄存器R0、R1和專用寄存器DPTR可用于寄存器間接尋址,

在寄存器前加“@”符號作前綴。若:R0=65H,(65H)=26H如圖11.2所示,執(zhí)行(1)結果A=65H,執(zhí)行(2)結果A=26H。26H片內RAMA

65H

圖11.2

R065H①②例:(1)MOVA,R0;A←R0(2)MOVA,@R0;A←(R0)注意:@是寄存器間接尋址區(qū)別寄存器尋址的標志。5.變址尋址以DPTR或PC(基址寄存器)與累加器A(變址寄存器)的內容之和為地址,讀取數(shù)據(jù)。

(1)MOVCA,@A+PC;(A+PC)→A(2)MOVCA,@A+DPTR;(A+DPTR)→A

執(zhí)行第一條時先使當前PC值加1,然后把這個加1后的PC值和累加器A中的偏移量相加,作為操作數(shù)地址,從該地址中取出操作數(shù)送入A中。6.相對尋址

相對尋址只在相對轉移指令中使用。相對尋址是將程序計數(shù)器PC中的當前值與指令第二字節(jié)所給的偏移量rel相加,其和作為跳轉指令的轉移地址。

20008026SJMPrel;PC←PC+2+rel程序存儲器A圖11.3指令執(zhí)行過程

PC

26H0000H2000H2001H

80H

26H

xx

xx

2028H02H20HALU2002H┆例┆┆┆

7.

位尋址

當把八位二進制數(shù)中某一位作為操作數(shù)看待時,這個操作數(shù)的地址就稱為位地址,對位地址尋址簡稱位尋址。

位尋址方式的尋址范圍為:(1)片內RAM的位尋址區(qū)。(2)特殊功能寄存器中的可尋址位。MOV30H,C

;30H是位尋址位地址MOVA,30H

;30H是直接尋址的字節(jié)地址MOVC,ACC.7

;Cy←ACC.7

由上面指令可知,位尋址的位地址與直接尋址的字節(jié)地址形式完全一樣,主要由操作碼來區(qū)分,使用時需應該特別注意。例如11.3指令系統(tǒng)2)算術運算指令4)控制轉移類指令3)邏輯運算及移位指令1)數(shù)據(jù)傳送指令5)位操作指令

這類指令的源操作數(shù)和目的操作數(shù)地址都在單片機內部。指令助記符為“MOV”。11.3.1數(shù)據(jù)傳送指令1、內部數(shù)據(jù)傳送指令

MOVA,#data ;data→A

MOVA,direct ;(direct)→A

MOVA,Rn

;Rn→A

MOVA,@Ri ;(Ri)→A(1)以累加器A為目的操作數(shù)的數(shù)據(jù)傳送指令(2)以寄存器Rn為目的寄存器的數(shù)據(jù)傳送指令MOVRn,#data ;data→RnMOVRn,direct;(direct)→RnMOVRn,A ;Rn→AMOVdirect,A

;A

→(direct)MOVdirect,Rn

;Rn

→(direct)MOVdirect,@Ri

;(Ri)

→(direct)MOVdirect,#data

;#data

→(direct)MOVdirect1,direct2

;(direct2)

→(direct1)(3)以直接地址為目的地的數(shù)據(jù)傳送指令(4)以寄存器間接地址為目的地的數(shù)據(jù)傳送指令MOV@Ri,A ;A→(Ri)MOV@Ri,#data;#data→(Ri)MOV@Ri,direct;(direct)→(Ri)(5)以DPTR為目的寄存器的數(shù)據(jù)傳送指令只有唯一的一條16位數(shù)傳送指令:MOVDPTR,#data16;data16→DPTR已知:R1=20H、(21H)=54H、(22H)=55H、(30H)=56H,試問執(zhí)行如下指令后,結果A、40H、R2、20H、和P2口中的內容各是什么?

MOVA,21HMOV40H,AMOVR2,22HMOV@R1,21HMOVP2,30H例結果為:A=54H,(40H)=54H,R2=55H,(20H)=54H,P2=56H已知:R1=30H、R2=31H、(56H)=23H,試問執(zhí)行以下指令后,結果各是什么? MOVA,R1 MOVR2,A MOV56H,R1例結果為:A=30H,R2=30H,(56H)=30H注意:

不允許MOVR2,R1已知:(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)=12H2、外部數(shù)據(jù)存儲器傳送指令該類指令共4條,指令助記符為“MOVX”:

MOVXA,@Ri;(Ri)→A MOVX@Ri,A;A→(Ri) MOVXA,@DPTR;(DPTR)→A MOVX@DPTR,A;A→(DPTR)例11.1

編程實現(xiàn):將片外數(shù)據(jù)存儲器2000H單元內容送入片外數(shù)據(jù)存儲器20H單元中。解:外部數(shù)據(jù)存儲器之間的數(shù)據(jù)不能直接傳送,必須經過累加器A。程序如下:MOVDPTR,#2000H

;2000H→DPTRMOVXA,@DPTR

;(2000H)→AMOVR1,#20H

;20H→R1MOVX@R1,A

;(2000H)→(20H)該類指令共兩條:MOVCA,@A+DPTR;(A+DPTR)→AMOVCA,@A+PC;PC+1→PC,(A+PC)→A3、程序存儲器查表指令

已知程序存儲器2008H單元開始為BCD-ASCII轉換表TAB,表中的內容依次為0~9的ASCII碼:30H、31H、32H、…、39H。要求根據(jù)累加器A中的值(0~9)來查找相應的ASCII碼,并存入片內RAM的20H單元中。例11.2START:MOVDPTR,#TAB;指向表格基地址

MOVCA,@A+DPTR;結果A=35H

MOV20H,A

;結果(20H)=35H

SJMP$

ORG2008HTAB:DB30H,31H,32H,…,39H解:①采用DPTR作為基址寄存器(假設進入本程序前,A=05H) ADDA,#04H

;修改查表偏移量 MOVCA,@A+PC

;由A與PC當前值之和確定地址,

;取數(shù)送A,A=35H

MOV20H,A

;存結果 SJMP$

TAB:DB30H,31H,32H,…,39H②采用PC作為基址寄存器注:

MOVCA,@A+PC指令與TAB表之間有兩條指令,各占了兩個字節(jié)。因此CPU執(zhí)行該指令時,PC的當前值到表頭的距離為4個字節(jié),應修改查表偏移量。(假設進入本程序前,A=05H)4、數(shù)據(jù)交換指令SWAPA

;A7~4A3~0XCHA,Rn

;ARnXCHA,direct;A(direct)XCHA,@Ri;A(Ri)

XCHDA,@Ri

;A3~

0

(Ri)3~

0解:

相應的程序為:MOVDPTR,#2000H

MOVXA,@DPTR

;(2000H)→AXCHA,20H

;A(20H)MOVX@DPTR,A

;A→(2000H)例11.3編程實現(xiàn):片內數(shù)據(jù)存儲器20H單元與片外數(shù)據(jù)存儲器2000H單元的內容相互交換。PUSHdirect;SP+1→SP,(direct)→(SP)POPdirect;(SP)→(direct),SP-1→SP

第一條指令稱為壓棧指令,用于把直接地址direct的內容傳送到堆棧中去。第二條指令稱為出棧指令。5、堆棧操作指令例11.4設A=30H,B=40H,試問執(zhí)行下列指令后寄存器A、B、SP、DPTR的內容分別為多少。MOV SP,#60H PUSHACC

PUSHBPOPDPLPOPDPH;設置棧底位置,SP=60H

;SP=61H,棧頂(61H)=A=30H;SP=62H,棧頂(62H)=B=40H;DPL=(62H)=40H,SP=61H;DPH=(61H)=30H,SP=60H

已知:片內數(shù)據(jù)存儲器(20H)=M1,(50H)=M2,編程用堆棧指令把20H和50H單元中內容相互交換。解:MOVSP,#60H

;棧底首地址為60HPUSH20H

;SP←SP+1,(61H)←M1PUSH50H

;SP←SP+1,(62H)←M2POP20H

;(20H)←M2,SP-1=61HPOP50H

;(50H)←M1,SP-1=60H例3.9該類指令總共24條,分為加法、減法、十進制調整和乘除法指令四大類。11.3.2算術運算指令(1)不帶進位位加法指令ADDA,Rn ;A+Rn→AADDA,direct ;A+(direct)→AADDA,@Rj ;A+(Ri)→AADDA,#data ;A+#data→A1、加法指令已知:A=83H,R0=20H,(20H)=AFH,試分析執(zhí)行ADDA,@R0指令后累加器A和PSW中各標志位狀態(tài)。例11.5:解:結果為:

A=32H、Cy=1、AC=1、OV=1、P=1。

(2)帶進位位加法指令ADDCA,Rn ;A+Rn+Cy→AADDCA,direct;A+(direct)+Cy→AADDCA,@Ri;A+(Ri)+Cy→AADDCA,#data;A+data+Cy→A(3)加1指令INCA ;A+1→AINCRn ;Rn+1→RnINCdirect ;(direct)+1→(direct)INC@Ri ;(Ri)+1→(Ri)INCDPTR ;DPTR+1→DPTR設有兩個16位無符號二進制數(shù),分別存放在片內RAM30H、31H單元和40H、41H單元中(低地址存放數(shù)據(jù)低8位)。編程實現(xiàn)這兩個16位數(shù)的加法(設和不超過16位),并將和存入片外數(shù)據(jù)存儲器的50H、51H單元。例11.6:解:由于不存在16位數(shù)的加法指令,所以只能先加低8位,后加高8位,且在加高8位時還應加上低8位相加時的進位位。程序為:

MOV A,30H ADD A,40H MOV R0,#50H MOVX@R0,A MOV A,31H ADDCA,41H INC R0 MOVX@R0,A

(1)帶借位(Cy)減法指令SUBBA,Rn ;A-Rn-Cy→ASUBBA,@Ri;A-(Ri)-Cy→ASUBBA,direct;A-(direct)-Cy→ASUBBA,#data;A-#data-Cy→A2、減法指令已知:A=35H、R1=B5H、Cy=1,試分析執(zhí)行SUBBA,R1指令后A和PSW中各標志位狀態(tài)。例11.7:解:結果為:

A=7FH、Cy=1、AC=1、OV=0、P=1。

(2)減1指令DEC

A ;A-1→ADECRn ;Rn-1→RnDECdirect ;(direct)-1→(direct)DEC@Ri ;(Ri)-1→(Ri)特點DAA對A中兩個壓縮BCD數(shù)相加之和調整為2位BCD碼數(shù)。1)只能用在對BCD碼數(shù)進行ADD或ADDC 操作后使用。2)影響標志位:有進位時Cy=1,表明相 加后的和等于或大于十進制數(shù)100。3、十進制調整指令例11.8試編程實現(xiàn)46H+84H的BCD加法程序,將結果存入50H、51H單元。

(1)BCD加法

解: MOV A,#46H ;

46H→A ADD A,#84H;46H+84H=0CAH→A DA A

;A+66H=30H→A,Cy=1,AC=1 MOV50H,A;存放十位、個位的BCD碼 MOVA,#00H ADDCA,#00H

MOV51H,A SJMP$

;

結束A=010001104684+)1001100000110011001010

1300

110

高、低4位均大于9,加66H調整BCD加法過程data=01000100二進制加法十進制調整:(2)BCD減法

MCS-51單片機中沒有十進制減法調整指令,因此,這里的BCD減法運算必須采用BCD補碼運算法則。

已知:M1和M2中分別存有被減數(shù)80和減數(shù)25,試編程求差,并把結果存入M3單元中。

解:根據(jù)BCD減法的實施步驟,程序如下: ORG0100H CLRC ;清Cy MOVA,#9AH;A←兩位BCD數(shù)的模(100) SUBBA,M2;A←求得減數(shù)的補數(shù) ADDA,M1;A←被減數(shù)+減數(shù)的補數(shù) DAA;對A進行加法調整 MOVM3,A;M3←BCD差 CPLC ;Cy取反,得到差的符號標志

…兩位BCD數(shù)的模100BCD被減數(shù)加60調整BCD差BCD減數(shù)減數(shù)的補數(shù)

1001101000100101

11110101

01100000101010101

01110101

10000000

++BCD減法過程計算:80–25=?即:CY=1,A=55H,CY取反后:CY=0,表明結果為正數(shù),A中的內容為所求結果。兩位BCD數(shù)的模:100BCD被減數(shù)加06H調整BCD差BCD減數(shù):80減數(shù)的補數(shù)

1001101010000000

00111111

00000110001000101

00011010

00100101++計算:25–80=?

即:CY=0,A=45H。CY取反后:CY=1,表明結果為負數(shù),A中的內容為結果的補數(shù)。(即:25-80=-(100-45)=-55)DIVAB;A÷B=A…B,形成標志:除法指令C=0除數(shù)=0

OV=1除數(shù)≠0時OV=04、乘、除法指令MULAB;A×B=BA,形成標志:

積>255時

OV=1乘法指令C=0共18條,分為與、或、異或運算指令。ANLA,RnANLA,@RiANLA,directANLA,#dataANLdirect,AANLdirect,#data;A∧Rn→A;A∧(Ri)→A;A∧(direct)→A;A∧data→A;(direct)∧A→(direct);(direct)∧data→(direct)11.3.3邏輯運算及移位指令1、邏輯運算類指令(1)邏輯與運算指令ORLA,Rn ;A∨Rn→AORLA,direct ;A∨(direct)→AORLA,@Ri ;A∨(Ri)→AORLA,#data ;A∨data→AORLdirect,A ;(direct)∨A→(direct)ORLdirect,#data ;(direct)∨data→(direct)(2)邏輯或運算指令 編程實現(xiàn)將累加器A中低4位送入P2口低4位,P2口高4位不變。

例11.9解:根據(jù)邏輯與、邏輯或運算指令功能來實現(xiàn):ANLA,#0FH ;A中的高4位清0,低4位不變ANLP2,#0F0H ;P2中的低4位清0,高4位不變ORLP2,A ;裝配數(shù)據(jù),A0~3→P20~3XRLA,Rn ;A⊕Rn→AXRLA,direct ;A⊕(direct)→AXRLA,@Ri ;A⊕(Ri)→AXRLA,#data ;A⊕data→AXRLdirect,A ;(direct)⊕A→(direct)XRLdirect,#data;(direct)⊕data→(direct)(3)邏輯異或運算指令已知片內RAM20H中有一數(shù)55H,欲使其高4位不變,低4位取反,然后將結果保存到外部數(shù)據(jù)存儲器0020H中,試編出它的相應程序。

例11.10解: XRL 20H,#0FH

;55H⊕0FH=5AH MOV A,20H

MOV DPTR,#0020H MOVX@DPTR,ACLRACPLA;0→A;/A→A

已知:40H單元中有一數(shù)為34H,試寫出對它求補的程序。

解:一個8位二進制機器數(shù)的求補可以定義為連同符號位求反加“1”。為此,相應程序為:MOVA,40H;A←34HCPLA;A←/34HINCA;A←得到34H的補數(shù)MOV40H,A;結果送回40H單元SJMP$;停止例2、累加器清零和取反指令RLA;RLCA;RRCA;3、移位指令RRA;已知:M和M+1單元中有一個16位二進制數(shù)(M為低8位),編程將其擴大到二倍。解:一個16位二進制數(shù)擴大到二倍就等于是把它進行一次算術左移。由于MCS-51單元片機的移位指令都是二進制8位的移位指令,因此16位數(shù)的移位指令必須用程序來實現(xiàn)。

M

M+1

0

例算法為:程序為:

ORG0030HCLRC ;清進位標志位MOVR0,#M MOVA,@R0 ;A←操作數(shù)低8位RLCA

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

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

LJMPaddr16 ;addr16→PCAJMPaddr11 ;PC+2→PC,addr11→PC10~0SJMPrel ;PC+2→PC,PC+rel→PCJMP@A+DPTR;A+DPTR→PC1、無條件轉移指令11.3.4控制轉移類指令F800H~FFFFHF000H~F7FFHE800H~EFFFHE000H~E7FFHD800H~DFFFHD000H~D7FFHC800H~CFFFHC000H~C7FFHB800H~BFFFHB000H~B7FFHA800H~AFFFHA000H~A7FFH9800H~9FFFH9000H~97FFH8800H~8FFFH8000H~87FFH7800H~7FFFH7000H~77FFH6800H~6FFFH6000H~67FFH5800H~5FFFH5000H~57FFH4800H~4FFFH4000H~47FFH3800H~3FFFH3000H~37FFH2800H~2FFFH2000H~27FFH1800H~1FFFH1000H~17FFH0800H~0FFFH0000H~07FFH程序存儲器64K地址空間

·無條件轉移指令可使程序無條件地轉移

·但各指令的轉移范圍和方式不同,其中: 長轉移指令允許在64KB范圍內轉移,

絕對轉移指令可以在2KB范圍內轉移,

短轉移指令只能在-128~+127范圍內轉移。一頁:256個地址單元一區(qū):8個頁,共2KB地址單元;地址高5位決定區(qū)。

64K:32個區(qū),256個頁。(1)長轉移指令LJMPaddr16 ;addr16→PC三字節(jié)指令,不影響標志位,可在64KB地址范圍內無條件轉移。(2)絕對轉移指令雙字節(jié)指令,可實現(xiàn)在PC的高五位所限定2KB地址范圍內轉移。AJMPaddr11 ;PC+2→PC,addr11→PC10~0

指令格式為:

已知:

SZ:AJMPaddr11

其中,SZ為AJMPaddr11指令的標號地址,由該指令在程序存儲器中位置確定,addr11為11位目的地址,試分析該指令執(zhí)行后的情況以及指令碼的確定方法。

解:設SZ=4100H,addr11=11010101101B,則根據(jù)上述指令格式可得絕對轉移指令的指令碼為:例:

110

0

0001

10101101操作碼a8a9a10a7…………a0PC=01000

11010101101=46ADHPC15…PC11PC0……………..已知:SZ=4100H,addr11=11010101101,即,執(zhí)行指令時有:PC=4100H+2=0100000100000010C1HADH即操作碼為:轉移的目的地址為:(3)短轉移指令機器碼:80rel雙字節(jié)雙周期指令,在一頁地址(256)范圍內轉移。SJMPrel ;PC+2→PC,PC+rel→PC目的地址=PC當前值+rel

=指令操作碼的源地址+2+rel

ORG2000H2000H 7401

START:MOVA,#01H2002H F8

MOVR0,A2003H 90CF01

LOOP:MOVDPTR,#2CF0H┋

┋2017H 80E7

SJMPSTART例11.11下列程序中,請計算SJMPSTART指令碼中的rel,并分析目標地址的轉移范圍。a)地址偏移量rel的計算: 由:目的地址=源地址+2+rel

可得:

rel=目的地址-源地址-2 =2000H-2017H-2=-25rel采用補碼表示,因此rel=[-25]補=E7H解:SJMP指令中地址偏移量是采用START符號表示的,指明指令執(zhí)行后轉入本程序開頭處重新執(zhí)行。b)轉移地址范圍的確定:轉移地址通常以SJMP指令始址為參照點,但執(zhí)行SJMP指令時,PC已自動加了2,而rel的取值范圍是-128~+127,故可得到轉移地址的實際轉移范圍為:

-126~+129。

1、在匯編語言程序中,addr16、addr11和rel通常用目標的符號地址表示,用戶編程時無需計算其具體數(shù)值大小,匯編程序能自動計算出相應的地址或偏移量,并填入到指令的機器碼中。

2、通常利用SJMP指令來實現(xiàn)“原地踏步”:HERE:SJMPHERE或

SJMP$其中:“$”代表PC的當前值,SJMP$表示轉移到本條指令所處位置。以上指令機器碼中rel的值均為FEH。注意:(4)變址尋址轉移指令JMP@A+DPTR ;A+DPTR→PC機器碼:73H

該類指令是一條單字節(jié)雙周期無條件轉移指令。常常用于查表轉移(哈希查找法)在64KB地址范圍內無條件轉移。

JZrel ;A=0,PC+2+rel→PC ;

A≠0,PC+2→PCJNZrel ;A≠0,PC+2+rel→PC

;

A=0,PC+2→PC2、條件轉移指令(1)累加器A判零轉移指令

已知:外部數(shù)據(jù)存貯器中DATA1為始址的數(shù)據(jù)塊以零為結束標志,試編程將之送到以DATA2為始址的內部RAM單元中。

解:程序為:

MOVR0,#DATA1;外部數(shù)據(jù)存貯器數(shù)據(jù)塊始址送R0

MOVR1,#DATA2;內部RAM數(shù)據(jù)塊始址送R1MAIN:MOVXA,@R0;取外部數(shù)據(jù)存貯器數(shù)據(jù)送A

JZQUIT ;若A=0,則跳轉到QUIT處, ;否則往下執(zhí)行

MOV@R1,A ;A中的數(shù)據(jù)送給內部RAM單元中

INCR0 ;修改外部數(shù)據(jù)存貯器地址的指針

INCR1 ;修改內部RAM地址的指針

SJMPMAIN ;循環(huán)執(zhí)行QUIT: SJMP$

CJNEA,#data,rel ;不相等轉移,即:A-data ;若A=data,則PC+3→PC,0→C ;若A>data,則PC+3+rel→PC,0→C ;若A<data,則PC+3+rel→PC,1→CCJNEA,direct,rel;不相等轉移,即:A-data;若A=(direct),則PC+3→PC,0→C;若A>(direct),則PC+3+rel→PC,0→C;若A<(direct),則PC+3+rel→PC,1→C(2)比較條件轉移指令(影響標志位)CJNERn,#data,rel ;不相等轉移,即:Rn-data ;若Rn=data,則PC+3→PC,0→C ;若Rn>data,則PC+3+rel→PC,0→C ;若Rn<data,則PC+3+rel→PC,1→CCJNE@Ri,#data,rel;不相等轉移,即:(Ri)-data ;若(Ri)=data,則PC+3→PC,0→C ;若(Ri)>data,則PC+3+rel→PC,0→C ;若(Ri)<data,則PC+3+rel→PC,1→CDJNZRn,rel ;

Rn-1→Rn ;若Rn=0,則PC+2→PC ;若Rn≠0,則PC+2+rel→PC(3)減1條件轉移指令DJNZdirect,rel ;

(direct)-1→(direct) ;若(direct)=0,則PC+3→PC ;若(direct)≠0,則PC+3+rel→PC

試編寫程序,將片外數(shù)據(jù)存儲器1000H單元開始的10H個數(shù),送到片內數(shù)據(jù)存儲器20H單元開始的區(qū)間中。

例11.12

解:程序為:

ORG0030H

MOVR2,#10H

;傳送個數(shù)→R2

MOVR0,#20H

;R0指向目標區(qū)間起始地址

MOVDPTR,#1000H

;DPTR指向源數(shù)據(jù)起始地址START:MOVXA,@DPTR

;取一個數(shù)據(jù)

MOV@R0,A

;數(shù)據(jù)存入片內RAM單元

INC R0

;目標地址指針加1

INC DPTR

;源地址指針加1

DJNZR2,START

;判斷傳送個數(shù)

SJMP $

;退出循環(huán),停止程序運行條件轉移指令均為相對轉移指令,轉移范圍都在以PC當前值為基準的-128~+127范圍內,因此指令的轉移范圍有限。條件轉移指令計算轉移地址的方法相同,即:

轉移地址=PC當前值+rel地址偏移量rel在源程序中常用標號替代,程序匯編時由匯編程序自動換算成8位偏移量。注意:(1)調用指令3、子程序調用和返回指令a)長調用指令LCALLaddr16;PC+3→PC;SP+1→SP,PC7~0→(SP);SP+1→SP,PC15~8→(SP);addr16→PC

三字節(jié)指令,在64KB地址范圍內調用子程序。b)短調用指令ACALLaddr11;PC+2→PC;SP+1→SP,PC7~0→(SP);SP+1→SP,PC15~8→(SP);addr11→PC10~0

機器碼:a10a9a810001a7a6a5a4a3a2a1a0

雙字節(jié)指令,不影響標志位,在2KB地址范圍內尋址,以調用子程序。頁數(shù)決定于addr11的高3位,頁內地址決定于addr11的低8位。

已知:MAIN=0200H,試問執(zhí)行如下指令后,SP及堆棧中數(shù)據(jù)如何變化?PC中內容是什么?

MOVSP,#65H MAIN:LCALL2000H

例解:執(zhí)行上述指令后, SP=67H、PC=2000H (66H)=03H、(67H)=02H。(2)返回指令RET;(SP)→PC15~8,SP-1→SP;(SP)→PC7~0,SP-1→SP

調用子程序后必須返回主程序,因此,每段子程序的最后一條指令必須是返回指令RET。其功能是將調用子程序時壓入堆棧的斷點地址送回PC,使程序返回到主程序斷點處繼續(xù)往下執(zhí)行。a)子程序返回指令

b)中斷返回指令RETI;(SP)→PC15~8,SP-1→SP;(SP)→PC7~0

溫馨提示

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

評論

0/150

提交評論