如何一次使用8051的所有寄存器组?

How to use all register banks of 8051 at a single time?

我知道我们可以使用 PSW.4PSW.3 一次为 8051 设置一个活动的银行,但是是否可以通过某种方式或技巧实现对所有银行的选择一次?

您至少不能在指令中直接寻址寄存器名称。这是因为 8051 指令被设计为使用单个字节或一个字节加一个立即数进行编码。该字节包含操作码和寄存器编号的 3 位。因此你只能在指令

中编码8个寄存器

虽然寄存器放在通用内存区域,因此您可以随时使用内存访问指令访问它们。当然,这限制了您可以使用不同银行中的寄存器执行的操作。例如,您可以使用 MOV R3, 05h 将 bank 0 中的 R5 移动到当前 R3,因为 bank 0 位于地址范围 00h-07h

8 general-purpose registers R0–R7 may be accessed with instructions 1 byte shorter than others. They are mapped to IRAM between 0x00 and 0x1F. Only 8 bytes of that range are used at any given time, determined by the two bank select bits in the PSW.

https://en.wikipedia.org/wiki/Intel_MCS-51#Registers

Banking is a simple way to increase the total addressable memory with a limited address range。这里英特尔用它来寻址 32 个 3 位寄存器,当然你一次只能访问其中的 8 个。但是有些指令对寄存器进行编码的位数更少,您只能指定 R0 或 R1,如 MOV @R0/1,#data

另见