Описание тега stack-pointer

Регистр, указывающий на текущее местоположение в стеке вызовов. Детали зависят от архитектуры процессора, но неявное использование инструкций push/pop является обычным явлением. (Пожалуйста, также добавьте тег архитектуры!)

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

Обычно его называют "верхним" стеком, хотя в большинстве систем это самый низкий / нижний адрес. (Рост стека вниз, в то время как куча растет вверх, - очень распространенное соглашение (см. Также эти вопросы и ответы). Диаграммы макетов стека рисуются в любом случае - одни с высоким адресом вверху, а другие с младшим адресом вверху - поэтому еще раз проверьте, соответствует ли ваша терминология тому, что вы читаете или изменяете.

ПРИМЕЧАНИЕ. Термин "указатель стека" применяется только к стеку вызовов, используемому как часть вызова / возврата функции и / или сохранения регистров с сохранением вызовов для вызовов вложенных функций, а также освобождения места (также известного как кадр стека) для локальных переменных в функция.
Это не относится к указателям на другие структуры данных стека, используемые в более общем плане.

Использование указателя стека позволяет удобно выполнять функции рекурсии и повторного входа (по сравнению со статическим хранилищем). См. Эти вопросы и ответы по MIPS.

Некоторые архитектуры (например, x86) жестко закрепляют выбор в проекте, заставляя обработчики прерываний неявно использовать регистр указателя стека для передачи контекста в стек. x86 также имеет множество инструкций, которые неявно используют указатель стека (например,push / pop, call / ret), но при желании этого можно было бы избежать. Однако нет никакого способа обойтись без допустимого значения, по крайней мере, в ядре[e/r]sp для прерываний.

Другие архитектуры (особенно MIP) используют только определенный регистр в качестве указателя стека по соглашению (т. Е. Соглашение ABI/ вызова), а другой ABI может использовать другой регистр в качестве указателя стека без потери эффективности. Или даже не использовать традиционный стек, даже для обработки прерываний.


Указатель стека на различных архитектурах:

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