函数调用过程通常分为 6 个阶段[Patterson and Hennessy 2017]。 将参数存储到被调用的函数可以访问到的位置; 跳转到函数起始位置; 获取函数需要的局部存储资源,按需保存寄存器(callee saved registers) ; 执行函数中的指令; 将返回值存储到调用者能够访问到的位置,恢复寄存器(callee saved registers),释放局部...
在标准的RISC-V中,栈总是向低地址增长的,并且sp总是16字节对齐的。 除了参数和返回值寄存器,RISC-V还有七个整数寄存器(t0至t6),12个浮点数寄存器(ft0至ft11)用于暂存,它们在函数调用过程中是易失的。如果想要长期使用暂存的数据使用,函数调用方必须自己保存。12个整数寄存器(s0至s11)和12个浮点数寄存器(fs0至...
ABI包括了关于函数调用约定(参数传递,函数返回值等)、数据类型、对齐方式、字节序、 函数栈布局、系统调用等方面的规范。 具体来说,ABI定义了以下内容: 数据类型、对齐方式和字节序; 寄存器使用约定:哪些寄存器用于传递函数参数、返回值和保存临时变量; 函数调用约定:函数调用的具体步骤,包括参数传递、返回值处理等; ...
调用者保存(Caller-saved):临时寄存器(t0-t6)和参数寄存器(a0-a7)。调用函数前,调用者需要保存这些寄存器的值。 被调用者保存(Callee-saved):保存寄存器(s0-s11)和返回地址寄存器(ra)。被调用函数需要保存和恢复这些寄存器的值。 # 调用者函数caller_function:# 保存调用者保存寄存器addisp,sp, -16sdra,8(sp) ...
RISC-V调用约定 是一种规范,用于定义在RISC-V架构下函数调用的参数传递、寄存器的使用、栈的管理等方面的规则。它确保了不同编译器和代码之间的互操作性和一致性。 RISC-V调用约定有两种:传统调用约定和新的整数调用约定(Integer Calling Convention)。 传统调用约定(C调用约定)是最早定义的调用约定,它将函数参数按...
RISC-V ELF规范和函数调用规范 RISC-V ELF psABI specification Table of Contents Register Convention Integer Register Convention Floating-point Register Convention Procedure Calling Convention Integer Calling Convention...
risc-v实战--最简单的函数调用 最简单的函数调用 场景:1+2=3 .section .text .globl _start _start: li a0,1 jal ra,test01 #ra里面的内容的是nop的地址, jal ra,offset nop test01: addi a0,a0,2 jalr zero,0(ra) # jalr rd,offset(ra)...
esp c2 ble芯片模块上海乐鑫科技代理商RISC-V调用约定,调用约定规范函数时参数传递和函数返回结果的方式和数据类型。RISC-V gcc 编译器支持 ABI 调用约定。根据 ABI约定,RV32I 函数调用时使用a0~a7,共 8个通用寄存器传递参数,使用 ao 和al 两个通用存器返回函数结果。如果超过 8 个参数,则超出部分的参数通过栈...