Я работаю над домашним заданием, и мне нужно перевести код c
в MIPS (32-разрядная версия).
Я могу использовать 3 регистра $s0
для переменной x
, '$ s1' для переменной y
и $ s3 для базового адреса массива 'A []'.
Моя цель - иметь возможность выполнить некоторую условную логику if
, которая сравнивает определенный индекс массива 'A' с переменной 'y' (в данном случае A[x] < y
)
мой код:
sll $t0, $s0,2 # t0 = x *4
add $t0,$t0,$s3 # t0 = x*4 + &A[0] = A[x]
Мой вопрос: регистр $ t0 уже указывает на адрес памяти 'A [x]', поэтому я могу двигаться вперед с тем, что у меня есть, и начать сравнивать значения:
slt $t1,$t0,$s1 # if A[x] < y then $t1 = 1
или мне нужно загрузить слово из памяти, используя псевдоинструкцию 'lw' в начале моего кода:
lw $t0, 0($s3) #temp reg $t0 gets A[0]
sll $t1, $s0,2 # t0 = x *4
add $t0,$t1,$t0 # t0 = x*4 + &A[0] = A[x]
rest of code goes here