單片機(jī)的尋址方式
執(zhí)行任何一條指令都需要使用操作數(shù)。尋址方式就是根據(jù)指令中給出地址尋找操作數(shù)地址的方式。
根據(jù)指令操作的需要,計(jì)算機(jī)有多種尋址方式?偟膩碚f,尋址方式越多,計(jì)算機(jī)的功能就越強(qiáng),靈活性越大,指令系統(tǒng)也越復(fù)雜,因此,在設(shè)定尋址方式時(shí),應(yīng)考慮到需要和可能. 51單片機(jī)指令系統(tǒng)中共有7種尋址方式。
1.立即尋址:
立即尋址是指在指令中直接給出操作數(shù),出現(xiàn)在指令中的操作數(shù)稱為立即數(shù),因此就將這種尋址方式稱為立即尋址.為了與直接尋址指令中的直接地址相區(qū)別,在立即數(shù)前面應(yīng)加前綴“#”。立即尋址時(shí),指令中地址碼部分給出的就是操作數(shù),即取出指令的同時(shí)立即得到了操作數(shù),例如指令:
MOV A,#3EH ;A ---3EH
式中,3EH就是立即數(shù),指令功能是把8位立即數(shù)3EH送入累加器A.
此外,在指令系統(tǒng)中還有一條16位立即數(shù)指令,即:
MOV DPTR, #datal6
其功能是把16位立即數(shù)送入數(shù)據(jù)指針I(yè)寄存器。
2.直接尋址
直接尋址時(shí),指令中地址碼部分直接給出了操作數(shù)單元的有效地址.例如指令:
MOV A,7EH ;A --- (7EH)
其功能是把片內(nèi)RAM中7EH單元內(nèi)的數(shù)據(jù)傳送給累加器A。
直接尋址方式只能給出8位地址,因此,此種尋址方式的尋址范圍只限于片內(nèi)RAM,具體地說:
(1)低128單元在指令中直接以單元地址形式給出。
(2)特殊功能寄存器,這時(shí)除了可以單元地址形式給出外,還可以寄存器符號形式給出。雖然特殊功能寄存器可以便用符號標(biāo)志,但在指令代碼中還是按地址進(jìn)行編碼的。需要說明的是,直接尋址是訪問特殊功能寄存器的惟一方法。
3.寄存器尋址:
寄存器尋址是指在指令中將指定寄存器的內(nèi)容作為操作數(shù)。因此,指定了寄存器就能得到操作數(shù).寄存器尋址時(shí),指令中地址碼給出的是某—通用寄存器的編號,例如指令:
MOV A , R1 ; A---(R1)
其功能是把寄存器R1的內(nèi)容送到累加器A中。由于操作數(shù)在A中,所以指定了R1也就得到了操作數(shù)。寄存器尋址方式的范圍包括:
(1)4個(gè)寄存器組共32個(gè)通用寄存器,但在指令中只能使用當(dāng)前寄存器組.因此,在使用前要通過t指定PSw中的Rs1、RS0,以選擇當(dāng)前寄存器組。
(2)部分特殊功能寄存器。例如,累加器A、寄存器B以及數(shù)據(jù)指針 DPTR。
4.寄存器間接尋址
寄存器間接尋址是指在指令中要到寄存器的內(nèi)容所指的地址中去取操作數(shù)?梢钥闯觯诩拇嫫鲗ぶ贩绞街,寄存器中存放的是操作數(shù);而在寄存器間接尋址方式中,寄存器中存放的則是操作數(shù)的地址,即寄存器為地址指針。這就是說,指令的操作數(shù)是通過寄存器間接得到的,因此稱為寄存器間接尋址。
寄存器間接尋址也需要以寄存器符號名稱的形式表示。為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址中,應(yīng)在寄存器的名稱前加前綴“@”,例如指令:
MOV A,@R0; A---((R0))
寄存器間接尋址的尋址范圍是:
(1)片內(nèi)RAM低128單元,這里只能使用R0,R1作為間址寄存器.其通用形式寫為@Ri(i=0,1);
(2)片外RAM64KB;使用DPTR作為間址寄存器,書寫形式為@DPTR.
(3)片外RAM低256單元.除可使用DPTR作為間址寄存器外還可以使用R0,R1作為間址寄存器.
(4)堆棧區(qū),堆棧操作指令(PUSH和POP)也屬于寄存器間接尋址,即使用SP(堆棧指針)作為間址寄存器的間接尋址方式.
5.變址尋址
變址尋址是以DPTR或者PC作為基礎(chǔ)寄存器,累加器A作為變址寄存器,以兩者內(nèi)容相加形成的16位程序存儲器地址作為操作數(shù)地址.例如指令:
MoVC A, @A+DPTR ; A --- ((A)十(DPTR))
其功能是將DPTR和A的內(nèi)容相加所得到的程序存儲器地址單元的內(nèi)存送累加器A.
變址尋址指令有如下特點(diǎn):
(1)變址尋址方式只能對程序存儲器進(jìn)行尋址。
(2)變址尋址方式的指令只有三條:
MOVC A,@A+DPTR;
MOVC A,@A+PC;
JMP @A+DPTR;
其中,前兩條是程序存儲器讀指令,后一 條是無條件轉(zhuǎn)移指令.
(3)盡管變址尋址方式復(fù)雜,但這三條指令都都是單字節(jié)指令.
(4)變址尋址力式可用于查表操作。
6 相對尋址:
相對尋址是指在指令中l(wèi)給出的操作數(shù)為指令轉(zhuǎn)移的偏移量。相對尋址方式是為實(shí)現(xiàn)程序的相對轉(zhuǎn)移而設(shè)置的,為相對轉(zhuǎn)移指令所采用:
在相對轉(zhuǎn)移指令中,給出地址偏移量(在51單片I機(jī)系列的指令系統(tǒng)中,以“Rel"表示)把Pc的當(dāng)前值加上偏移量就構(gòu)成了程序轉(zhuǎn)移目的地的地址。而Pc的當(dāng)前值是指執(zhí)行完轉(zhuǎn)移指令后的PC值,即轉(zhuǎn)移指令的Pc值加上它的字節(jié)數(shù)。因此.轉(zhuǎn)移的目的地的地址可用如下公式表示:
目的地地址=轉(zhuǎn)移指令所在地地址+轉(zhuǎn)移指令字節(jié)數(shù)+Rel
在51單片l機(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 70H
該指令表示若進(jìn)位位c為o,則程序計(jì)數(shù)器Pc中的內(nèi)容不變,不轉(zhuǎn)移;若C為1,則以Pc中當(dāng)前值為基地址,加上偏移量70H后所得結(jié)果作為該轉(zhuǎn)移指令的目的地址。
7 位尋址
51單片機(jī)有位處理功能,可以對數(shù)據(jù)位進(jìn)行操作,因此就有相應(yīng)的位尋址方式.
位尋址的范圍是:
(1)片內(nèi)RAM中的位尋址區(qū)
片內(nèi)RAM中的單元地址為20H—2FH,共16個(gè)單元128位.為位尋址區(qū),位地址是00H~7FH。這128個(gè)位的尋址使用直接地址表示。例如指令:
MOV C,2BH;
該指令的功能是把位尋址區(qū)的2BH位狀態(tài)送給位C。
(2)可位尋址的特殊功能寄存器位。
可位尋址的特殊功能寄存器有11個(gè),對應(yīng)尋址位共83位。對這些尋址位在指令中有以下4種表示方法。
·直接使用位地址表示法。
·單元地址加位的表示方法。例如,88H單元的位5,則表示為88H.5。
·特殊功能寄存器符號加位的表示方法。例如,psw寄存器的位5,可表示為psw.5。
·位名稱表示方法,特殊功能寄存器中的一些尋址位是有名稱的。例如,PSW寄存器位5為F0標(biāo)志位,則可使用F0表示該位。
一個(gè)尋址位有多種表示方法,看起來似乎復(fù)雜,實(shí)際上將為程序設(shè)計(jì)帶來方便。
位尋址時(shí),操作數(shù)是二進(jìn)制數(shù)的某一位,其地址出現(xiàn)在指令中,例如指令:
SETB bit ; (bit)---1
編輯:admin 最后修改時(shí)間:2018-05-18