我对 RISC-V ABI 寄存器名称感到困惑。例如,第 85 页的“RISC-V 指令集手册,第一卷:用户级 ISA,2.0 版”中的表 18.2 指定堆栈指针 sp
正在注册 x14
.然而,指令
addi sp,zero,0
被 riscv64-unknown-elf-as 编译为 0x00000113(
-m32
没有区别)。在二进制中:000000000000 00000 000 00010 0010011
^imm ^rs1 ^f3 ^rd ^opcode
所以这里
sp
好像是 x2
.然后我用谷歌搜索了一下,找到了 RISC-V Linux User's Manual .该文件指出 sp
是 x30
.那是什么?是否有不同的 ABI?我可以使用命令行选项将 ABI 设置为
riscv64-unknown-elf-*
?某处有综合表吗?
最佳答案
堆栈指针现在是 x2
.
Here是当前的 ABI 文档,已移出 User-Level ISA specification ,现在包含相同的链接。
修改了 ABI 以更好地适应新的 RISC-V 压缩规范,该规范将 8 个最常用的寄存器在 x8-x15 中彼此相邻。
注:不要相信任何非 riscv.org 网页。 Quan Nguyen 在他的介绍中明确指出,“RISC-V Linux 用户手册”用于记录移植过程,并且不保证准确性。
关于cpu-registers - RISC-V 调用约定的 ABI 寄存器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30636566/