You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无RISC-V硬件时,用Qemu编写调试运行32位RISC-V汇编的最简方案

用Qemu运行、调试32位RISC-V汇编代码的最简流程

1. 安装必要工具

首先安装32位RISC-V交叉编译工具链和用户态Qemu(以Debian/Ubuntu为例):

sudo apt install gcc-riscv32-unknown-elf qemu-system-riscv32 qemu-user

qemu-user 提供用户态运行支持,无需启动完整虚拟机,更适合快速测试汇编程序。

2. 编写32位RISC-V汇编代码

创建示例文件 test.s,适配32位RISC-V系统调用逻辑:

.global _start

_start:
    # 调用write系统调用输出字符串
    li      a0, 1          # a0 = stdout文件描述符(1)
    la      a1, msg        # a1 = 字符串地址
    li      a2, 13         # a2 = 字符串长度("Hello RISC-V\n"共13字节)
    li      a7, 64         # 32位RISC-V write系统调用号为64
    ecall

    # 调用exit系统调用退出程序
    li      a0, 0          # a0 = 退出码(0表示成功)
    li      a7, 93         # 32位RISC-V exit系统调用号为93
    ecall

msg:
    .ascii  "Hello RISC-V\n"

3. 编译成32位可执行文件

用交叉编译工具链生成适配RISC-V 32位的ELF文件:

riscv32-unknown-elf-gcc -march=rv32i -mabi=ilp32 -nostdlib -static test.s -o test

参数说明:

  • -march=rv32i:指定使用32位整数指令集(对应《计算机组成与设计》中的基础架构)
  • -mabi=ilp32:适配32位整数ABI(栈、寄存器宽度均为32位)
  • -nostdlib:不链接标准库(仅使用裸系统调用)
  • -static:静态链接,避免依赖动态库

4. 运行程序

用用户态Qemu直接执行生成的可执行文件:

qemu-riscv32 ./test

正常输出:Hello RISC-V

5. 调试汇编代码

通过GDB配合Qemu调试,步骤如下:

  1. 启动Qemu并开启调试端口:
qemu-riscv32 -g 1234 ./test

-g 1234 表示Qemu监听本地1234端口,等待GDB连接。

  1. 新开终端,启动RISC-V专用GDB:
riscv32-unknown-elf-gdb ./test
  1. 在GDB中连接Qemu:
target remote localhost:1234
  1. 常用调试命令:
  • break _start:在程序入口设置断点
  • continue:运行至断点处
  • stepi:单步执行一条汇编指令
  • info registers:查看所有寄存器值
  • x/10s msg:查看msg地址起始的字符串内容

内容的提问来源于stack exchange,提问作者user153245

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:15:39