为什么RISC V中的程序计数器应该加4而不是加0或2
Why Program Counter in RISC V should be added by 4 instead of adding 0 or 2
为什么RISC V架构的PC连接PC+4而不是PC+2或PC+1。我认为这取决于指令存储器 (IMEM) 的存储单元宽度。如果宽度是 16 位,那么我们需要加载两个相邻的地址来填充 32 位指令或者如果宽度是 32 位,我们只需要加载一个地址来获取完整的指令。
RISC-V 处理字节地址中的所有内容(来自 the ISA manual 第 19 页:“RV32I 提供了一个 32 位用户地址 space 即 byte-addressed 和 little-endian").因此,当使用字节地址时,将 PC 视为递增 4 是有意义的,因为每条 RV32 指令都是 4 个字节。
当我们说 RISC-V 将 PC 递增 4 时,这意味着对于 32 位 RISC-V 指令的任何给定字节地址 X
,下一条指令将在内存中的地址 X+4
处开始。 (注意当使用 16 位/2 字节的压缩指令时,PC 增加 2)。
16 位的 IMEM 读取宽度意味着需要从 IMEM 读取 2 次才能获得一条完整指令,而 IMEM 读取宽度为 32 位意味着仅需要从 IMEM 读取 1 次才能获得一条完整指令。但这些是实现方面的考虑,而不是 ISA 方面的考虑——假设您可以使用任一类型的 IMEM 实现 ISA-compliant RISC-V 处理器。
为什么RISC V架构的PC连接PC+4而不是PC+2或PC+1。我认为这取决于指令存储器 (IMEM) 的存储单元宽度。如果宽度是 16 位,那么我们需要加载两个相邻的地址来填充 32 位指令或者如果宽度是 32 位,我们只需要加载一个地址来获取完整的指令。
RISC-V 处理字节地址中的所有内容(来自 the ISA manual 第 19 页:“RV32I 提供了一个 32 位用户地址 space 即 byte-addressed 和 little-endian").因此,当使用字节地址时,将 PC 视为递增 4 是有意义的,因为每条 RV32 指令都是 4 个字节。
当我们说 RISC-V 将 PC 递增 4 时,这意味着对于 32 位 RISC-V 指令的任何给定字节地址 X
,下一条指令将在内存中的地址 X+4
处开始。 (注意当使用 16 位/2 字节的压缩指令时,PC 增加 2)。
16 位的 IMEM 读取宽度意味着需要从 IMEM 读取 2 次才能获得一条完整指令,而 IMEM 读取宽度为 32 位意味着仅需要从 IMEM 读取 1 次才能获得一条完整指令。但这些是实现方面的考虑,而不是 ISA 方面的考虑——假设您可以使用任一类型的 IMEM 实现 ISA-compliant RISC-V 处理器。