查看: 1659|回复: 0
收起左侧

RISC-V堆栈指针

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-1-15 13:53
  • 签到天数: 26 天

    [LV.4]

    发表于 2020-8-20 00:14:51 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    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单片机中文网





    上一篇:RISC-V矢量指令集学习记录
    下一篇:白话RISC-V,带你深入集成电路新世界
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-11-26 01:23 , Processed in 0.280739 second(s), 46 queries .

    快速回复 返回顶部 返回列表