У меня есть небольшая проблема, которую я не могу обойти. У меня есть несколько чисел, хранящихся в стеке следующим образом:
|5| 0($sp)
|4| 4($sp)
|3|
|8|
Я хочу пройтись по стеку, сравнивая два числа за раз. Под этим я подразумеваю, что я хочу сравнить 0($sp) с 4($sp), затем 0($sp) с 8($sp), ..., а затем 4($sp) с 8($sp). сп). Итак, 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 байта, чтобы получить 3-й элемент в стеке. Я бы продолжал делать это, пока значение регистра не достигнет 0 . Как только это произойдет, я увеличу $sp на 4 и повторю процесс.
Всякий раз, когда я пытаюсь загрузить это в PCSpim, я получаю синтаксическую ошибку. Что я делаю не так?
la
не является инструкцией MIPS. (строка 2) - person calebds   schedule 29.01.2012