Для счетчика циклов в MIPS

#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.