1

当我riscv-gcc用来编译一个简单的汇编程序时,它告诉我它无法识别操作码b 1b,这是程序:

   ...
   sll x28,x28,1;
1: b 1b

b 1b是最后一条指令,一个循环。

该程序来自riscv-sodor项目。为什么编译失败?

4

1 回答 1

2

问题是您使用的是较新的编译器 gcc 4.9,其中包括新的 ABI 和对已接受的伪操作的一些更改。Sodor 存储库(截至 2015 年 4 月)包含针对已弃用的 gcc 4.6 端口的汇编代码。

您可以快速将“b”更改为“j”。

有关 gcc4.9 更新的更多信息:

https://riscv.org/2015/01/announcing-the-risc-v-gcc-4-9-port-and-new-abi/

以及关于新 ABI 的章节:

https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf

更改包括删除 v0/v1(现在是 a0/a1)。

于 2015-04-24T06:54:09.420 回答