我不理解的Risc-v指令

时间:2018-11-14 17:37:35

标签: instruction-set riscv

我有这个风险代码:

composer.json

,问题问我:“寄存器S2持有什么?” 该问题说明lui S0, 0x1234 ori S1, S0, 0x5678 add S2, S1, S1 和我引用:

将立即数imm的低半字加载到寄存器rt的高半字中。寄存器的低位设置为0

我不知道如何“编译此程序”,0x1234是什么意思?谢谢

2 个答案:

答案 0 :(得分:2)

一次取一个指令。首先立即加载,取立即数(0x1234,然后将其“加载”到S0寄存器的上半部分,然后将下半部分清零:< / p>

lui S0, 0x1234 

S0 = 0x12340000

接着或立即,我们将S0中的值与值0x5678进行运算:

ori S1, S0, 0x5678

   0x12340000
OR 0x00005678
   ----------
   0x12345678 = S1

最后是 add ,我们将S1中的值与其自身相加,或者等效地,将S1中的值乘以2:

add S2, S1, S1

  0x12345678
+ 0x12345678
  ----------
  0x2468ACF0 = S2

因此S2寄存器中的值为0x2468ACF0。注意,我假设使用32位字。立即数就像常量,因此lui是将常量放入寄存器上半部分的指令。与ori结合使用,您可以将整个单词立即加载到寄存器中。

答案 1 :(得分:0)

“ LUI将U中间值放在目标寄存器rd的高20位中,用零填充最低12位。” -riscv-spec-v2.2

所以, lui s0,0x1234

s0应该为0x01234000