寄存器和内存,RISC-V

register and memory, risc-v

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

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

--------------------

堆栈

动态数据

静态数据

文字

保留部分

--------------------

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

RISC-V(在 C 中循环)

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 寄存器。

如果register在我上面画的那个内存布局里,那么x0,x1的东西在哪呢?从这里看没有意义。所以我很困惑我必须如何看待寄存器的样子。

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

Then register is having this memory layout in CPU?

不,那是零意义,你的思路错了。

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

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

  • 堆栈指针
  • 调用保留寄存器(函数调用不会修改它们,或者相反,如果你想在函数中使用一个,你必须 save/restore 它)
  • 被调用破坏的寄存器(必须假定函数调用会踩到它们,反之可以在没有saving/restoring的情况下使用)
  • 零寄存器。

还有 arg 传递与 return 值寄存器。