單片機(jī)幾種不同的尋址方法
1. 立即尋址例: MOV A , #10H ;將立即數(shù) 10H 送給 A 累加器,即 (A) ← 10H
注意:立即數(shù)的前面必有 “#” 標(biāo)志。
2.直接尋址
例: MOV A , 36H ;將內(nèi)部 RAM 中 36H 單元內(nèi)的數(shù)據(jù)
送到累加器 A 中,即 A ← (36H)
在上面這條指令中,帶下劃線的操作數(shù)是所在存儲(chǔ)單元的地址,這種尋址方式稱為直接尋址。直接尋址方式中操作數(shù)所在存儲(chǔ)器的空間有板有 3 種 :
(1) 內(nèi)部數(shù)據(jù)存儲(chǔ)器的 128 個(gè)字節(jié)單元 ( 內(nèi)部數(shù)據(jù)存儲(chǔ)器地址 00H~7FH)
(2) 位地址空間 .
(3) 特殊功能寄存器 , 特殊功能寄存器只能用直接尋址方式進(jìn)行訪問 .
3.寄存器尋址 (Rn)
例: MOV A, R3 ;將通用寄存器 R3 中的數(shù)據(jù)送給 A ,即 A ← (R3)
在上面這條指令中,帶下劃線的操作數(shù) ( 源操作數(shù) ) 是當(dāng)前工作寄存器區(qū)
的某個(gè)寄存器,這種尋址方式稱為寄存器尋址。
比如:
XCH A, R1 ;累加器 A 和寄存器 R1 中的數(shù)互換
ADD A, R2 ; 累加器 A 和寄存器 R2 中的數(shù)相加
4.間接尋址
例: MOV R0, #30H
MOV A , @R0 ;以 R0 中的內(nèi)容作為操作數(shù)的地址 .A ← ((R0)). 在上面的指令中,帶下劃線的不是 R0 ,而是以( R0 )為地址,間接找到內(nèi)部 RAM 中的 30H 單元,將 (30H) 送給 A ,這種尋址方式稱為寄存器間接尋址。
可用 R0、R1 和 DPTR 作間址寄存器,訪問片內(nèi) RAM 或片外 64KB 的 RAM 地址空間。
比如:
MOV DPTR, #0CFA0H ;將十六位地址 CFA0H 賦給數(shù)據(jù)指針 DPTR
MOVX A, @DPTR ;將片外 RAM ( CFA0H )單元內(nèi)的數(shù)送給 A
5.基址加變址尋址
例:
MOVC A, @A+DPTR ;將地址為 (A) + (DPTR) 的 ROM ;單元中的數(shù)送給 A
在上面這條指令中,帶下劃線的操作數(shù)是以( DPTR )為基址,( A )為變址,將兩者之和作為地址,找出該地址對(duì)應(yīng)的 ROM 單元,再將該單元的數(shù)送給 A ,這種尋址方式稱為基址加變址尋址方式。 MCS-51 單片機(jī)中還有兩條變址尋址指令:
MOVC A, @A+PC
MOVC A, @A+DPTR
6.相對(duì)尋址
例:
CJNE A , #80H , BUDENG ;如 (A) ≠ 80H ,跳轉(zhuǎn)到 BUDENG
JNC DAYU ;如 (A) > 80H ,跳轉(zhuǎn)到 DAYU
……
BUDENG: SETB FLAG0 ;置位標(biāo)志位 FLAG0
……
DAYU: SETB FLAG1 ;置位標(biāo)志位 FLAG1
……
在上面這個(gè)程序片段中,帶下劃線的操作數(shù)指明了程序跳轉(zhuǎn)的目的位置,這個(gè)目的位置的 PC 相對(duì)于下一條程序語(yǔ)句的 PC 不得超出 -128 ~ +127 字節(jié)的范圍。
7.特定寄存器尋址
例:INC A ; 累加器內(nèi)容加 1.
INC DPTR ; 數(shù)據(jù)指針 DPTR 的內(nèi)容加 1.
累加器 A 和數(shù)據(jù)指針 DPTR 這兩個(gè)使用最頻繁的寄存器又稱為特定寄存器 ,
故稱特定寄存器尋址 .
編輯:admin 最后修改時(shí)間:2018-05-08