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