Raz*_*wad 3 instruction-set riscv
我有这个 risc v 代码:
lui S0, 0x1234
ori S1, S0, 0x5678
add S2, S1, S1
Run Code Online (Sandbox Code Playgroud)
问题问我,“寄存器 S2 保存什么?” 这个问题解释了这一点lui,我引用:
"将立即数 imm 的低半字加载到寄存器 rt 的高半字中。寄存器的低位设置为 0 "
我不知道如何“编译这个程序”,0x1234 是什么意思?谢谢
一次一个听指令。首先是load-upper-immediate,取出立即数 ( 0x1234) 并将其“加载”到S0寄存器的上半部分,并将下半部分清零:
lui S0, 0x1234
S0 = 0x12340000
Run Code Online (Sandbox Code Playgroud)
接下来是or-immediate,我们 OR 中的值S0与 value 0x5678:
ori S1, S0, 0x5678
0x12340000
OR 0x00005678
----------
0x12345678 = S1
Run Code Online (Sandbox Code Playgroud)
最后是add,我们将 S1 中的值与其自身相加,或者等效地,将 S1 中的值乘以 2:
add S2, S1, S1
0x12345678
+ 0x12345678
----------
0x2468ACF0 = S2
Run Code Online (Sandbox Code Playgroud)
所以S2寄存器中的值为0x2468ACF0。请注意,我假设是 32 位字。立即数类似于常量,lui将常量放入寄存器上半部分的指令也是如此。与 结合使用ori,您可以将整个字立即加载到寄存器中。
| 归档时间: |
|
| 查看次数: |
2582 次 |
| 最近记录: |