如何在 RISC-V 汇编中使用数组
How to use an array in RISC-V Assembly
我正在学习 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]
我做错了什么?
指令sw t2, 0(t1)
将寄存器t2
的内容存入寄存器t1
提供的内存地址。但是,t1
不包含标签arr
对应的地址——存储值1000
的地址——因为t1
是由指令[=17]初始化的=],这会将arr
对应地址的content加载到t1
,即加载值1000
到[=12] =].
相反,将 lw t1, arr
替换为 la t1, arr
,这会加载到 t1
arr
所代表的地址。
我正在学习 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]
我做错了什么?
指令sw t2, 0(t1)
将寄存器t2
的内容存入寄存器t1
提供的内存地址。但是,t1
不包含标签arr
对应的地址——存储值1000
的地址——因为t1
是由指令[=17]初始化的=],这会将arr
对应地址的content加载到t1
,即加载值1000
到[=12] =].
相反,将 lw t1, arr
替换为 la t1, arr
,这会加载到 t1
arr
所代表的地址。