Я начал изучать рис.Я получил qemu-riscv, riscv-gcc и скомпилировал следующую программу asm hello world:
.section .text
.globl _start
_start:
li a0, 0 # stdout
1: auipc a1, %pcrel_hi(msg) # load msg(hi)
addi a1, a1, %pcrel_lo(1b) # load msg(lo)
li a2, 12 # length
li a3, 0
li a7, 64 # _NR_sys_write
ecall # system call
li a0, 0
li a1, 0
li a2, 0
li a3, 0
li a7, 93 # _NR_sys_exit
ecall # system call
loop:
j loop
.section .rodata
msg:
.string "Hello World\n"
Здесь используются syscalls (_NR_sys_write, _NR_sys_exit), и это сбивает меня с толку - я думаю, что я запускаю программу «голый металл»,но почему системные вызовы используются неявно?Почему эти системные вызовы проксируются qemu, и что произойдет, если я запущу этот код на fpga riscv, где нет ни одного нереализованного системного вызова?
ps: действительно трудно найти какое-либо руководство по программированию на risc-v или конфигурацию процессора с минимальным набором ресурсовдля меня.Есть некоторые плохо прокомментированные коды портированных ОС (FreeRTOS, Linux и FreeBSD), но нет никаких объяснений.Не могли бы вы также помочь мне с этой информацией?