Я запутался в этом, потому что, если у нас уже есть указатель, мы можем легко указать на следующую команду, мы можем легко указать, чтобы вернуть предыдущую функцию, поэтому зачем нам нужен другой регистр указателя стека, чтобы вернуться к предыдущей функции или модуль?
Зачем нам нужен регистр стека, когда у нас уже есть регистр счетчика программ?
Ответ 1
Счетчик программ сообщает CPU, где он находится. Стек используется для (помимо прочего) записи о том, где он был.
Если вызывается функция, эта функция должна знать, куда вернуться, как только она закончится. Это действительно может быть просто адрес, который передается, но если эта функция сама вызывает другие функции или даже вызывает рекурсивно, тогда она должна гарантировать, что этот адрес не будет потерян или перезаписан, поэтому он должен быть сохранен. Естественный способ сделать это - нажать адрес на стек, а поп снова отменить при необходимости.
Конечно, он также сохраняет локальное состояние для функции, потому что это тоже нужно выталкивать и выскакивать по мере того, как программа опускается или возвращается из функций.
Не все процессоры обязательно имеют стек, но если вы делаете что-либо удаленно сложным на одном, вы неизбежно реализуете его.
Ответ 2
Программа conder сохраняет позицию следующей инструкции, указатель стека указателя на кучу (стек), где информация о хранении процессора используется для последующего использования, например значения внутренних регистров перед тем, как перейти к подпрограмме.
Ответ 3
SP используется для извлечения данных из регистра стека, где он хранит временные данные, такие как би-продукты любой операции или содержимого, прежде чем отказ питания восстановит его.
тогда как ПК, как и знаете, удерживает адрес следующей инструкции для выполнения.