1. 立即寻址
例: MOV A , #10H ;将立即数 10H 送给 A 累加器,即 (A) ← 10H
注意:立即数的前面必有 “#” 标志。
2.直接寻址
例: MOV A , 36H ;将内部 RAM 中 36H 单元内的数据
送到累加器 A 中,即 A ← (36H)
在上面这条指令中,带下划线的操作数是所在存储单元的地址,这种寻址方式称为直接寻址。直接寻址方式中操作数所在存储器的空间有板有 3 种 :
(1) 内部数据存储器的 128 个字节单元 ( 内部数据存储器地址 00H~7FH)
(2) 位地址空间 .
(3) 特殊功能寄存器 , 特殊功能寄存器只能用直接寻址方式进行访问 .
3.寄存器寻址 (Rn)
例: MOV A, R3 ;将通用寄存器 R3 中的数据送给 A ,即 A ← (R3)
在上面这条指令中,带下划线的操作数 ( 源操作数 ) 是当前工作寄存器区
的某个寄存器,这种寻址方式称为寄存器寻址。
比如:
XCH A, R1 ;累加器 A 和寄存器 R1 中的数互换
ADD A, R2 ; 累加器 A 和寄存器 R2 中的数相加
4.间接寻址
例: MOV R0, #30H
MOV A , @R0 ;以 R0 中的内容作为操作数的地址 .A ← ((R0)). 在上面的指令中,带下划线的不是 R0 ,而是以( R0 )为地址,间接找到内部 RAM 中的 30H 单元,将 (30H) 送给 A ,这种寻址方式称为寄存器间接寻址。
可用 R0、R1 和 DPTR 作间址寄存器,访问片内 RAM 或片外 64KB 的 RAM 地址空间。
比如:
MOV DPTR, #0CFA0H ;将十六位地址 CFA0H 赋给数据指针 DPTR
MOVX A, @DPTR ;将片外 RAM ( CFA0H )单元内的数送给 A
5.基址加变址寻址
例:
MOVC A, @A+DPTR ;将地址为 (A) + (DPTR) 的 ROM ;单元中的数送给 A
在上面这条指令中,带下划线的操作数是以( DPTR )为基址,( A )为变址,将两者之和作为地址,找出该地址对应的 ROM 单元,再将该单元的数送给 A ,这种寻址方式称为基址加变址寻址方式。 MCS-51 单片机中还有两条变址寻址指令:
MOVC A, @A+PC
MOVC A, @A+DPTR
6.相对寻址
例:
CJNE A , #80H , BUDENG ;如 (A) ≠ 80H ,跳转到 BUDENG
JNC DAYU ;如 (A) > 80H ,跳转到 DAYU
……
BUDENG: SETB FLAG0 ;置位标志位 FLAG0
……
DAYU: SETB FLAG1 ;置位标志位 FLAG1
……
在上面这个程序片段中,带下划线的操作数指明了程序跳转的目的位置,这个目的位置的 PC 相对于下一条程序语句的 PC 不得超出 -128 ~ +127 字节的范围。
7.特定寄存器寻址
例:INC A ; 累加器内容加 1.
INC DPTR ; 数据指针 DPTR 的内容加 1.
累加器 A 和数据指针 DPTR 这两个使用最频繁的寄存器又称为特定寄存器 ,
故称特定寄存器寻址 .