如何在 RISC-V 汇编中使用数组

7
我正在学习RISC-V汇编,并需要在解决一个练习时使用数组;问题是我正在使用的模拟器(RARS)出现了错误:
Error in /home/username/file_name line 8: Runtime exception at 0x00400010: address out of range 0x000003e8.

这是我到目前为止写的代码:

.data
arr: .word 1000
e0: .word 5

.text
lw t1, arr # load arr into t1
lw t2, e0 # Load e0 value into t2
sw t2, 0(t1) # save t2 value into arr[0]

我做错了什么?
2个回答

9
指令sw t2, 0(t1)将寄存器t2的内容存储到由寄存器t1提供的内存地址中。然而,t1并不包含与标签arr相对应的地址 - 存储值1000的地址,因为t1是由指令lw t1, arr初始化的,并且这会将与arr相关的地址的内容加载到t1中,即它将值1000加载到t1中。
取而代之,用la t1,arr替换lw t1,arr,后者确实将arr所表示的地址加载到t1中。

0

以下是您可以实现它的方法

.data
arr: .word 1000
e0: .word 5

.text
la t1, arr # You can only load the address of your arr into t1
lw t2, e0 # Load e0 value into t2
sw t2, 0(t1) # save t2 value into the address of arr[0] pointed by t1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接