以下是 32 位 ARM 和 MIPS 架构的数据传输指令格式。32 位 ARM 架构有 4 位操作码,因为有 16 个寄存器 (2^4=16)。32 位 MIPS 架构有 6 位操作码。考虑到 MIPS 中有 32 个寄存器,它不应该是 5 位吗?
问问题
1388 次
2 回答
3
寄存器的数量与操作码位数无关,它与支持的指令数量有关(考虑到存在指令前缀等技术,这仍然不是硬限制因素)。
另一方面,操作数位数(图片中的 Rs 和 Rd)与寄存器的数量有关(它们是 5 位,因为 MIPS 有 32 个寄存器,2^5 = 32)。
因此,操作码有 6 位仅意味着您能够编码多达 2^6=64 条不同的指令,这些指令可以在单个解码周期中解释。
于 2020-09-01T15:30:53.137 回答
1
操作码编码和寄存器字段编码以及立即数/常量编码是不同的,它们之间有不同的权衡,因为当它们必须在同一条指令中共存时,使一个更大会使另一个变小。
每个字段的大小决定了可以在该字段中表示的不同项目的数量。
与 MIPS 相比,例如,RISC V 将 I 类型指令中的“const”立即字段缩短为 12 位,这允许更大的操作码字段——基本指令集操作码字段中的 7 位,以及 func 中的 3 个额外位(字段也通常是颠倒的,从右到左):
+-------------------------------------------+
| imm:12 | rs1:5 | func:3 | rd:5 | opcode:7 | I-Type
+-------------------------------------------+
这些额外的操作码位用于:
- 处理不同长度的指令,RISC V 允许大小为:
- 称为压缩的 16 位指令,可以混合使用
- 32 位,用于 32 位和 64 位处理器
- 48 位及更大(尚未标准化这些扩展)
- 用于指令集的长寿和进化
- 随着时间的推移,指令被添加,但很少被删除以保持向后兼容性
- 扩展指令集以满足应用程序和设备的特定需求
- 可能发生在嵌入式使用中,其中进行了从未打算包含在官方规范中的扩展
于 2020-09-01T16:10:57.100 回答