本帖最后由 AdaMaYun 于 2024-9-4 12:11 编辑
RV32还是RV64,它的通用寄存器的数量都是32个。32真是一个好数字,刚好是2的5次方,实际上伯克利大学的研究员在设计RV的时候就非常讲究,这么做的好处是颇多的,也体现了RISC-V指令集的特色,这个我们在学习之后再讨论这个问题。
这32个寄存器分别是x0x1 x2 ..x31这样去编号,但是就单纯的这样去写汇编的话,是非常不方便的,因此每一个寄存器又有自己的别名,这个别名就代表了这个寄存器的含义,以及函数调用时候的规则。也就是说,你在实际汇编编程的时候,既可以使用编号名,也可以使用别名,实际上使用别名更好,这样够把寄存器的含义和在这里的作用绑定起来,别人看你的代码就知道你要做什么了。不仅仅是你在程的时候可以使用别名,而且你反汇编的时候它也会显示别名,因此寄存器原名用于手动反汇编的时候根据值找寄存器,别名用于实际看汇编代码。
上图描述了32个通用寄存器在编程中作用的约定,特别是C编程时候的默认调用约定。其实这些寄存露本身来说想咋用,但是如果这样的话,你写一套使用寄存器的风格,他也有一套自己的风格,这样的话我写的函数你就没法调用了,因为寄存器安排不同,这样就非常麻顶,根本不利于开发。于是RISC-V指令集在设计之处,就把这些寄存露的作用和安排都规定好了,别名也取好了。你不需要自己想一套函数调用的法则,你只需要遵守约定就好。这样,我写的函数,你也可以直接调用,而不需要考虑参数保存在哪个寄存器,因为这都已经规定好了。
|