main:addisp,sp,-32# 将栈指针sp向下移动32个字节,预留栈空间swra,28(sp) # 将返回地址ra存储到栈的偏移28字节处sws0,24(sp) # 将保存寄存器s0存储到栈的偏移24字节处addis0,sp,32# 设置帧指针s0,指向当前栈顶lia5,2# 将立即数2加载到寄存器a5swa5,-20(s0) # 将a5的值存储到栈的偏移-20字节处l...
1 RISC-V ABI接口 ABI(Application Binary Interface)为应用程序二进制接口,它定义了应用程序之间或应用程序和操作系统之间进行二进制级交互时必须遵循的规则和约定。ABI包括了关于函数调用约定(参数传递,函数返回值等)、数据类型、对齐方式、字节序、 函数栈布局、系统调用等方面的规范。 具体来说,ABI定义了以下内容:...
在RISC-V汇编语言中,函数调用的过程可以分为以下几个步骤: 1. 保存寄存器状态:在调用函数之前,需要将当前函数中需要使用的寄存器的值保存到栈中,以防止被调用函数修改这些值。通常使用指令"addi sp, sp, -n"将栈指针sp向下移动n个字节,然后使用指令"sw reg, 0(sp)"将需要保存的寄存器的值存储到栈中。 2....
risc-v的函数 .text #定义代码段,后续的所有都在这个段内 .global _start #定义全局变量,开始的地方 _start: la sp, stack_end # sp 栈顶的位置, 这个位置在哪里呢?代码段的最后。 li a0, 3 # a0是给函数传递参数, 为啥是a0呢?因为寄存器的使用有规范 call square # call做了什事情?相当于把stop的...
当我们调用函数时,你可以看到这里有a0 - a7寄存器。通常我们在谈到寄存器的时候,我们会用它们的ABI名字。不仅是因为这样描述更清晰和标准,同时也因为在写汇编代码的时候使用的也是ABI名字。 第一列中的寄存器名字并不是超级重要,它唯一重要的场景是在RISC-V的Compressed Instruction中。
risc-v 函数调用规范 RISC-V 的寄存器分为以下几类: 临时寄存器:t0-t6(x5-x7, x28-x31) 保存寄存器:s0-s11(x8, x9, x18-x27) 参数寄存器:a0-a7(x10-x17) 返回地址寄存器:ra(x1) 注意:不是返回值,call函数的时候的下一条指令 栈指针寄存器:sp(x2)...
RISC-V函数调用规范 对于caller saved和callee saved寄存器有点不清楚,参考RISC-V手册总结一下: 函数调用过程通常分为 6 个阶段[Patterson and Hennessy 2017]。 将参数存储到被调用的函数可以访问到的位置; 跳转到函数起始位置; 获取函数需要的局部存储资源,按需保存寄存器(callee saved registers) ;...
由于涉及调用到了add函数,add函数有两个参数需要传参,需要把值101和202作为两个入参传入,在riscv中,入参寄存器默认为a0, a1……等以此类推。所以此处将栈中的值取出,分别赋值给a0, a1。 在add函数中,首先是在原来的地址基础上,继续开辟一块栈空间为32字节。第一步是保存返回地址,当add函数运行结束的时候跳转...
按照RISC-V的函数调用规范,调用函数时一般将参数传入寄存器中。a0至a7是整数寄存器,fa0至fa7是浮点数寄存器。 如果参数是以struct的形式传入函数的,参数寄存器会存储前结构体的前八个指针字。前八个参数中的浮点数会被存储到浮点数寄存器中,其他类型的数据会被存储到整数寄存器中。如果浮点数是union中的一部分或者是...
RISC-V 指令集中,哪条指令用于实现函数调用? 搜索题目RISC-V 指令集中,哪条指令用于实现函数调用? 答案 A解析 null本题来源 题目:RISC-V 指令集中,哪条指令用于实现函数调用? 来源: riscv架构试题答案 收藏 反馈 分享