0
我在crt.S
文件中有一些RISC V程序集。将地址作为符号载入通用寄存器
如果我使用的名称的C函数_init
的是这样的:
j _init
(即执行一个无条件跳转到_init
),代码编译罚款和运行。
但是,如果使用这样的:
li a3, _init
(即,负载通用寄存器A3
具有整数值_init
)的代码不能编译。如果我替换一个文字整数值(例如,0x80001958
,其他所有内容相同,则当前值为_init
)代码将进行编译。
我在这里做错了什么? (这是使用GNU GCC/AS)
我问一个关于汇编语法和有人投票关闭它的问题,因为它“不关于编程”?难怪人们说这个网站会去看狗。 – adrianmcmenamin
我对RISC-V并不熟悉,但我对其他汇编语言非常熟悉。您的程序是本地还是外部的_init标签?我试图找到有关'li'指令的文档,但在RISC-V ISA手册中找不到它明确定义的文档。你用什么语言参考书来学习RISC-V? – HeatfanJohn
li是一个伪指令,它让汇编程序知道如何生成正确的代码来构建数字,然后将其加载到寄存器中(例如,做一个转换,加上或直接等等)。这非常方便! 我现在已经解决了几个小时后的问题 - 请参阅下面的答案。 – adrianmcmenamin