Читая комментарии, я думаю, что ответ несколько яснее.В начале кода $a0
и $a1
уже должны иметь какое-то значение, допустим, x
и y
соответственно.
Первая строка move $t0, $zero
будет int i = 0;
в высокомязык программирования уровня или начальное значение цикла do-while (condition)
.
Следующее:
Loop: add $t1, $t0, $t0
add $t1, $t1, $t1
- это когда цикл начинается и будет выглядеть так:
int j = 2 * i;
j = 2 * j;
, что коротко означает int j = 4 * i;
, итератор умножается на 4, потому что регистры MIPS состоят из 32 битов, что означает 4 байта.
Тогда add $t2, $a0, $t1
соответствует int k = x + j;
или другими словами int k = x + 4 * i
.
Следующая инструкция sw $zero, 0($t2)
сохраняет 0
в памяти, адрес которой смещен на 0
от адреса значения, содержащегося в $t2
.
addi $t0, $t0, 1
увеличивает i++;
и
slt $t3, $t0, $a1
bne $t3, $zero, Loop
jr $ra
проверяет, удовлетворяется ли i < y
, что является условием цикла do - while (i < y)
.Если это все еще верно, цикл продолжает устанавливать 0
следующий элемент в памяти, в противном случае цикл завершается возвращением к $ra
.