7

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?

2 Answers 2

9

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.

Sign up to request clarification or add additional context in comments.

Comments

0

Here is how you can do it

.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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.