Как я узнаю, почему «адрес вне диапазона в MIPS», хотя объявлены временные переменные - PullRequest
0 голосов
/ 10 июля 2019

Я делаю домашнее задание для класса компьютерного дизайна и архитектуры, где мы должны внедрить простой цикл for в C в MIPS с использованием MARSim.Я реализовал цикл for шаг за шагом, инициализировал (если это правильный термин) переменные в памяти, но при сборке и запуске он выдает эту ошибку: question1.asm строка 11: исключительная ситуация времени выполнения в 0x00400008: адрес выходит за пределы диапазона 0x00000000

Я посмотрел на строку 11: lw $ t1, 0 ​​($ a1), и, насколько я понимаю, это должно работать правильно.Как я понимаю, здесь мы устанавливаем наше значение t1 равным a1 (b [i]).

Вот C, который мы должны воспроизвести:

for (i=0; i<=100; i++) { a[i] = b[i] + C ; }

Вот моя попытка:

# t0 = i
# t1 = b[i]
# t2 = a[i]
# t3 = 101 (the end value of i)
# s0 = c
# $a0 = a
# $a1 = b
begin:
addi $t3, $zero, 101 #loop terminate value
add $t0, $zero, $zero # set our counter to zero
loop: lw $t1, 0($a1) # set t1 to b[i]
add $t1, $t1, $s0 # B[i] + c
sw $t1, 0($a0) #store $t1 into a[i]
addi $t0, $t0, 1  # loop increment
addi $a0,$a0,4 # increment a0 to point to the next block in the array (4 bits)
addi $a1, $a1, 4 # likewise with b[i]
beq $t0, $s0, finish    
finish:

Код MIPS, который я написал, должен имитировать действие кода C без ошибки.Однако на первой итерации цикла он заявляет, что обращается к адресу вне диапазона 0x00000000.Может ли кто-то пролить свет на то, что я делаю неправильно?Я был бы очень признателен за подробное объяснение, чтобы лучше понять это для своего класса.Спасибо за вашу помощь и большую любовь.Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...