#for-loop #mips #multiplication
#для-цикла #mips #умножение
Вопрос:
итак, в настоящее время я пытаюсь пройти цикл for в MIPS и пытаюсь умножить его. Я сделал то же самое с добавлением, и это сработало. Ниже $t0 — это нижнее целое число, введенное пользователем, $ t6 — это верхнее целое число 1, а $t4 — это регистр, в котором хранится результат. Вот оно:
beq $t0, $t6, resultFunction
add $t4, $t4, $t0
addi $t0, $t0, 1
j addForLoop
Что это делает, так это сохраняет наименьшее целочисленное значение, введенное пользователем, а затем увеличивает его до верхнего целого значения, которое они ввели 1, чтобы оно увеличивалось правильно. Затем он соответствующим образом добавляет, а затем увеличивает счетчик на 1, повторяя, если они не совпадают. Когда значения совпадают, он выходит из цикла. Например, если значения равны 2 и 4, ответом будет 2 3 = 5, затем 5 4 = 9. Цикл будет выводиться с ответом 9, как и должно быть. Я попытался сделать то же самое, но вместо этого умножил, и вот в чем моя проблема. При попытке заменить add на mul (например, так),:
beq $t0, $t6, resultFunction
mul $t4, $t4, $t0
addi $t0, $t0, 1
j multForLoop
он работает некорректно, и вместо этого я получаю 0 в качестве вывода. Если два целых числа снова равны 2 и 4, он должен выводить 24 (2 * 3 = 6, 6 * 4 = 24). Я не совсем уверен, почему это не работает, и буду признателен за любую помощь.
Ответ №1:
Вы не показали нам весь свой код, но, предположительно $t4
, при запуске цикла он равен 0, а все, что умножено на 0, равно 0.
Установите $t4
значение 1 перед циклом.
Комментарии:
1. Спасибо. На самом деле я только что понял это, это было 0, и мне пришлось реализовать два разных цикла for. Первый добавил наименьшее целое значение плюс 0 и сохранил его в $ t4, и как только этот цикл был завершен, у меня был цикл for для умножения, работающий правильно, поскольку $ t4 теперь больше не 0.