Я пытаюсь выделить динамический массив и заставить его принимать ввод с консоли, но как только я начинаю вводить несколько чисел в массив, он говорит, что возникла ошибка Exception 7. (Неверный адрес данных)
Вот код, который я использую перед запуском подпрограммы, которая считывает числа из консоли с помощью read_array:
la $a0, bIntro_p
li $v0, 4
syscall
li $a0, 0 #reset
li $a1, 0 #reset
li $v0, 5
syscall
move $t0, $v0 #moves length into $t0 for allocation, keeps length there
li $v0, 9 #allocation, sets base address into $v0
move $a0, $t0
syscall #base address is now in $v0
move $t1, $v0 #base now in $t1
move $a0, $t0 #length ($t0) goes into $a0 before reading
move $a1, $t1 #base address ($t1) goes into $a1 before reading
jal read_array
Я знаю, что в передаче аргументов есть много лишних команд перемещения, но в основном это связано с устранением неполадок. Из того, что я узнал, динамические массивы должны хранить свои базовые адреса в $v0 после запуска системного вызова 9, верно? (Только месяц назад начал изучать MIPS.)
Вот подпрограмма для read_array:
read_array:
# Read words from the console, store them in
# the array until the array is full
li $t0, 0
li $t1, 0
move $t0, $a0 #length
move $t1, $a1 #base address
li $t9, 0 #makes sure count is reset before engaging
sw $t1, myBaseHolder #save the base address into the holder word
rWhile:
bge $t9, $t0, endR #branch to end if count > length
li $v0, 5 #call for an int from console
syscall
sw $v0, 0($t1) #saves the word from the console into the array
addiu $t9, $t9, 1 #count++
addiu $t1, $t1, 4 #increments the address
b rWhile
endR:
jr $ra
Странная часть заключается в том, что этот код отлично работает для статического массива, который я должен выделить ранее в программе, но динамический массив, кажется, ломает мой код, и я не могу сказать, связано ли это с тем, что я не передаю правильные значения к подпрограмме или потому, что подпрограмма ошибочна с самого начала.
Для более подробного изучения структур передачи аргументов подпрограмм я загрузил весь свой код программы в Pastebin здесь . Любое понимание будет супер оценено!