提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有这个risc v代码:
lui S0, 0x1234
ori S1, S0, 0x5678
add S2, S1, S1
这个问题问我:“寄存器S2有什么作用?” 这个问题解释了lui
和我引用:
“ 将立即imm的下半字加载到寄存器rt的上半字。寄存器的低位设置为0 ”
我不知道如何“编译这个程序”,0x1234是什么意思? 谢谢
一次一个地说明。 首先是load-upper-immediate ,立即( 0x1234
)并将其“加载”到S0
寄存器的上半部分并将下半部分清零:
lui S0, 0x1234
S0 = 0x12340000
接着是or-immediate ,我们或者S0
中的值为0x5678
:
ori S1, S0, 0x5678
0x12340000
OR 0x00005678
----------
0x12345678 = S1
最后添加 ,我们将S1中的值添加到自身中,或者等效地将S1中的值乘以2:
add S2, S1, S1
0x12345678
+ 0x12345678
----------
0x2468ACF0 = S2
所以S2
寄存器中的值是0x2468ACF0
。 注意,我假设32位字。 立即就像一个常量,所以lui
是一个将常量放入寄存器上半部分的指令。 结合ori
,您可以将整个单词立即加载到寄存器中。
“LUI将U-immediate值放在目标寄存器rd的前20位,用零填充最低的12位。” - riscv-spec-v2.2
所以,lui s0,0x1234
s0应为0x01234000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.