版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第十一章
單片機(jī)指令系統(tǒng)本章內(nèi)容尋址方式指令的分類、格式及符號(hào)說明各類指令的說明
掌握MCS-51指令系統(tǒng)的各種尋址方式掌握每條指令的格式、功能及用法掌握指令的操作過程中操作數(shù)的變化情況以及對(duì)標(biāo)志位的影響學(xué)會(huì)正確選用指令完成簡(jiǎn)單的程序設(shè)計(jì)學(xué)習(xí)目的
MCS-51指令系統(tǒng)共有111條指令,共255種操作代碼,11.1MCS-51指令系統(tǒng)簡(jiǎn)介按功能劃分可分為五類:數(shù)據(jù)傳送指令(29條)
算術(shù)運(yùn)算指令(24條)邏輯運(yùn)算及轉(zhuǎn)移指令(24條)控制轉(zhuǎn)移指令(17條)位操作指令(17條)單字節(jié)指令(49條)雙字節(jié)指令(45條)三字節(jié)指令(17條)
按指令字節(jié)數(shù)劃分可分為三種:單機(jī)器周期指令(64條)雙機(jī)器周期指令(45條)四機(jī)器周期指令(2條)按指令的執(zhí)行時(shí)間劃分可分為三種:
指令的表示方法稱為指令格式。表達(dá)形式為:11.1.1
指令格式標(biāo)號(hào)又稱為指令地址符號(hào),一般由1-8個(gè)字符組成,是以字母開頭的字母數(shù)字串。[標(biāo)號(hào)]:操作碼[操作數(shù)];[注釋]
操作碼
用MCS-51單片機(jī)所規(guī)定的助記符來表示,用來規(guī)定指令進(jìn)行什么操作。
注釋是對(duì)指令作用或功能的說明,是方便閱讀而添加的解釋說明性文字,用分號(hào)“;”開頭。
操作數(shù)指出了指令的操作對(duì)象,它可以是一個(gè)具體的數(shù)據(jù),也可以是指出到哪里取得數(shù)據(jù)的地址或符號(hào)。在一條指令中可能沒有操作數(shù),也可能有多個(gè)操作數(shù)。Rn:當(dāng)前選中的工作寄存器區(qū)的8個(gè)工作寄存器R0~R7中的一個(gè)(n=0~7)Ri:可用于寄存器間接尋址的工作寄存器
R0、R1(i
=
0,1)Direct:8位直接地址??梢允莾?nèi)部RAM的低128個(gè)單元地址;或是特殊功能存器地址。11.1.2
指令中常用符號(hào)說明#data:8位立即數(shù)。#data16:16位立即數(shù)。rel:8位補(bǔ)碼數(shù)的地址偏移量。bit:位地址,表示片內(nèi)RAM或特殊功能寄存器中的直接尋址位。addr11:11位目的地址。addr16:16位目的地址。@:間接尋址寄存器前綴。$:
當(dāng)前指令的地址。X:
由X指定的地址單元或寄存器中的內(nèi)容(X):以X指定的地址單元或寄存器中的內(nèi)容作為 地址的存儲(chǔ)單元的內(nèi)容?!?/p>
將箭頭左邊的內(nèi)容送到箭頭右邊的單元中。/:
位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反。
MCS-51指令系統(tǒng)共有七種尋址方式:
立即尋址直接尋址寄存器尋址寄存器間接尋址相對(duì)尋址變址尋址位尋址11.2尋址方式1.
直接尋址指令中直接給出了操作數(shù)所在的存儲(chǔ)單元地址,只限于訪問片內(nèi)數(shù)據(jù)存儲(chǔ)器:(1)片內(nèi)RAM低128個(gè)字節(jié)單元,(2)特殊功能寄存器,在指令中既可用特殊功能寄存器的單元地址形式給出,也可以用特殊功能寄存器的符號(hào)名稱來表示。
功能:
將片內(nèi)RAM56H單元中的內(nèi)容34H送到累加器A中。例:MOVA,56H;A(56H)機(jī)器碼:E55634H片內(nèi)RAM
34H累加器A56H
圖11.1指令傳遞
操作數(shù)在指令中直接給出,該操作數(shù)稱為立即數(shù)。 操作數(shù)字前加“#”符號(hào)為前綴,以區(qū)別直接地址。使用時(shí)一定要注意!
2.
立即尋址
特點(diǎn)功能:
(1)將片內(nèi)RAM中44H單元的內(nèi)容送累加器A, 屬于直接尋址;
(2)則是把44H這個(gè)數(shù)本身送到累加器A,屬于立即尋址。
(1)MOVA,44H;(44H)→A (2)MOVA,#44H;44H→A例3.寄存器尋址以寄存器的內(nèi)容為操作數(shù)的尋址方式。可進(jìn)行寄存器尋址的寄存器有:R0~R7、A、B、DPTR和CY。
4.寄存器間接尋址
指令指定寄存器中的內(nèi)容為操作數(shù)的地址。
工作寄存器R0、R1和專用寄存器DPTR可用于寄存器間接尋址,
在寄存器前加“@”符號(hào)作前綴。若:R0=65H,(65H)=26H如圖11.2所示,執(zhí)行(1)結(jié)果A=65H,執(zhí)行(2)結(jié)果A=26H。26H片內(nèi)RAMA
65H
圖11.2
R065H①②例:(1)MOVA,R0;A←R0(2)MOVA,@R0;A←(R0)注意:@是寄存器間接尋址區(qū)別寄存器尋址的標(biāo)志。5.變址尋址以DPTR或PC(基址寄存器)與累加器A(變址寄存器)的內(nèi)容之和為地址,讀取數(shù)據(jù)。
(1)MOVCA,@A+PC;(A+PC)→A(2)MOVCA,@A+DPTR;(A+DPTR)→A
執(zhí)行第一條時(shí)先使當(dāng)前PC值加1,然后把這個(gè)加1后的PC值和累加器A中的偏移量相加,作為操作數(shù)地址,從該地址中取出操作數(shù)送入A中。6.相對(duì)尋址
相對(duì)尋址只在相對(duì)轉(zhuǎn)移指令中使用。相對(duì)尋址是將程序計(jì)數(shù)器PC中的當(dāng)前值與指令第二字節(jié)所給的偏移量rel相加,其和作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址。
20008026SJMPrel;PC←PC+2+rel程序存儲(chǔ)器A圖11.3指令執(zhí)行過程
PC
26H0000H2000H2001H
80H
26H
xx
xx
2028H02H20HALU2002H┆例┆┆┆
7.
位尋址
當(dāng)把八位二進(jìn)制數(shù)中某一位作為操作數(shù)看待時(shí),這個(gè)操作數(shù)的地址就稱為位地址,對(duì)位地址尋址簡(jiǎn)稱位尋址。
位尋址方式的尋址范圍為:(1)片內(nèi)RAM的位尋址區(qū)。(2)特殊功能寄存器中的可尋址位。MOV30H,C
;30H是位尋址位地址MOVA,30H
;30H是直接尋址的字節(jié)地址MOVC,ACC.7
;Cy←ACC.7
由上面指令可知,位尋址的位地址與直接尋址的字節(jié)地址形式完全一樣,主要由操作碼來區(qū)分,使用時(shí)需應(yīng)該特別注意。例如11.3指令系統(tǒng)2)算術(shù)運(yùn)算指令4)控制轉(zhuǎn)移類指令3)邏輯運(yùn)算及移位指令1)數(shù)據(jù)傳送指令5)位操作指令
這類指令的源操作數(shù)和目的操作數(shù)地址都在單片機(jī)內(nèi)部。指令助記符為“MOV”。11.3.1數(shù)據(jù)傳送指令1、內(nèi)部數(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í)行如下指令后,結(jié)果A、40H、R2、20H、和P2口中的內(nèi)容各是什么?
MOVA,21HMOV40H,AMOVR2,22HMOV@R1,21HMOVP2,30H例結(jié)果為:A=54H,(40H)=54H,R2=55H,(20H)=54H,P2=56H已知:R1=30H、R2=31H、(56H)=23H,試問執(zhí)行以下指令后,結(jié)果各是什么? MOVA,R1 MOVR2,A MOV56H,R1例結(jié)果為: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ù)存儲(chǔ)器傳送指令該類指令共4條,指令助記符為“MOVX”:
MOVXA,@Ri;(Ri)→A MOVX@Ri,A;A→(Ri) MOVXA,@DPTR;(DPTR)→A MOVX@DPTR,A;A→(DPTR)例11.1
編程實(shí)現(xiàn):將片外數(shù)據(jù)存儲(chǔ)器2000H單元內(nèi)容送入片外數(shù)據(jù)存儲(chǔ)器20H單元中。解:外部數(shù)據(jù)存儲(chǔ)器之間的數(shù)據(jù)不能直接傳送,必須經(jīng)過累加器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、程序存儲(chǔ)器查表指令
已知程序存儲(chǔ)器2008H單元開始為BCD-ASCII轉(zhuǎn)換表TAB,表中的內(nèi)容依次為0~9的ASCII碼:30H、31H、32H、…、39H。要求根據(jù)累加器A中的值(0~9)來查找相應(yīng)的ASCII碼,并存入片內(nèi)RAM的20H單元中。例11.2START:MOVDPTR,#TAB;指向表格基地址
MOVCA,@A+DPTR;結(jié)果A=35H
MOV20H,A
;結(jié)果(20H)=35H
SJMP$
ORG2008HTAB:DB30H,31H,32H,…,39H解:①采用DPTR作為基址寄存器(假設(shè)進(jìn)入本程序前,A=05H) ADDA,#04H
;修改查表偏移量 MOVCA,@A+PC
;由A與PC當(dāng)前值之和確定地址,
;取數(shù)送A,A=35H
MOV20H,A
;存結(jié)果 SJMP$
TAB:DB30H,31H,32H,…,39H②采用PC作為基址寄存器注:
MOVCA,@A+PC指令與TAB表之間有兩條指令,各占了兩個(gè)字節(jié)。因此CPU執(zhí)行該指令時(shí),PC的當(dāng)前值到表頭的距離為4個(gè)字節(jié),應(yīng)修改查表偏移量。(假設(shè)進(jìn)入本程序前,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解:
相應(yīng)的程序?yàn)椋篗OVDPTR,#2000H
MOVXA,@DPTR
;(2000H)→AXCHA,20H
;A(20H)MOVX@DPTR,A
;A→(2000H)例11.3編程實(shí)現(xiàn):片內(nèi)數(shù)據(jù)存儲(chǔ)器20H單元與片外數(shù)據(jù)存儲(chǔ)器2000H單元的內(nèi)容相互交換。PUSHdirect;SP+1→SP,(direct)→(SP)POPdirect;(SP)→(direct),SP-1→SP
第一條指令稱為壓棧指令,用于把直接地址direct的內(nèi)容傳送到堆棧中去。第二條指令稱為出棧指令。5、堆棧操作指令例11.4設(shè)A=30H,B=40H,試問執(zhí)行下列指令后寄存器A、B、SP、DPTR的內(nèi)容分別為多少。MOV SP,#60H PUSHACC
PUSHBPOPDPLPOPDPH;設(shè)置棧底位置,SP=60H
;SP=61H,棧頂(61H)=A=30H;SP=62H,棧頂(62H)=B=40H;DPL=(62H)=40H,SP=61H;DPH=(61H)=30H,SP=60H
已知:片內(nèi)數(shù)據(jù)存儲(chǔ)器(20H)=M1,(50H)=M2,編程用堆棧指令把20H和50H單元中內(nèi)容相互交換。解: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條,分為加法、減法、十進(jìn)制調(diào)整和乘除法指令四大類。11.3.2算術(shù)運(yùn)算指令(1)不帶進(jìn)位位加法指令A(yù)DDA,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中各標(biāo)志位狀態(tài)。例11.5:解:結(jié)果為:
A=32H、Cy=1、AC=1、OV=1、P=1。
(2)帶進(jìn)位位加法指令A(yù)DDCA,Rn ;A+Rn+Cy→AADDCA,direct;A+(direct)+Cy→AADDCA,@Ri;A+(Ri)+Cy→AADDCA,#data;A+data+Cy→A(3)加1指令I(lǐng)NCA ;A+1→AINCRn ;Rn+1→RnINCdirect ;(direct)+1→(direct)INC@Ri ;(Ri)+1→(Ri)INCDPTR ;DPTR+1→DPTR設(shè)有兩個(gè)16位無符號(hào)二進(jìn)制數(shù),分別存放在片內(nèi)RAM30H、31H單元和40H、41H單元中(低地址存放數(shù)據(jù)低8位)。編程實(shí)現(xiàn)這兩個(gè)16位數(shù)的加法(設(shè)和不超過16位),并將和存入片外數(shù)據(jù)存儲(chǔ)器的50H、51H單元。例11.6:解:由于不存在16位數(shù)的加法指令,所以只能先加低8位,后加高8位,且在加高8位時(shí)還應(yīng)加上低8位相加時(shí)的進(jìn)位位。程序?yàn)椋?/p>
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中各標(biāo)志位狀態(tài)。例11.7:解:結(jié)果為:
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)特點(diǎn)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í)Cy=1,表明相 加后的和等于或大于十進(jìn)制數(shù)100。3、十進(jìn)制調(diào)整指令例11.8試編程實(shí)現(xiàn)46H+84H的BCD加法程序,將結(jié)果存入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;存放十位、個(gè)位的BCD碼 MOVA,#00H ADDCA,#00H
MOV51H,A SJMP$
;
結(jié)束A=010001104684+)1001100000110011001010
1300
110
高、低4位均大于9,加66H調(diào)整BCD加法過程data=01000100二進(jìn)制加法十進(jìn)制調(diào)整:(2)BCD減法
MCS-51單片機(jī)中沒有十進(jìn)制減法調(diào)整指令,因此,這里的BCD減法運(yùn)算必須采用BCD補(bǔ)碼運(yùn)算法則。
例
已知:M1和M2中分別存有被減數(shù)80和減數(shù)25,試編程求差,并把結(jié)果存入M3單元中。
解:根據(jù)BCD減法的實(shí)施步驟,程序如下: ORG0100H CLRC ;清Cy MOVA,#9AH;A←兩位BCD數(shù)的模(100) SUBBA,M2;A←求得減數(shù)的補(bǔ)數(shù) ADDA,M1;A←被減數(shù)+減數(shù)的補(bǔ)數(shù) DAA;對(duì)A進(jìn)行加法調(diào)整 MOVM3,A;M3←BCD差 CPLC ;Cy取反,得到差的符號(hào)標(biāo)志
…兩位BCD數(shù)的模100BCD被減數(shù)加60調(diào)整BCD差BCD減數(shù)減數(shù)的補(bǔ)數(shù)
1001101000100101
11110101
01100000101010101
01110101
10000000
++BCD減法過程計(jì)算:80–25=?即:CY=1,A=55H,CY取反后:CY=0,表明結(jié)果為正數(shù),A中的內(nèi)容為所求結(jié)果。兩位BCD數(shù)的模:100BCD被減數(shù)加06H調(diào)整BCD差BCD減數(shù):80減數(shù)的補(bǔ)數(shù)
1001101010000000
00111111
00000110001000101
00011010
00100101++計(jì)算:25–80=?
即:CY=0,A=45H。CY取反后:CY=1,表明結(jié)果為負(fù)數(shù),A中的內(nèi)容為結(jié)果的補(bǔ)數(shù)。(即:25-80=-(100-45)=-55)DIVAB;A÷B=A…B,形成標(biāo)志:除法指令C=0除數(shù)=0
時(shí)
OV=1除數(shù)≠0時(shí)OV=04、乘、除法指令MULAB;A×B=BA,形成標(biāo)志:
積>255時(shí)
OV=1乘法指令C=0共18條,分為與、或、異或運(yùn)算指令。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邏輯運(yùn)算及移位指令1、邏輯運(yùn)算類指令(1)邏輯與運(yùn)算指令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)邏輯或運(yùn)算指令 編程實(shí)現(xiàn)將累加器A中低4位送入P2口低4位,P2口高4位不變。
例11.9解:根據(jù)邏輯與、邏輯或運(yùn)算指令功能來實(shí)現(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)邏輯異或運(yùn)算指令已知片內(nèi)RAM20H中有一數(shù)55H,欲使其高4位不變,低4位取反,然后將結(jié)果保存到外部數(shù)據(jù)存儲(chǔ)器0020H中,試編出它的相應(yīng)程序。
例11.10解: XRL 20H,#0FH
;55H⊕0FH=5AH MOV A,20H
MOV DPTR,#0020H MOVX@DPTR,ACLRACPLA;0→A;/A→A
已知:40H單元中有一數(shù)為34H,試寫出對(duì)它求補(bǔ)的程序。
解:一個(gè)8位二進(jìn)制機(jī)器數(shù)的求補(bǔ)可以定義為連同符號(hào)位求反加“1”。為此,相應(yīng)程序?yàn)椋篗OVA,40H;A←34HCPLA;A←/34HINCA;A←得到34H的補(bǔ)數(shù)MOV40H,A;結(jié)果送回40H單元SJMP$;停止例2、累加器清零和取反指令RLA;RLCA;RRCA;3、移位指令RRA;已知:M和M+1單元中有一個(gè)16位二進(jìn)制數(shù)(M為低8位),編程將其擴(kuò)大到二倍。解:一個(gè)16位二進(jìn)制數(shù)擴(kuò)大到二倍就等于是把它進(jìn)行一次算術(shù)左移。由于MCS-51單元片機(jī)的移位指令都是二進(jìn)制8位的移位指令,因此16位數(shù)的移位指令必須用程序來實(shí)現(xiàn)。
M
M+1
0
例算法為:程序?yàn)椋?/p>
ORG0030HCLRC ;清進(jìn)位標(biāo)志位MOVR0,#M MOVA,@R0 ;A←操作數(shù)低8位RLCA
;低8位操作數(shù)左移,低位補(bǔ)0MOV@R0,A ;結(jié)果送回M單元,Cy中為最高位INCR0
MOVA,@R0 ;A←操作數(shù)高8位RLCA ;高8位操作數(shù)左移,并移入低位CyMOV@R0,A ;結(jié)果送回M+1單元SJMP$
LJMPaddr16 ;addr16→PCAJMPaddr11 ;PC+2→PC,addr11→PC10~0SJMPrel ;PC+2→PC,PC+rel→PCJMP@A+DPTR;A+DPTR→PC1、無條件轉(zhuǎn)移指令11.3.4控制轉(zhuǎn)移類指令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程序存儲(chǔ)器64K地址空間
·無條件轉(zhuǎn)移指令可使程序無條件地轉(zhuǎn)移
·但各指令的轉(zhuǎn)移范圍和方式不同,其中: 長(zhǎng)轉(zhuǎn)移指令允許在64KB范圍內(nèi)轉(zhuǎn)移,
絕對(duì)轉(zhuǎn)移指令可以在2KB范圍內(nèi)轉(zhuǎn)移,
短轉(zhuǎn)移指令只能在-128~+127范圍內(nèi)轉(zhuǎn)移。一頁(yè):256個(gè)地址單元一區(qū):8個(gè)頁(yè),共2KB地址單元;地址高5位決定區(qū)。
64K:32個(gè)區(qū),256個(gè)頁(yè)。(1)長(zhǎng)轉(zhuǎn)移指令LJMPaddr16 ;addr16→PC三字節(jié)指令,不影響標(biāo)志位,可在64KB地址范圍內(nèi)無條件轉(zhuǎn)移。(2)絕對(duì)轉(zhuǎn)移指令雙字節(jié)指令,可實(shí)現(xiàn)在PC的高五位所限定2KB地址范圍內(nèi)轉(zhuǎn)移。AJMPaddr11 ;PC+2→PC,addr11→PC10~0
指令格式為:
已知:
SZ:AJMPaddr11
其中,SZ為AJMPaddr11指令的標(biāo)號(hào)地址,由該指令在程序存儲(chǔ)器中位置確定,addr11為11位目的地址,試分析該指令執(zhí)行后的情況以及指令碼的確定方法。
解:設(shè)SZ=4100H,addr11=11010101101B,則根據(jù)上述指令格式可得絕對(duì)轉(zhuǎn)移指令的指令碼為:例:
110
0
0001
10101101操作碼a8a9a10a7…………a0PC=01000
11010101101=46ADHPC15…PC11PC0……………..已知:SZ=4100H,addr11=11010101101,即,執(zhí)行指令時(shí)有:PC=4100H+2=0100000100000010C1HADH即操作碼為:轉(zhuǎn)移的目的地址為:(3)短轉(zhuǎn)移指令機(jī)器碼:80rel雙字節(jié)雙周期指令,在一頁(yè)地址(256)范圍內(nèi)轉(zhuǎn)移。SJMPrel ;PC+2→PC,PC+rel→PC目的地址=PC當(dāng)前值+rel
=指令操作碼的源地址+2+rel
ORG2000H2000H 7401
START:MOVA,#01H2002H F8
MOVR0,A2003H 90CF01
LOOP:MOVDPTR,#2CF0H┋
┋2017H 80E7
SJMPSTART例11.11下列程序中,請(qǐng)計(jì)算SJMPSTART指令碼中的rel,并分析目標(biāo)地址的轉(zhuǎn)移范圍。a)地址偏移量rel的計(jì)算: 由:目的地址=源地址+2+rel
可得:
rel=目的地址-源地址-2 =2000H-2017H-2=-25rel采用補(bǔ)碼表示,因此rel=[-25]補(bǔ)=E7H解:SJMP指令中地址偏移量是采用START符號(hào)表示的,指明指令執(zhí)行后轉(zhuǎn)入本程序開頭處重新執(zhí)行。b)轉(zhuǎn)移地址范圍的確定:轉(zhuǎn)移地址通常以SJMP指令始址為參照點(diǎn),但執(zhí)行SJMP指令時(shí),PC已自動(dòng)加了2,而rel的取值范圍是-128~+127,故可得到轉(zhuǎn)移地址的實(shí)際轉(zhuǎn)移范圍為:
-126~+129。
1、在匯編語言程序中,addr16、addr11和rel通常用目標(biāo)的符號(hào)地址表示,用戶編程時(shí)無需計(jì)算其具體數(shù)值大小,匯編程序能自動(dòng)計(jì)算出相應(yīng)的地址或偏移量,并填入到指令的機(jī)器碼中。
2、通常利用SJMP指令來實(shí)現(xiàn)“原地踏步”:HERE:SJMPHERE或
SJMP$其中:“$”代表PC的當(dāng)前值,SJMP$表示轉(zhuǎn)移到本條指令所處位置。以上指令機(jī)器碼中rel的值均為FEH。注意:(4)變址尋址轉(zhuǎn)移指令JMP@A+DPTR ;A+DPTR→PC機(jī)器碼:73H
該類指令是一條單字節(jié)雙周期無條件轉(zhuǎn)移指令。常常用于查表轉(zhuǎn)移(哈希查找法)在64KB地址范圍內(nèi)無條件轉(zhuǎn)移。
JZrel ;A=0,PC+2+rel→PC ;
A≠0,PC+2→PCJNZrel ;A≠0,PC+2+rel→PC
;
A=0,PC+2→PC2、條件轉(zhuǎn)移指令(1)累加器A判零轉(zhuǎn)移指令
已知:外部數(shù)據(jù)存貯器中DATA1為始址的數(shù)據(jù)塊以零為結(jié)束標(biāo)志,試編程將之送到以DATA2為始址的內(nèi)部RAM單元中。
例
解:程序?yàn)椋?/p>
MOVR0,#DATA1;外部數(shù)據(jù)存貯器數(shù)據(jù)塊始址送R0
MOVR1,#DATA2;內(nèi)部RAM數(shù)據(jù)塊始址送R1MAIN:MOVXA,@R0;取外部數(shù)據(jù)存貯器數(shù)據(jù)送A
JZQUIT ;若A=0,則跳轉(zhuǎn)到QUIT處, ;否則往下執(zhí)行
MOV@R1,A ;A中的數(shù)據(jù)送給內(nèi)部RAM單元中
INCR0 ;修改外部數(shù)據(jù)存貯器地址的指針
INCR1 ;修改內(nèi)部RAM地址的指針
SJMPMAIN ;循環(huán)執(zhí)行QUIT: SJMP$
CJNEA,#data,rel ;不相等轉(zhuǎn)移,即: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;不相等轉(zhuǎn)移,即: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)比較條件轉(zhuǎn)移指令(影響標(biāo)志位)CJNERn,#data,rel ;不相等轉(zhuǎn)移,即: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;不相等轉(zhuǎn)移,即:(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條件轉(zhuǎn)移指令DJNZdirect,rel ;
(direct)-1→(direct) ;若(direct)=0,則PC+3→PC ;若(direct)≠0,則PC+3+rel→PC
試編寫程序,將片外數(shù)據(jù)存儲(chǔ)器1000H單元開始的10H個(gè)數(shù),送到片內(nèi)數(shù)據(jù)存儲(chǔ)器20H單元開始的區(qū)間中。
例11.12
解:程序?yàn)椋?/p>
ORG0030H
MOVR2,#10H
;傳送個(gè)數(shù)→R2
MOVR0,#20H
;R0指向目標(biāo)區(qū)間起始地址
MOVDPTR,#1000H
;DPTR指向源數(shù)據(jù)起始地址START:MOVXA,@DPTR
;取一個(gè)數(shù)據(jù)
MOV@R0,A
;數(shù)據(jù)存入片內(nèi)RAM單元
INC R0
;目標(biāo)地址指針加1
INC DPTR
;源地址指針加1
DJNZR2,START
;判斷傳送個(gè)數(shù)
SJMP $
;退出循環(huán),停止程序運(yùn)行條件轉(zhuǎn)移指令均為相對(duì)轉(zhuǎn)移指令,轉(zhuǎn)移范圍都在以PC當(dāng)前值為基準(zhǔn)的-128~+127范圍內(nèi),因此指令的轉(zhuǎn)移范圍有限。條件轉(zhuǎn)移指令計(jì)算轉(zhuǎn)移地址的方法相同,即:
轉(zhuǎn)移地址=PC當(dāng)前值+rel地址偏移量rel在源程序中常用標(biāo)號(hào)替代,程序匯編時(shí)由匯編程序自動(dòng)換算成8位偏移量。注意:(1)調(diào)用指令3、子程序調(diào)用和返回指令a)長(zhǎng)調(diào)用指令LCALLaddr16;PC+3→PC;SP+1→SP,PC7~0→(SP);SP+1→SP,PC15~8→(SP);addr16→PC
三字節(jié)指令,在64KB地址范圍內(nèi)調(diào)用子程序。b)短調(diào)用指令A(yù)CALLaddr11;PC+2→PC;SP+1→SP,PC7~0→(SP);SP+1→SP,PC15~8→(SP);addr11→PC10~0
機(jī)器碼:a10a9a810001a7a6a5a4a3a2a1a0
雙字節(jié)指令,不影響標(biāo)志位,在2KB地址范圍內(nèi)尋址,以調(diào)用子程序。頁(yè)數(shù)決定于addr11的高3位,頁(yè)內(nèi)地址決定于addr11的低8位。
已知:MAIN=0200H,試問執(zhí)行如下指令后,SP及堆棧中數(shù)據(jù)如何變化?PC中內(nèi)容是什么?
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
調(diào)用子程序后必須返回主程序,因此,每段子程序的最后一條指令必須是返回指令RET。其功能是將調(diào)用子程序時(shí)壓入堆棧的斷點(diǎn)地址送回PC,使程序返回到主程序斷點(diǎn)處繼續(xù)往下執(zhí)行。a)子程序返回指令
b)中斷返回指令RETI;(SP)→PC15~8,SP-1→SP;(SP)→PC7~0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人教學(xué)工作計(jì)劃2022年生物
- 大學(xué)學(xué)習(xí)計(jì)劃3篇
- 個(gè)人銷售工作計(jì)劃展望7篇
- 銷售合同范文集合7篇
- 小學(xué)生鑒定評(píng)語(集合15篇)
- 2022年小班教師保教工作計(jì)劃
- 防治工作計(jì)劃模板集合7篇
- 九年級(jí)下冊(cè)數(shù)學(xué)教學(xué)工作計(jì)劃四篇
- 信達(dá)商社2025年度策略報(bào)告:景區(qū)板塊有望迎來新一輪產(chǎn)能擴(kuò)張政策利好+線下零售調(diào)改帶來行業(yè)性變革機(jī)遇
- 描寫人物的詞語3篇
- 鄉(xiāng)鎮(zhèn)衛(wèi)生院院長(zhǎng)工作職責(zé)
- 2024年小學(xué)體育新課標(biāo)測(cè)評(píng)考試題庫(kù)(含答案)
- 干式變壓器安全操作規(guī)程模版(3篇)
- 河南省南陽(yáng)市2024-2025學(xué)年七年級(jí)上學(xué)期多校第三次月考生物試題
- 屋頂分布式光伏發(fā)電項(xiàng)目施工重點(diǎn)難點(diǎn)分析及應(yīng)對(duì)措施
- 退休人員返聘勞動(dòng)合同三篇
- 檔案數(shù)字化加工服務(wù)方案
- 食品工藝學(xué)名詞解釋、簡(jiǎn)答題、填空題等
- 中醫(yī)腦癱課件教學(xué)課件
- 有關(guān)環(huán)衛(wèi)工人安全教育
- 2024年新聞宣傳新聞采編專業(yè)及理論知識(shí)考試題附含答案
評(píng)論
0/150
提交評(píng)論