寄存器和内存,risc-v

时间:2020-05-11 20:26:08

标签: memory cpu-architecture cpu-registers riscv

我正在大学里学习计算机体系结构,我想我不知道计算机系统和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的内容包含在哪里?从这里开始没有任何意义。所以我很困惑我该如何认为注册看起来像什么。

我脑海中的一切都那么抽象,所以我想问题听起来有点怪异。如果没有清除任何内容,请给我评论。

1 个答案:

答案 0 :(得分:1)

然后寄存器在CPU中具有此内存布局吗?

不,这是零意义,您的想法在这里不对。

寄存器文件是其自己的单独空间,而不是内存地址空间的一部分。它不能用变量索引,只能通过将寄存器号硬编码到指令中,因此实际上const [token, setToken] = useState(null); useEffect(() => { -->(2), after component mounts getToken(); }, []); const getToken = async () => { -->(3) const token = await AsyncStorage.getItem('token'); -->(6) setToken(token); -->(7) }; console.log("token:") //console -->(4) console.log(token) -->(5) return ( --> this will execute first (1) <NavigationContainer> <AppStack.Navigator> { token=== null ? //.. } </AppStack.Navigator> </NavigationContainer> ); 是“ x2之后的下一个寄存器”之类的东西并没有任何意义。例如您不能循环访问寄存器。 它们只是软件可以根据需要使用的两个单独的32位或64位数据存储空间。

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

  • 堆栈指针
  • 保留呼叫的寄存器(函数调用不会对其进行修改,或者相反,如果要在函数中使用一个,则必须保存/恢复它)
  • 呼叫密集型寄存器(必须假定函数调用会踩到它们,反之,无需保存/恢复即可使用)
  • 零寄存器。

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

相关问题