Я изучаю язык ассемблера MIPS. Я пытаюсь понять это упражнение. Вопрос в том:
Чему соответствует следующий код?
Name: move $t0, $zero
Loop: add $t1, $t0, $t0
add $t1, $t1, $t1
add $t2, $a0, $t1
sw $zero, 0($t2)
addi $t0, $t0, 1
slt $t3, $t0, $a1
bne $t3, $zero, Loop
jr $ra
Я уже знаю значение каждой инструкции, как работают директивы и что такое цикл for. Когда я пытаюсь запустить код в MIPS Mars Simulator, он заканчивается ошибкой, вероятно, потому, что значения, содержащиеся в регистрах $ a0 и $ a1, необходимы для начала.
Я не понимаю более широкой картины. Что происходит во время каждой итерации цикла? Это просто часть более крупного алгоритма? Что он должен делать?
$t0
? Вот что меня смущает. - person m0skit0   schedule 04.02.2019$t0 * 4
(потому что каждый элемент в массиве составляет 4 байта). Но понятия не имею, почему они сделали это с двумя дополнениями вместоsll $t1, $t0, 2
. - person Michael   schedule 04.02.2019$t0
содержит индекс массива слов, который нужно обнулить, затем умножает его на 4, выдавая два сложения. - person gusbro   schedule 04.02.2019