У меня небольшая проблема, которую я не могу обойти. У меня есть несколько чисел, хранящихся в стеке следующим образом:
|5| 0($sp)
|4| 4($sp)
|3|
|8|
Я хочу пройтись по стеку, сравнивая два числа одновременно. Под этим я подразумеваю, что я хочу сравнить 0 ($ sp) с 4 ($ sp), а затем 0 ($ sp) с 8 ($ sp), ..., а затем 4 ($ sp) с 8 ($ зр). Итак, 5 против 4, 5 против 3, 5 против 8, 4 против 3, 4 против 8, 3 против 8.
Моя попытка это сделать
lw $t3, 0($sp) ##
la $t4, 4($sp) ##
Sum2:
beq $t2, $zero, Exit
lw $t5, $t4 ##
add $a0, $t5, $zero
li $v0, 1
syscall
add $t4, $t4, 4
addi $t2, $t2, -1
j Sum2
В основном 1-я, 2-я и 5-я строки.
Я загружаю целое число в верхней части стека в $ t3 и загружаю адрес следующего элемента в стеке в $ t4.
Затем я хочу загрузить значение по адресу, хранящемуся в $ t4, выполнить сравнение (сейчас я просто добавляю к нулю, чтобы я мог его напечатать), а затем увеличить адрес, сохраненный в t4 на 4 байта, чтобы получить третий элемент в стеке. Я продолжал бы делать это, пока значение регистра не достигнет 0. Как только это произойдет, я увеличу $ sp на 4 и повторю процесс.
Всякий раз, когда я пытаюсь загрузить это в PCSpim, я получаю синтаксическую ошибку. Что я делаю не так?