assembly - RISC 32I 跳转和分支 LSB 硬连线至零

标签 assembly riscv

引用RV32I,我们将分支和跳转指令的LSB硬连接到零,以扩展指令立即字段中的地址范围,因为我们有字对齐存储器,所以LSB中必须有两个零,现在我的问题是什么如果我们硬连线跳转和分支指令的立即数中的最后两位,那么我们的地址范围为 x4,而不是在立即数生成部分中的符号扩展后移位 32 位。

最佳答案

它会起作用,事实上,RISC V 的前身 MIPS 就做到了这一点。

但是,RISC V 的设计允许采用紧凑指令格式 (RVC),从而支持 16 位指令。事实上,RISC V 允许指令扩展,其指令可以是 16 位的倍数(16、32、48、64、80、96,...)。

为了让工具能够跨仅支持 32 位指令和支持 16 位倍数指令的 RISC V 风格工作,设计人员选择仅将一位硬连接到零,而不是 2 位.

这意味着,例如,一个库可能符合 RV32I,并且仍然可以在具有 RVC 扩展的硬件上正常工作,并在同一进程(和同一线程/调用链)中混合使用 RVC 和该库。

关于assembly - RISC 32I 跳转和分支 LSB 硬连线至零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57941222/

相关文章:

linux - 在 pulseaudio 中使用汇编程序 -/dev/dsp 播放音乐?

assembly - “Unaligned address in store” 保存单词时出错

riscv - 如何仅针对 RV32I 基本整数指令和扩展 M 编译 C 代码?

上证所 SIMD 的上限/下限

linux - 写入端口 0cf8h 失败并出现段错误

assembly - INT 16h/AH=0h 不等待引导加载程序中的按键

riscv - 使用 Spike (riscv-isa-sim) 调试简单的 C 和汇编程序

linux - 在 QEMU 中记录动态指令轨迹或直方图?

compiler-construction - RISC-V指令集中的FENCE指令是什么意思?

Linux 无法识别 FPGA 上的多核 Rocket