YaChudo

Регістр стека

Переглядів: 0. Оновлено 06.11.2026.

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

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

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

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

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

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

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

Примітки

  1. ↑ Salomon, David (Лютий 1993) [1992]. Написано у California State University, Northridge, California, USA. Chivers, Ian D. (ред.). Assemblers and Loaders (PDF). Ellis Horwood Series In Computers And Their Applications (вид. 1). Chicester, West Sussex, UK: Ellis Horwood Limited / Simon & Schuster International Group. ISBN 0-13-052564-2. Архів (PDF) оригіналу за 23 березня 2020. Процитовано 1 жовтня 2008. Most computers save the return address in either the stack, in one of the registers, or in the first word of the procedure (in which case the first executable instruction of the procedure should be stored in the second word). If the latter method is used, a return from the procedure is a jump to the memory location whose address is contained in the first word of the procedure. (xiv+294+4 pages)
  2. ↑ а б Fog, Agner. The microarchitecture of Intel, AMD and VIA CPUs (PDF). Technical University of Denmark.

Джерело: стаття у Вікіпедії та історія редагувань (автори).