assembly 如何从内存地址0x300开始加载32位常量[duplicate]

fafcakar  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(139)

此问题在此处已有答案

RISC-V build 32-bit constants with LUI and ADDI(4个答案)
昨天关门了。
我必须将十六进制0x1234ABCD存储到寄存器s0中,该寄存器从存储器地址0x300开始。

lui s0, 0x1234B
addi s0, s0, 0xFFFFFBCD
?????

我希望存储在s0 0x1234ABCD中,这样我就可以如下操作每个地址:地址0保持0x12,地址1保持0x34,地址2保持0xAB,地址3保持0xCD

imzjd6km

imzjd6km1#

你需要addi0xBCD部分。
addi允许12位立即数,因此0xBCD适合-然而,它是有符号的12位立即数字段,因此添加的值将是0xFFFFFBCD
因此,lui应该将20位值0x1234A偏移+1,变为0x1234B,以便符号扩展的addi的高20位中的有效-1将被抵消。

相关问题