我有这个风险代码:
composer.json
,问题问我:“寄存器S2持有什么?”
该问题说明lui S0, 0x1234
ori S1, S0, 0x5678
add S2, S1, S1
和我引用:
“ 将立即数imm的低半字加载到寄存器rt的高半字中。寄存器的低位设置为0 ”
我不知道如何“编译此程序”,0x1234是什么意思?谢谢
答案 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