51单片机寻址方式

上微接口技术时老师讲了七种,下面对其一次进行讲解示范
在这里插入图片描述
1.立即寻址
采用立即寻址的指令一般是双字节,第 1 个字节是指令的操作码,第 2 个字节是立即数。立即数前面应加前缀“#”,以区别直接地址。因此指令中的操作数就是放在程序存储器里的
常数 — 立即数。

MOV A,#70H ;(A)← 70H

2.直接寻址
直接寻址是指在指令中直接给出操作数单元的地址。一般是双字节或 3 字节指令。第 1字节为操作码,第 2、3 字节为操作数的地址码。直接寻址方式访问以下 3 种编码空间。
(1)片内 RAM 低 128 字节;
(2)特殊功能寄存器 SFR;
(3)位地址空间。
其中特殊功能寄存器 SFR 和位地址空间只能用直接寻址方式来访问。

ANL 70H,#48H ;(70H) ←(70H)∧ 48H

操作数 1 为 70H 采用直接寻址方式,70H 是它的地址;操作数 2 为 #48H,采用的是立即寻址方式,48H 是立即的常数 48H。
3.寄存器寻址
寄存器寻址方式指出以某个寄存器的内容为操作数,即指出寄存器组 R0~R7 中的某一个或其他寄存器(A,B,DPTR 和进位 CY 等)的内容为操作数。当寄存器为 Rn 时,操作
码的低 3 位指明是 R0~R7 中的哪一个。4 个寄存器组共有 32 个通用工作寄存器,但在指令中只能使用当前寄存器组。因此在使用前要通过指令 PSW 中的 RS1、RS0 以选择使用当前寄存器组。

INC R0;(R0) ← (R0)+1

在这里插入图片描述
4.寄存器间接寻址
寄存器间接寻址是指在指令中以寄存器的内容为指定的地址中去取操作数。在寄存器寻址方式中,寄存器存放的是操作数。而在寄存器间接寻址方式中,寄存器中存放的则是操作
数的地址,也即指令的操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。在寄存器间接寻址中,应在寄存器的名称前面加前缀“@”。
寄存器间接寻址的寻址范围如下。
(1)片内 RAM 的低 128 单元:此处只能使用 R0 或 R1 作间址寄存器,其形式为 @Ri(i=0,1)。
(2)片外 RAM 的低 256 单元:同样使用 R0 或 R1 作间址寄存器。例如:MOVX A,@R0,
此时片外 RAM 地址的低 8 位由 Ri 中内容决定,高 8 位地址由 P2 口中内容决定。

MOV A,@ R0 ;(A) ← ( ( R0 ) )

指令中寄存器 R0 的内容(R0)为操作数的地址
5.基址寄存器加变址寄存器的间接寻址
基址寄存器加变址寄存器的间接寻址又简称为变址寻址。变址寻址中的基址寄存器是数据指针 DPTR 或者程序计数器 PC,在 DPTR 或 PC 中应预先存放操作数的基地址;累加器 A中存放操作数地址对基地址的偏移量(该地址偏移量是 00H~FFH 范围内的一个无符号数)。单片机把基地址和地址偏移量相加,形成在程序存储器 ROM 中的操作数地址。

编制程序,将片外 ROM 的 0303H 单元中的常数 X=1EH 取到累加器 A。
解:利用变址寻址指令 MOVC A,@A+DPTR,可以形成覆盖全部 64K 程序存储区域的
操作数地址。取基地址为 0300H,地址偏移量为 03H,则相应程序为:
MOV DPTR, #0300H ;(DPTR) ← 0300H
MOV A, #03H ;(A) ← 03H
MOVC A,@A+DPTR ;(A) ← X=1EH

MCS-51 系统中变址寻址方式只对程序存储器 ROM 进行寻址,一般用于查表操作。变址
寻址指令只有以下 3 条。
MOVC A, @A+DPTR
MOVC A, @A+PC
JMP @A+DPTR
其中前两条是程序存储器读指令,后一条是无条件转移指
令。
6.相对寻址
相对寻址方式在相对转移指令中使用。相对转移指令执行时,是以当前的 PC 值加上指令中规定的偏移量 rel 而形成实际的转移地址。这里所说的 PC 的当前值是指执行完相对转移指令后的 PC 值。一般将相对转移指令操作码所在的地址称为源地址,转移后的地址称为目的地址。于是有:
目的地址 = 源地址 +2 或 3(相对转移指令字节数)+rel,
rel 为补码形式的 8 位地址偏移量,在 -128~+127 范围之内。

JC 80H ;C=1 时转移

设这条双字节指令存放在 1005H 和 1006H,则基地址是执行完这条指令后 PC 值 =1007H,
而地址偏移量 rel=80H 是 -128 的补码,它们相加后得到当 C=1 时要执行指令的地址是0F87H。
7.位寻址
位寻址是指对片内 RAM 的位寻址区(地址为 20H~2FH,相应位地址为 00H~7FH,共 16 个单元 128 位)和可以位寻址的特殊功能寄存器 SFR(共有 11 个 SFR,实有寻址位 83位)进行位操作时的寻址方法。

(1)直接使用位寻址区中的位地址
例如:
MOV C , 7EH ;(CY) ← (7EH)
(2)采用第 n 个字节单元的第 n 位表示方法
上述位地址 7EH 可以表示为 2FH.6,相应指令为:
MOV C , 2FH.6 ;(CY) ← (2FH.6)
(3)可以位寻址的 SFR 可以采用寄存器名加上位数的方法
例如累加器 A 中最低位可以表示为 ACC.O,把 ACC.O 位状态送到进位标志位 CY 的指
令是:
MOV C , ACC.O ;(CY) ← (ACC.O)
(4)可以位寻址的 SFR 中一些寻址位是有名称的
例如 PSW 寄存器第 5 位为 FO 标志位,则可直接使用 FO 表示该位。

整合下寻址空间
在这里插入图片描述
如果对某些指令有些迷茫,可以看我的这篇博客
51单片机指令速查表(超全)

发布了85 篇原创文章 · 获赞 33 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44146373/article/details/105219928
今日推荐