1 RISC-V ABI接口 ABI(Application Binary Interface)为应用程序二进制接口,它定义了应用程序之间或应用程序和操作系统之间进行二进制级交互时必须遵循的规则和约定。ABI包括了关于函数调用约定(参数传递,函数返回值等)、数据类型、对齐方式、字节序、 函数栈布局、系统调用等方面的规范。 具体来说,ABI定义了以下内容:...
一.C数据类型和对齐 所有数据保持自然对齐。 ILP32,LP64 在RV64中,32位类型不管是int还是unsigned都是符号扩展到64位。 二.RVG调用约定 a0-a7,fa0-fa7:用于函数传递参数,其中0-1用于返回值,a表示arguments。 都是调用者负责保存,因为是传参肯定是在函数调用前就要准备好,所部不可能是被调用者去负责保存。
只有RV32E base ISA对于简单的嵌入式微控制器只有16个寄存器,但寄存器宽度仍然是32位。 寄存器 X0 硬接线为零。称为程序计数器的特殊寄存器保存要从内存中获取的当前指令的地址。 如图 2 所示,RISC-V 应用程序二进制接口,ABI 定义了寄存器的标准功能。为了简单和一致,软件开发工具通常使用 ABI 名称。根据 ABI,额...
ABI:调用其它函数时,关于汇编、参数、寄存器等的双方约定。(我觉得有几个答案补充的很好). 实际上 ABI 兼容性是一个和编译器等都有关的话题。ABI 定义了 calling convention,同时 ABI 定义了约束:有些寄存器是不可写的。 同时,你可以在上面的图里面看到很奇妙的事情,这里没有再使用x0-x15这样的记号,而是用了...
为了增加汇编程序的阅读性,汇编编程时通常采用应用程序二进制接口协议(Application Binary Interface,ABI)定义的寄存器名称。RV32I通用寄存器如下:Caller:来访者,简单来说就是打电话的,即调用函数的函数,Callee:被访者,简单来说就是接电话的,即被调用函数 寄存器的宽度由ISA指定,如RV32的通用寄存器宽度为32...
RISC-V 编译器支持多个 ABI,具体取决于 F 和 D 扩展是否存在。RV32 的 ABI 分别名 为 ilp32,ilp32f 和 ilp32d。ilp32 表示 C 语言的整型(int),长整型(long)和指针(pointer)都是 32 位,可选后缀表示如何传递浮点参数。在 lip32 中,浮点参数在整数寄存器中传递;在 ilp32f 中,单精度浮点参数在浮点寄...
绝大多数 应用程序需要一个完整的 ABI(application binary interface)才能运行, 而不仅仅是用户级 ISA。绝大多数 ABI 依赖于库(libraries),而库又 依赖于操作系统支持。为了运行一个已有的操作系统,需要实现管理 员级 ISA、OS 需要的设备接口。这些通常并没有很好的规范,而在实 现上比用户级 ISA 具有更大的...
ØInteger ABI 为RISC-V应用程序整数二进制接口,Floating point ABI为RISC-V应用程序浮点数二进制接口,RISC-V 编译器支持多个 ABI,具体取决于 F 和 D 扩展是否存在。RV32 的 ABI 分别名为 ilp32,ilp32f 和 ilp32d。ilp32 表示 C 语言的整型(int),长整型(long)和指针(pointer) 都是 32 位,...
riscv abi官方文档https://github.com/riscv-non-isa/riscv-elf-psabi-doc 数据模型(LP32 ILP32 LP64 LLP64 ILP64 )https://www.cnblogs.com/lsgxeva/p/7614856.html ILP32 and LP64 data models and data type sizeshttps://www.ibm.com/docs/en/zos/2.3.0?topic=environments-ilp32-lp64-data-...
尽管所有寄存器(表2中显示的一些寄存器)都可用于一般用途,但应用程序二进制接口(ABI)根据其调用约定为每个寄存器指定了用途。这意味着一些寄存器应该保存临时或已保存的数据、指针、返回地址等。表 2.RV32I寄存器文件显示RISC-V应用二进制接口中指定的硬件寄存器名称及其分配的功能。RISC-V 乘法和浮点 RV32M扩展实现...