RISC-V 汇编调用 C 函数

  • 遵守 ABI(Application Binary Interface)的规定
    • 数据类型的大小,布局和对齐
    • 函数调用约定(Calling Convention)
    • 系统调用规定
    • ……
  • RISC-V 函数调用相关约定
    • 函数参数采用寄存器 a0~a7 传递
    • 函数返回值采用寄存器 a0 和 a1 传递

C 嵌入 RISC-V 汇编

1
2
3
4
5
6
asm [volatile] {
"汇编指令"
:输出操作数列表(可选)
:输入操作数列表(可选)
:可能影响到的寄存器或者存储器(可选)
};
  • 汇编指令用双引号括起来,多条指令之间用 “;” 或者 “\n” 分隔
  • “输出操作数列表” 和 “输入操作数列表” 用于将需要操作的 C 变量和汇编指令的操作数对应起来,多个操作数之间用 “,” 分隔。
  • “可能影响的寄存器或者存储器” 用于告知编译器当前嵌入的汇编语句可能修改的寄存器或者内存,方便编译器执行优化。