Загрузка адреса, хранящегося в регистре в MIPS

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

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


person user1175668    schedule 28.01.2012    source источник
comment
la не является инструкцией MIPS. (строка 2)   -  person calebds    schedule 29.01.2012
comment
Это псевдоинструкция, которая в данном случае превращается в addiu t4,sp,4.   -  person Richard Pennington    schedule 29.01.2012
comment
Если вы хотите, чтобы люди продолжали отвечать на ваши вопросы, пожалуйста, принимайте правильные ответы.   -  person m0skit0    schedule 02.02.2012


Ответы (1)


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

lw $t5, 0($t4)

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

person Richard Pennington    schedule 28.01.2012
comment
И получить адрес памяти $a0? - person Favolas; 21.04.2012