为什么16位指令不能访问通用寄存器的高位寄存器

SL7*_*Bot -1 assembly arm instruction-set cpu-registers thumb

所以现在我读了《ARM Cortex-M3/M4 权威指南》一书,无法理解为什么 16 位指令无法访问高级通用寄存器 R8-R12。

它说实际上很少有人可以访问这些寄存器,但大多数不能。

dor*_*ron 5

16bits 意味着机器代码指令只有 16 位来编码信息。8 个寄存器需要 3 位进行编码。12 个寄存器需要 4 位进行编码。然后我们需要操作码和其他选项的空间,这意味着额外的位可能有点太多了。

  • @SL7Bot:您必须为每个寄存器分配一个唯一的位模式,以便指令解码器知道您正在谈论哪个寄存器。对于 8 个唯一的位模式,您至少需要 log_2(8) = 3 位。当然,“分配唯一的位模式”基本上与为每个寄存器提供一个数字地址并将该数字编码为二进制相同。再次强调:要对数字 0-7 进行编码,需要 3 位。 (5认同)

Jör*_*tag 5

编码 8 个寄存器的地址需要 3 位。编码 12 个寄存器的地址需要 4 位。

如果您有一个 3 寄存器指令,则需要 12 位来对 3 个寄存器进行编码,只剩下 4 位用于指令。您最多只能有 16 条指令。