Как использовать массив в сборке RIS C -V - PullRequest
4 голосов
/ 19 января 2020

Я изучаю сборку RIS C -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]

Что я делаю не так?

1 Ответ

5 голосов
/ 19 января 2020

Инструкция sw t2, 0(t1) сохраняет содержимое регистра t2 в адрес памяти, предоставленный регистром t1. Однако t1 не содержит адрес, который соответствует метке arr - адресу, где хранится значение 1000 - потому что t1 был инициализирован инструкцией lw t1, arr, и это загружает содержимое адреса, соответствующего arr в t1, т. е. оно загружает значение 1000 в t1.

Вместо этого замените lw t1, arr на la t1, arr, что загрузить в t1 адрес, который представляет arr.

...