A регістр стека, також відомий як вказівник стека, — це центральний регістр процесора комп'ютера, призначений для відстеження стека викликів. В різних архітектурах це може бути або спеціалізований регістр або регістр, зарезервований за домовленістю, як у архітектурах від IBM System/360 до z/Architecture та в архітектурах RISC, або регістр, який апаратно визначений для використання інструкціями виклику та повернення з процедур, як в архітектурах PDP-11, VAX та Intel x86.

Машини до кінця 1960-х років — такі як PDP-8 і HP 2100 — не мали компіляторів, які підтримували рекурсію. Їхні інструкції підпрограм зазвичай зберігали поточне місце розташування в адресі переходу, а потім встановлювали лічильник команд на наступну адресу. Це простіше, ніж підтримувати стек, оскільки для кожного розділу коду підпрограми існує лише одне місце повернення, але рекурсія без значних зусиль з боку програміста неможлива.

Стековий автомат може мати два або більше регістрів стека — один із них відстежує стек викликів, а інші — інші стеки.

Стековий рушій

Простіші процесори зберігають вказівник стека у звичайному апаратному регістрі та використовують арифметико-логічний пристрій (ALU) для маніпулювання його значенням.

Новіші процесори містять спеціалізований стековий рушій для оптимізації операцій зі стеком. Pentium M був першим процесором x86, у якому було реалізовано стековий рушій. У його реалізації вказівник стека розділений між двома регістрами: ESPO, який є 32-бітним регістром, та ESPd, 8-бітним значенням дельти, яке безпосередньо оновлюється операціями зі стеком. Коди операцій PUSH, POP, CALL і RET безпосередньо працюють із регістром ESPd. Якщо ESPd наближається до переповнення або регістр ESP використовується іншими інструкціями (коли ESPd ≠ 0), вставляється мікрооперація синхронізації, яка оновлює ESPO за допомогою ALU та скидає ESPd до 0. Ця конструкція значною мірою залишилася без змін у наступних процесорах Intel, хоча ESPO було розширено до 64 біт.

Стековий рушій, подібний до рушія Intel, також був реалізований у мікроархітектурі AMD K8. У Bulldozer потребу в мікроопераціях синхронізації було усунуто, але внутрішня конструкція стекового рушія невідома.

Примітки (xiv+294+4 pages)