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 这两个使用最频繁的寄存器又称为特定寄存器 ,
故称特定寄存器寻址 .