8051的寻址方式
在本节中,我们将看到8051微控制器的不同寻址模式。在8051中,有1字节、2字节指令,很少有3字节指令。操作码是8位长。由于操作码是8位数据,因此有256种可能性。在256个中,实现了255个操作码。
时钟频率为12MHz,因此64种指令类型在1µs内执行完毕,其余时间仅为2µs。乘法和除法运算需要4µsto来执行。
在8051中有六种寻址方式。
立即寻址模式
寄存器寻址方式
直接寻址方式
寄存器间接寻址模式
索引寻址模式
隐式寻址模式
立即寻址模式
在这种立即寻址模式中,数据在指令本身中提供。在操作码之后立即提供数据。这些是立即寻址模式的一些示例。
MOVA, #0AFH; MOVR3, #45H; MOVDPTR, #FE00H;
在这些指令中,#符号用于立即数。在最后一条指令中,有DPTR。DPTR代表数据指针。使用它,它指向外部数据存储器位置。在第一条指令中,立即数是AFH,只是在开头加了一个0。所以当数据以A到F开头时,数据前面要加0。
寄存器寻址方式
在寄存器寻址模式中,源或目标数据应存在于寄存器中(R0到R7)。这些是RegisterAddressing模式的一些示例。
MOVA, R5; MOVR2, #45H; MOVR0, A;
在8051中,没有像MOVR5,R7这样的指令。但是我们可以通过使用这条指令MOVR5,07H或使用MOV05H,R7得到相同的结果。但是当所选的寄存器银行是RB0时,这两个指令将起作用。要使用另一个寄存器组并获得相同的效果,我们必须将寄存器组的起始地址与寄存器号相加。例如,如果选择了RB2,而我们要访问R5,那么地址将是(10H+05H=15H),因此指令看起来像这样MOV15H,R7。这里10H是RegisterBank2的起始地址。
直接寻址模式
在直接寻址模式下,源地址或目的地址通过指令中的8位数据指定。在这种模式下只能使用内部数据存储器。这里有一些直接寻址模式的例子。
MOV80H, R6; MOVR2, 45H; MOVR0, 05H;
第一条指令将寄存器R6的内容发送到端口P0(端口0的地址为80H)。第二个是忘记从45H到R2的内容。第三个用于从寄存器R5(选择寄存器组RB0时)获取数据到寄存器R5。
寄存器间接寻址方式
在这种模式下,源地址或目标地址在寄存器中给出。通过使用寄存器间接寻址方式,可以访问内部或外部地址。R0和R1用于8位地址,DPTR用于16位地址,没有其他寄存器可用于寻址目的。让我们看看这种模式的一些例子。
MOV0E5H, @R0; MOV@R1, 80H
在指令中,@符号用于寄存器间接寻址。在第一条指令中,它显示使用了R0寄存器。如果R0的内容为40H,则该指令将取内部RAM的40H位置的数据。在第二个中,如果R1的内容是30H,则表示P0端口的内容将存储在内部RAM的30H位置。
MOVXA, @R1; MOV@DPTR, A;
在这两条指令中,MOVX中的X表示外部数据存储器。外部数据存储器只能以寄存器间接模式访问。在第一条指令中,如果R0持有40H,那么A将获取外部RAM位置40H的内容。而在第二个中,A的内容在DPTR指向的位置被覆盖。
索引寻址方式
在变址寻址模式下,只能从程序存储器访问源存储器。目标操作数始终是寄存器A。这些是变址寻址模式的一些示例。
MOVCA, @A+PC; MOVCA, @A+DPTR;
MOVC指令中的C指的是代码字节。对于第一条指令,让我们考虑A持有30H。而PC值为1125H。程序存储单元1155H(30H+1125H)的内容被移动到寄存器A。
隐式寻址模式
在隐式寻址模式下,将有一个操作数。这些类型的指令只能在特定的寄存器上工作。这些类型的指令也称为寄存器特定指令。以下是隐式寻址模式的一些示例。
RLA; SWAPA;
这些是1字节指令。第一个用于将A寄存器内容向左旋转。第二个用于交换A中的半字节。