Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use an array in RISC-V Assembly

Tags:

assembly

riscv

I'm learning RISC-V assembly and i need to use array for an exercise that i'm solving; the problem is that the simulator that i'm using(RARS) gave me an error:
Error in /home/username/file_name line 8: Runtime exception at 0x00400010: address out of range 0x000003e8.

This is the code i wrote so far:

.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]

What i'm doing wrong?

like image 768
beep Avatar asked Jan 19 '20 19:01

beep


1 Answers

The instruction sw t2, 0(t1) stores the content of the register t2 into the memory address provided by the register t1. However, t1 does not contain the address that corresponds to the label arr – the address where the value 1000 is stored – because t1 was initialized by the instruction lw t1, arr, and this loads the content of the address corresponding to arr into t1, i.e., it loads the value 1000 into t1.

Instead, replace lw t1, arr by la t1, arr, which does load into t1 the address that arr is representing.

like image 97
ネロク・ゴ Avatar answered Sep 24 '22 23:09

ネロク・ゴ