新ちゃん 发表于 2020-8-20 00:14:51

RISC-V堆栈指针

RISC-V使用“full-descending”堆栈模型,堆栈寄存器用的是x2通用寄存器,要求128位对齐。mingdu.zheng at gmail dot com
RISC-V堆栈寄存器用的是x2,这在 The RISC-V Instruction Set Manual Volume I: User-Level ISA Chapter 20 RISC-V Assembly Programmer’s Handbook 约定。在没有“C”扩展的情况下,理论上讲可以使用x1~x31中的任何一个寄存器作为堆栈寄存器,使用x2仅仅是软件接口上的约定。引入“C”扩展的情况下,“C”扩展包含的堆栈相关Load/Store指令明确使用x2作为堆栈指针,这就不仅仅是一种约定了,而是强制规定了。堆栈是向下生长,并且要求128位(即16字节)对齐,这在 RISC-V ELF psABI specification 约定:
The stack grows downwards and the stack pointer shall be aligned to a 128-bit boundary upon procedure entry.为什么要求128位对齐?RISC-V在设计的时候已经在考虑128位系统,即RV128I,RV128I的通用寄存器是128位宽的。如果是RV32E,那么堆栈只要32位对齐就可以了。
堆栈指针当前值是指向堆栈的有效数据,我没有找到明确指出这一条的文档,是从现有的堆栈指针初始化代码和C程序反汇编中得出的结论,RISC-V用的应该是“full-descending”堆栈模型。将数据存储到堆栈之前要首先将堆栈指针递减,递减值必须是16的整数倍。
本篇完,感谢关注:RISC-V单片机中文网
页: [1]
查看完整版本: RISC-V堆栈指针