sky 发表于 2020-9-22 16:48:37

RISC-V RV32I中零寄存器有什么用?

问:risc-v rv32i单独设立了一个寄存器x0专门存放常数0,这个零寄存器到底有什么用?
某人答:
这个问题一般介绍RISC-V的手册都会讲吧?
汇编代码中,经常会遇到大量的跟0比较/赋值成0的场景,所以设置一个寄存器,永远都是0,这样就不需要每次给一个寄存器赋值成0再跟另外一个寄存器比较了,效率上会高一些(精简指令集代码的最大问题就是操作立即数很繁琐)。
并且,从CPU设计的角度上看,使用寄存器比使用立即数更容易做流水线优化。立即数在CPU内部也是需要占据一个临时的位置的,而如果0是放在寄存器里,那么就可以把这个位置留给后面的指令,也省掉了装载立即数的过程。
x0的特点:
1. 永远都是0,可以拿来做一些汇编层面上的优化,比如:
   > 比如取反等指令可以用x0寄存器减去原值;
   > move指令可以是 ADDI x28, x0, x29
   ....
   花样可以很多

2. 写进去的东西会被丢弃,这一条也很重要,比如要做NOP操作,就可以ADDI x0, x0, 0zero寄存器不是什么新鲜的东西,MIPS上也有。





页: [1]
查看完整版本: RISC-V RV32I中零寄存器有什么用?