2012-12-24 2 views
10

Я смущен этим, потому что, если у нас уже есть указатель, мы можем легко указать на следующую инструкцию, мы можем легко указать, чтобы вернуть предыдущую функцию, поэтому зачем нам нужен другой регистр указателя стека, чтобы вернуться к предыдущей функции или модулю ?Зачем нам нужен регистр стека, когда у нас уже есть регистр счетчика программ?

+1

Возможный дубликат [Что такое указатель стека, используемый для микропроцессоров?] (http://stackoverflow.com/questions/1464035/what-is-a-stack-pointer-used-for- в-микропроцессоров) –

ответ

13

Счетчик программ сообщает CPU, где он находится is. Стек используется (среди прочего) вести запись о том, где он был.

Если функция вызывается, эта функция должна знать, где вернуться к ее завершению. Это действительно может быть просто адрес, который передается, но если эта функция сама вызывает другие функции или даже вызывает рекурсивно, тогда она должна гарантировать, что этот адрес не будет потерян или перезаписан, поэтому он должен быть сохранен. Естественным способом сделать это является толкание адреса в стек, и при необходимости он снова отбрасывается.

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

Не все процессоры обязательно имеют стек, но если вы делаете что-либо удаленно сложным на одном, вы неизбежно реализуете его.

0

Программа conter сохраняет позицию следующей инструкции, указатель стека указывает на кучу (стек), где информация о хранилище процессора используется для последующего использования, например значения внутренних регистров перед тем, как перейти к подпрограмме.

0

SP используется для извлечения данных из регистра стека, где он хранит временные данные, такие как би-продукты любой операции или содержаний перед сбоем питания, чтобы восстановить его обратно

в то время как ПК, как и знает содержать адрес следующих инструкции для выполнения.

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