Загрузка адреса хранится в реестре в MIPS - PullRequest
0 голосов
/ 29 января 2012

У меня небольшая проблема, которую я не могу обойти. У меня есть несколько чисел, хранящихся в стеке следующим образом:

|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, я получаю синтаксическую ошибку. Что я делаю не так?

1 Ответ

2 голосов
/ 29 января 2012

Если я правильно читаю вашу проблему, вы хотите, чтобы

lw $t5, 0($t4)

загрузил t5 с сохраненным значением, где $ t4 указывает.

...