80C51单片机指令寻址方式


首先介绍单片机指令系统的操作码和操作数

操作码

1.用于规定指令进行什么操作
2.用英文缩写表示,如加法ADD、减法SUBB、传送MOV等
3.操作码与操作数之间用空格分隔,操作数与操作数之间用“,”隔开
4.在指令中不能缺少操作码
5.操作码是给定的,不能自创

操作数

1. 什么是操作数?

操作数同样是指令的一部分,其中包含要操作的数据在寄存器中的内存位置。

2. 操作数是由寄存器地址、内存地址或立即数来指定的。

**立即操作数:**指令要操作的数据以常量的形式出现在指令中,称为立即数,它只能作为源操作数 。
**寄存器操作数:**指令要操作的数据存放在CPU中的寄存器里,指令中给出寄存器名即可。
**内存操作数:**指令要操作的数据存放在内存某些单元中,指令中给出内存单元物理地址(实际上指令只给出了偏移地址,段地址采用隐含方式给出,也可以使用跨段方式指出当前段地址)

3.操作数的数量和位宽根据CPU和指令的不同而不同。根据可使用的操作数的数量,指令可以分为3操作数形式、2操作数形式和 1操作数形式.

符号 含义
Rn n=07,表示当前寄存器组的8个通用寄存器R0R7中的一个
Ri i=0、1,可用作间址寻址的寄存器,只能是R0,R1中的一个
Direct 内部的8位地址,直接寻址方式,寻址范围为256个单元
#data 指令中的8位立即数
#data16 指令中的16位立即数
addr16 16位目的地址,只限于LCALL和LJMP中使用
addr11 11位目的地址,只限于ACALL和AJMP指令使用
rel 相对转移指令中的偏移量,为8位带符号数,为SJMP和所有条件转移指令所使用
DPTR 数据指针
bit 片内数据存储器中的直接寻址位
A 累加器
B B寄存器
C 进位标志位
/ 位地址的前缀标志,表示对该位操作数取反

指令寻址方式

大多数指令执行时都需要使用操作数,所以存在如何取得操作数的问题,这个叫做指令的寻址方式。

寄存器寻址方式

此操作数在寄存器中,只要指定了寄存器就能得到操作数。

  1. 主要对象是通用寄存器R0-R7
  2. 部分专用寄存器,累加器A、AB寄存器以及数据指针DPTR
;后为注释
INC   R3    	;(R3)(R3)+1
MOV   A ,R0    ;把寄存器R0的内容传送到累加器A中

直接寻址方式

  1. 操作数直接以存储单元地址的形式给出。
  2. 主要对象是内部数据存储器。
  3. 这种寻址方式只限于内部RAM
位置 具体
低128单元 直接以单元地址形式给出
专用寄存器 可以寄存器符号形式给出
MOV   A,70H     ;(A)(70H)

把内部RAM 70H单元中的数据传送给累加器A。

寄存器间接寻址

寄存器中是操作数的地址,而不是操作数本身。与寄存器寻址方式的不同。
为了区别寄存器寻址和寄存器间接寻址,间接寻址中,常在寄存器名称前加@

位置 具体
内部RAM低128单元 只能使用R0或R1作为间址寄存器@Ri i=0/1
外部RAM64KB @DPTR 或@Ri
MOV   A,@R0 ;(A)((R0))以RO寄存器3AH为地址,把该地址单元的内容送给累加器A
MOVX A,@DPTR ;把DPTR指定的外部RAM的内容送给累加器A
MOVX   A,@R0  ;由R0指定的低位字节的地址外部RAM单元的内容送给累加器A

立即寻址方式

指令的操作数直接在指令中给出,称为立即数“#”前缀
立即数可以多种进制表达
十六进制后缀H、二进制后缀B、十进制带后缀D或省略。
#data8
#data16

MOV   A,#20H      	;(A)20H
MOV DPTR,#3456H	;(DPH)34H ;(DPL)56H(需要注意两者位数是否相同)
MOV A,#0BH	
MOV A,#1011B 
MOV A,#11D 
MOV A,#11

变址寻址方式

以程序计数器PC或数据指示器DPTR中的内容为基地址,加上累加器A(变址寄存器)中的内容作为操作数的地址。
应注意A中的数为无符号数。
变址寻址方式只能对程序存储器ROM进行寻址, 是一字节指令。
注意变址寻址指令只有以下三条:

MOVC  A,@A+DPTR		 ;(A)((A)+(DPTR))把DPTR和A的内容相加得到一个程序存储器地址,再把该地址单元的内容送给累加器A
MOVC  A,@A+PC     ;(A)((A)+(PC))
JMP @A+DPTR

下面是关于第一条指令的解释会更清晰一点
在这里插入图片描述

位寻址方式

位寻址范围

  1. 内部RAM中的位寻址区(20H-2FH),位地址范围00H-7FH。寻址位的两种表示方法:位地址和单元地址加位数,如7FH单元第0位,用位地址表示为78H,单元地址加位数表示为7FH.0
  2. 专用寄存器中的可寻址位(特殊功能寄存器的单元地址能被8整除可位寻址80H 90H…)。
直接使用位地址:	CLR D3H
位名称表示: 	CLR RS0	
单元地址加位数: 	CLR D0H.3
专用寄存器名称加位数:CLR PSW.3

相对寻址方式

是为解决程序转移而设置的,只为转移指令所采用
目的地址=转移指令地址+转移指令字节数+rel
偏移量rel是一个带符号的8位二进制数,所能表示的数的范围为-128~+127
则以转移指令所在地址为基点向前最大可转移(127+转移指令字节数)个单元地址,向后最大可转移(128-转移指令字节数)个单元地址。

猜你喜欢

转载自blog.csdn.net/fcxgfdjy/article/details/126707219