2016-10-13 2 views
0

мне нужна помощь со следующим кодом MIPS enter image description hereПонимание MIPS

Я до сих пор путают о том, как указатель стека работает, чтобы сохранить адрес текущей подпрограммы. Кроме того, что происходит после jal-факта, потому что похоже, что этот кусок кода никогда не используется, поскольку jal-файл всегда обновляет ПК с адресом факта.

+0

Лучше всего скопировать/вставить текст в блок кода, вместо того чтобы публиковать изображение текста. Это делает его непригодным для поиска/неиндексируемым и полностью непригодным для любых слепых пользователей, которые используют программы чтения с экрана. У вашего изображения нет ничего, что бы не получилось просто в ASCII. –

+0

Как вы создаете блок кода? – TheMathNoob

+0

ctrl-k. Нажмите? в правом верхнем углу редактора для справки по форматированию. –

ответ

1

Уменьшение указателя стека на количество резервирует много байтов памяти в стеке. Приращение делает наоборот, освобождает пространство. Все остальное о сохранении и восстановлении регистров в/из стека представлено в комментариях.

Последняя инструкция возвращается из подпрограммы. Обратите внимание, что есть условная ветвь до конца подпрограммы, когда аргумент равен нулю. Итак, рекурсивные вызовы не бесконечны. В конце концов, аргумент достаточно декрементирован, чтобы достигнуть нуля, в этот момент первое возвращение происходит, потому что условная ветка переходит в конец подпрограммы. И затем выполнение продолжается в вызывающем, после jal. После умножения есть еще одно возвращение. И так далее.

Смежные вопросы