文章目录
七种寻址方式
1、寄存器寻址
由指令指出寄存器组R0~R7
或者其它寄存器(仅 A,B,DPTR,Rn 4个)
的内容 作为操作数。
MOV A, R0; (A)=(R0) -----将 R0地址上的内容赋给 A
MOV P1, A ; (A)=(P1)
ADD A,R0; (A)=(A)+(R0) ----- 将R0地址上的内容 与 A地址上的内容相加 再赋给 A
INC Rn ;INC
是自加一的作用 (Rn) = (Rn)+1 Rn = R0…R7 ,三位二进
制来表示
2、直接寻址(操作数是片内RAM)
指令中所给出的操作数是片内RAM单元的地址。在此地址单元中存放着一个被操作的数。
MOV A,40H ; A = (40H)
MOV A, 3AH ;(A) = (3AH)
MOV A,P1 ;(A) = (P1口) 或者写成 MOC A, 90H ;90H是P1口的地址
注意
:
1.给的是地址,但是取的是其中的内容。
2.直接寻址的地址占一字节,故一条直接寻址方式的指令至少
占内存2个单元
。
3、立即数寻址
指令操作码后面紧跟的是一字节或两字节操作数,用#
表示,以区别直接地址。
MOV A, 3AH ;(A) = (3AH) ----此处的3AH 指的是3AH单元里的
内容
MOV A, #3AH ;(A) = 3AH ----把3AH这个数本身
送累加器A。
89c51/s51 有1条指令要求操作码后面紧跟的是 2字节立即数
MOV DPTR, #DATA16
MOV DPTR, #2000H ; (DPTR)= 2000H 操作码是8位,20 00 是16位
4、寄存器间接寻址(两把抽屉两把钥匙,出门只带1把就行)
操作数的地址事先存放于某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。
MOV A,@R0 ;-----将片内RAM 65H单元的内容 47H 送 A ,R0中的内容为 65H
注意:
1.访问片内RAM 低128字节
和片外RAM低地址的256个单元
时,用R0
或R1
作地址指针
;
2.在访问全部64KB外部RAM
时,使用DPTR
作地址指针进行间接寻址
。
5、变址寻址(基址寄存器 + 变址寄存器间接寻址)
变址寻址是以某个寄存器的内容为基地址,然后再这个基地址的基础上加上地址偏移量形成真正的操作数地址。
A为变址寄存器, 数据指针 DPTR 或 PC 为基址寄存器,地址偏移量是累加器A的内容。
以DPTR 或 PC 的内容与累加器A 的内容之和作为操作数的16位程序存储器地址。
MOVC A, @A+DPTR ; (A) = ((A)+(DPTR))
注意:
1.特征是带有 @
;
2.变址寻址方式只能
访问程序存储器
;
3.多用于查表操作。
6、相对寻址
只出现在相对转移指令中。指令执行时,是以当前的 PC值加上指令中规定的偏移量 rel 而形成实际的转移地址。
一般把相对转移指令操作码所在的地址称为源地址
,转移后的地址称为目的地址
所以有: 目的地在 = 源地址 + 2(相对转移指令字节数) + rel
设rel=75H,CY =1
JC rel
源地址为1000H,转移的目标地址是1077H。
7、位寻址(片内RAM(20H~2FH)某一单元中的一位)
采用位寻址方式的指令的操作数将是8位二进制数中的1位。
注意:
内RAM有2个区域可以位寻址:
1.20F~2FH 的16个单元中的128位;
2.字节地址能被8整除的特殊功能寄存器(SFR)。