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ù)是所在存儲單元的地址,這種尋址方式稱為直接尋址。直接尋址方式中操作數(shù)所在存儲器的空間有板有 3 種 :
(1) 內(nèi)部數(shù)據(jù)存儲器的 128 個(gè)字節(jié)單元 ( 內(nèi)部數(shù)據(jù)存儲器地址 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 )為變址,將兩者之和作為地址,找出該地址對應(yīng)的 rom 單元,再將該單元的數(shù)送給 a ,這種尋址方式稱為基址加變址尋址方式。 mcs-51 單片機(jī)中還有兩條變址尋址指令:
movc a, @a+pc
movc a, @a+dptr
6.相對尋址
例:
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 相對于下一條程序語句的 pc 不得超出 -128 ~ +127 字節(jié)的范圍。
7.特定寄存器尋址
例:inc a ; 累加器內(nèi)容加 1.
inc dptr ; 數(shù)據(jù)指針 dptr 的內(nèi)容加 1.
累加器 a 和數(shù)據(jù)指針 dptr 這兩個(gè)使用最頻繁的寄存器又稱為特定寄存器 ,
故稱特定寄存器尋址 .