RISC-V的特殊寄存器X0 [NOP/NEG/J等的实现]

/ 0评 / 0

RISC-V精简的厉害,没有NOP/NEG/J/BEQZ指令,但是可以特殊实现他们.

RISC-V的X0寄存器就相当于是硬件版的/dev/zero和/dev/null的组合体,从X0读出来的总是0,往X0写进去的总是被丢弃.

实现NOP指令,RISC-V没有提供nop指令,RISC-V用操作X0代替NOP,比如addi x0,x0,0,因为数据写进去什么用都没...不产生影响.

实现NEG取负数,RISC-V用sub rd, x0, rs来实现,因为X0是0,所以他减去一个正数,就是负数了.

实现J指令跳转,RISC-V没有单独的J跳转指令,只有jal跳转链接指令,跳转之前总是要把下一条指令的地址拷贝到寄存器,但是如果用x0作为JAL的操作寄存器,即把下一条指令的地址拷贝到X0,那么效果就等价于j跳转指令了,因为写入X0的任何值都是会被丢弃~

RISC-V很多指令要多操作数,这时候X0的作用就很好了~