1,CPU register如下图,和 ARM的 一个明显区别是没有PC寄存器给你直接操作,对于写ASM 没有感觉到有影响。另外就是通用寄存器更多了,所有的save和restore操作的指令更多了,也就是上下文操作时间消耗的时间更多,但是RISC-V有定义RV32E指令集,只使用一半的寄存器(16个),对于嵌入式开发来说应该是利好的 ,可惜我还没有编译成功。
2,下图RISC-V伪指令和base指令里长跳转指令竟然没有给出适用于绝对地址的,这种用法要避开。我之前按ARM的用法去想跳转到一个远的固定地址,结果被卡了好久。
lui和auipc都用于构建常数,lui直接利用数值,而auipc却利用当前pc值。
然后你从图里会发现编译器用的全是auipc,所以你想自己写asm,要先把lui和auipc搞明白。其他实际上和ARM区别就不大了。
伪指令j 短距离,call 长距离,j 跳转带r就是有link操作。
关于第二页的CSRs读写操作指令,我基本没用到,因为picoRV32都没实现这些。只用过rdinstret和rdcycle 32bit的,这个很简单只跟一个rd就可以。
参考文件 riscv-spec-v2.2