#assembly #mips #cpu-architecture
#сборка #mips #архитектура процессора
Вопрос:
Мне нужна помощь со следующим кодом MIPS
Я все еще не понимаю, как работает указатель стека для сохранения адреса текущей подпрограммы. Кроме того, что происходит после jal fact, потому что похоже, что этот фрагмент кода никогда не используется, поскольку jal fact всегда обновляет компьютер адресом fact.
Комментарии:
1. Было бы лучше скопировать / вставить текст в блок кода, вместо публикации изображения текста. Это делает его недоступным для поиска / индексации и полностью непригодным для любых слепых пользователей, использующих программы чтения с экрана. В вашем изображении нет ничего, что не проходило бы нормально в ASCII.
2. Как создать блок кода?
3. ctrl-k. Щелкните ? в правом верхнем углу редактора для справки по форматированию.
Ответ №1:
Уменьшение указателя стека на число резервирует это количество байт памяти в стеке. Увеличение делает обратное, освобождая пространство. Все остальное о сохранении и восстановлении регистров в / из стека изложено в комментариях.
Последняя инструкция возвращается из подпрограммы. Обратите внимание, что в конце процедуры есть условная ветвь, когда аргумент равен нулю. Итак, рекурсивные вызовы не бесконечны. В конечном итоге аргумент уменьшается достаточно раз, чтобы достичь нуля, и в этот момент происходит первый возврат, потому что условная ветвь переходит к концу подпрограммы. И затем выполнение продолжается в вызывающем, после jal. После умножения происходит еще один возврат. И так далее.