assembly 如何在RISC-V汇编中使用阵列

dojqjjoe  于 2023-05-23  发布在  其他
关注(0)|答案(2)|浏览(164)

我正在学习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]

我做错了什么?

zengzsys

zengzsys1#

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

sqyvllje

sqyvllje2#

这里是你如何可以做到这一点

.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

相关问题