51系列單片機(jī)尋址方式尋址方式1: 立即數(shù)尋址尋址方式2: 寄存器尋址尋址方式3: 寄存器間接尋址
所謂尋址方式就是單片機(jī)指令中提供的操作數(shù)
的形式。也就是尋找操作數(shù)或操作數(shù)所在地址的方式。在51系列單片機(jī)中,存放數(shù)據(jù)的存儲器
空間有4種:內(nèi)部RAM、特殊功能寄存器
SFR、外部RAM和程序存儲器
ROM。其中,內(nèi)部RAM和SFR統(tǒng)一編址
,外部RAM和程序存儲器是分開編址的。為了區(qū)別指令中操作數(shù)所處的地址空間
,對于不同存存儲器的數(shù)據(jù)操作,采用不同的尋址方式。立即數(shù)尋址
立即數(shù)尋址又稱立即尋址,即指令中直接給出操作數(shù)的尋址方式稱為立即數(shù)尋址。在51系列單片機(jī)指令系統(tǒng)中,立即數(shù)用前面加“#”號的8位數(shù)表示(#data,如#30H)或16位數(shù)(#data16,如#2052H)表示。舉例說明立即數(shù)尋址方式,以傳送指令為例。
例:MOV A, #80H ;80H——>A
MOV DPTR, #2000H ;2000H——>DPTR
直接尋址
指令中直接給出操作數(shù)地址(dir)的尋址方式稱為直接尋址。尋址對象為:1 內(nèi)部數(shù)據(jù)存儲器,在指令中以直接地址表示;2特殊功能寄存器SFR,在指令中用寄存器名稱表示。
下面舉例說明。
例:MOV A, 25H ;內(nèi)部RAM的(25H)——>A
MOV P0, #45H ;45H——>P0 ,P0為直接尋址的SFR
MOV 30H,20H ;內(nèi)部RAM的(20H)——>(30H)
寄存器尋址
以通用寄存器的內(nèi)容為操作數(shù)的尋址方式稱為寄存器尋址。通用寄存器包括:A、B、DPTR、R0~R7。其中B寄存器僅在乘法、除法指令中為寄存器尋址,在其它指令中為直接尋址。A寄存器可以寄存器尋址,又可以直接尋址(此時(shí)寫作ACC)。直接尋址和寄存器尋址的差別在于,直接尋址是操作數(shù)所在的字節(jié)地址(占一個(gè)字節(jié)),寄存器尋址是寄存器編碼出現(xiàn)在指令碼中。寄存器尋址速度比直接尋址要快。除上面所指的幾個(gè)寄存器外,其它特殊功能寄存器一律為直接尋址。
例:MOV A, R0 ;R0——>A,R0為寄存器尋址
MUL AB ;A×B——>BA,A,B為寄存器尋址
MOV B, R0 ;R0——>B,R0為寄存器尋址,B為直接尋址
PUSH ACC ;A的內(nèi)容入棧,A為直接尋址
ADD A, ACC ;A為寄存器尋址,ACC為直接尋址
寄存器間接尋址
以寄存器中的內(nèi)容為地址,該地址的內(nèi)容為操作數(shù)的尋址方式稱為寄存器間接尋址。能夠進(jìn)行寄存器間接尋址的寄存器有:R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。寄存器間接尋址的存儲空間包括內(nèi)部數(shù)據(jù)存儲器和外部數(shù)據(jù)存儲器。由于內(nèi)部數(shù)據(jù)存儲器共有128字節(jié),因此用一字節(jié)的R0和R1可間接尋址整個(gè)空間。而外部數(shù)據(jù)存儲器最大可達(dá)64K,僅R0或R1無法尋址整個(gè)空間,為此需要由P2端口提供外部RAM高8位地址,由R0或R1提供低8位地址,由此共同尋址64K字節(jié)范圍。也可用16位的DPTR寄存器間接尋址64K字節(jié)存儲空間。
在指令中,是對內(nèi)部RAM還是對外部RAM尋址,區(qū)別在于對外部RAM的操作僅有數(shù)據(jù)傳送指令,并且用MOVX作為操作助記符。
例:MOV @R0, A ;A——>以R0內(nèi)容為地址的內(nèi)部RAM中
MOVX @DPTR, A ;A——>以DPTR內(nèi)容為地址的外部RAM中
變址尋址
由寄存器DPTR或PC中的內(nèi)容加上A累加器內(nèi)容之和而形成操作數(shù)地址的尋址方式稱為變址尋址。變址尋址只能對程序存儲器中的數(shù)據(jù)進(jìn)行尋址操作。由于程序存儲器是只讀存貯器,因此變址尋址只有讀操作而無寫操作。在指令符號上采用MOVC的形式。
例:MOVC A, @A+DPTR ;(A+DPTR)——>A
MOVC A, @A+PC ; (PC)+1——PC ((A)+(PC))——>A
圖4 MOVC A, @A+DPTR
圖5 MOVC A, @A+PC
位尋址
對位地址中的內(nèi)容進(jìn)行位操作的尋址方式稱為位尋址。由于單片機(jī)中只有內(nèi)部RAM和特殊功能寄存器的部分單元有位地址,因此位尋址只能對有位地址的這兩個(gè)空間進(jìn)行尋址操作。位尋址是一種直接尋址方式,由指令給出直接位地址。與直接尋址不同的是,位尋址只給出位地址,而不是字節(jié)地址。
例:SETB 20H ;1——>20H位
MOV 32H, C ;進(jìn)位Cy(即指令中的C)——>32H位
相對尋址
以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為基址,加上指令給出的一字節(jié)補(bǔ)碼數(shù)(偏移量)形成新的PC值的尋址方式稱為相對尋址。相對尋址方式只修改PC值,故主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。
例:SJMP 08H ;PC+2+08H——>PC (該指令為兩字節(jié),所以有PC+2)