c - 我需要将 C(或更好)转换为 https://venus.cs61c.org/ 将接受的 RISC-V
问题描述
我已经尝试过https://godbolt.org/以及到 RISC-V 的所有不同转换,但它仍然出错。
例如我的 C 代码:
#include <stdio.h>
int main(){
printf("test");
return 0;
}
转换为:
main: # @main
addi sp, sp, -16
sw ra, 12(sp) # 4-byte Folded Spill
sw s0, 8(sp) # 4-byte Folded Spill
addi s0, sp, 16
mv a0, zero
sw a0, -16(s0) # 4-byte Folded Spill
sw a0, -12(s0)
lui a0, %hi(.L.str)
addi a0, a0, %lo(.L.str)
call printf
lw a0, -16(s0) # 4-byte Folded Reload
lw s0, 8(sp) # 4-byte Folded Reload
lw ra, 12(sp) # 4-byte Folded Reload
addi sp, sp, 16
ret
.L.str:
.asciz "test"
它在“lui”处出错,因为它需要 2 个参数但收到 3 个。我尝试使用 .data 部分和 .text 部分来组织代码,但仍然没有工作。
解决方案
使用la $a0, .L.str
而不是您的 2 指令 %hi,%lo 组合。
另外,使用.string
代替.asciz
.
推荐阅读
- c# - 如何继承 Windows 服务?
- abap - 将 ABAP 740 语法转换为 700 - VALUE & LOOP AT ... GROUP BY
- mysql - 你能在 MariaDB 的 select 语句中调用存储过程吗
- sapui5 - SAPUI5 按下浏览器后退按钮后未清除视图
- javascript - 在对“图像”数组进行排序后,如何在元素之间进行转换?
- git - git difftool $BASE 和 $LOCAL 颠倒了
- angular - @ContentChildren 为什么我不能按类型查询材质实例
- android - 如何在我的应用程序中修复 IllegalArgumentException 改造
- python - 使用python将今天收到的电子邮件中的附件复制到文件夹
- c++ - ZMQ 上下文被终止(线程)