寄存器和存储器,RISC-V

问题描述 投票:0回答:1

我在大学里学的是计算机架构,我想我不知道计算机系统的基础和C语言的概念,有几件事真的让我很困惑,我一直在搜索bout它,但找不到我想要的答案,让我更困惑,所以在这里上传问题。

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个回答
1
投票

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

不,这毫无意义,你的思路在这里是错误的。

寄存器文件是自己独立的空间,不是内存地址空间的一部分。 它不能用变量来索引,只能通过把寄存器号硬编码到指令中,所以其实没有任何意义,在哪一个 x2 是 "下一个寄存器在 x1"或任何东西。 例如,你不能在寄存器上循环。 它们只是两个独立的32位或64位数据存储空间,软件可以随意使用。

自然而然地把它们分成的类别是基于软件调用习惯的。

  • 栈指针
  • 调用保留的寄存器(函数调用不会修改它们,或者反过来说,如果你想在函数中使用一个寄存器,你必须将其保存起来。
  • 调用-clobbered寄存器(必须假定函数调用会踩到它们,反之则可以不保存restoring而使用)。
  • 的零寄存器。

另外arg-pass与回值寄存器。

© www.soinside.com 2019 - 2024. All rights reserved.