您尚未登录。

楼主 # 2021-06-20 13:36:43

tigger
Moderator
注册时间: 2021-06-18
已发帖子: 172
积分: 111

自己动手编写一个非常简单的RISC-V C调用使用ABI规则ASM汇编的demo, 使用qemu-riscv64虚拟机测试.

hello.c

#include <stdio.h>

extern int plus(int a, int b);

int main(void)
{
        printf("hello, %d\n", plus(111, 222));
}

plus.S

.text

.global plus

plus:
        add     a0,a1,a0
        ret

编译:

riscv64-linux-gnu-gcc -o hello hello.c plus.S -g

运行:

$ QEMU_LD_PREFIX=/usr/riscv64-linux-gnu/ qemu-riscv64 hello
hello, 333






qemu虚拟机参考:
risc-v gcc 工具链编译 与 qemu 虚拟机 (ubuntu等发行版linux平台搭建RISCV模拟环境)
https://whycan.com/t_1685.html#p64753

离线

楼主 #1 2021-06-20 15:04:12

tigger
Moderator
注册时间: 2021-06-18
已发帖子: 172
积分: 111

Re: 自己动手编写一个非常简单的RISC-V C调用使用ABI规则ASM汇编的demo, 使用qemu-riscv64虚拟机测试.

上面的命令行默认生成RISC-V压缩指令集(16bit)

如果不想生成压缩指令集(norvc) 可以用这个指令:

riscv64-linux-gnu-gcc -o hello hello.c plus.S -g -march=rv64imafd -mabi=lp64d

mach 参数去掉了c

参考: https://github.com/xboot/xboot/blob/master/src/arch/riscv64/mach-d1/xboot.mk

离线

楼主 #2 2021-06-20 15:06:32

tigger
Moderator
注册时间: 2021-06-18
已发帖子: 172
积分: 111

Re: 自己动手编写一个非常简单的RISC-V C调用使用ABI规则ASM汇编的demo, 使用qemu-riscv64虚拟机测试.

如果只想 汇编代码想单独控制:

plus.S

.option norvc

.text

.global plus, shift

plus:
        add     a0,a1,a0
        ret

shift:
        lui     a0,0xa000
        ret

在代码最前面加:

.option rvc  (强制使用压缩指令)

.option norvc  (强制使用非压缩指令)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn