【问题标题】:register and memory, risc-v寄存器和内存,risc-v
【发布时间】:2020-08-27 12:32:28
【问题描述】:

我在我的大学学习计算机体系结构,我想我不知道计算机系统和 C 语言概念的基础知识,很少有事情让我感到困惑,我一直在寻找它,但找不到答案想让我更困惑所以在这里上传问题。

1。我认为寄存器在 CPU 中保存一条指令、存储地址或任何类型的数据。我还学习了内存布局。

------

堆栈

动态数据

静态数据

文字

保留部分

------

那么寄存器在 CPU 中有这样的内存布局吗?或者我只是将它与计算机的 5 个组件(输入、输出、内存、控制、数据路径)的内存布局混淆了。我认为这是这 5 个组件的布局之一。

RISC-V(C 中的 while 循环)

Loop:
   slli x10, x22, 3
   add x10, x10, x25
   ld x9, 0(x10)
   bne x9, x24, Exit
   addi x22, x22, 1
   beq x0, x0, Loop
Exit:...

那么这个操作发生在哪里呢?注册?

  1. 我学习了 RISC-V 寄存器,如下所示。
  • x0:常数值0
  • x1:返回地址
  • ...
  • x5-x7、x28-x31:临时文件
  • ...

如果寄存器在我上面绘制的那个内存布局中,那么x0,x1的东西包含在哪里?从这里开始没有意义。所以我很困惑我怎么能认为注册看起来像。

在我的脑海中一切都是那么抽象,所以我猜这个问题听起来有点奇怪。如果有什么不明白的,请给我评论。

【问题讨论】:

    标签: memory cpu-architecture cpu-registers riscv


    【解决方案1】:

    那么寄存器在 CPU 中有这样的内存布局吗?

    不,那是零意义,你的想法在这里是错误的。

    寄存器文件是它自己的独立空间,而不是内存地址空间的一部分。它不能用变量索引,只能通过将寄存器编号硬编码到指令中,所以x2 是“x1 之后的下一个寄存器”或任何东西没有任何意义。例如你不能遍历寄存器。 它们只是两个独立的 32 位或 64 位数据存储空间,软件可以随意使用它们。

    将它们分解的自然类别基于软件/调用约定:

    • 堆栈指针
    • 调用保留寄存器(函数调用不会修改它们,或者相反,如果你想在函数中使用一个,你必须保存/恢复它)
    • call-clobbered 寄存器(必须假定函数调用会踩到它们,反之可以在不保存/恢复的情况下使用)
    • 零寄存器。

    还有参数传递与返回值寄存器。

    【讨论】:

    • 现在一切都说得通了。谢谢! @Peter_Cordes
    猜你喜欢
    • 2020-04-18
    • 2023-03-29
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多