Jump to content

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

Регистр стека — это регистр центрального процессора компьютера , целью которого является отслеживание стека вызовов . На машине с аккумуляторной архитектурой это может быть выделенный регистр. На машине с несколькими регистрами общего назначения это может быть регистр, зарезервированный по соглашению, например, в архитектуре IBM System/360 z/Architecture и архитектуре RISC , или это может быть регистр, который вызывает инструкции и возвращает их. жестко закреплены для использования, например, в архитектурах PDP-11 , VAX и Intel x86 . Некоторые проекты, такие как Data General Eclipse , не имели выделенного регистра, но использовали для этой функции зарезервированный адрес аппаратной памяти.

Машины до конца 1960-х годов, такие как PDP-8 и HP 2100 , не имели компиляторов, поддерживающих рекурсию . Их подпрограммные инструкции обычно сохраняют текущее местоположение в адресе перехода, а затем устанавливают счетчик программы на следующий адрес. [1] Хотя это проще, чем поддерживать стек, поскольку в каждой секции кода подпрограммы имеется только одно место возврата, рекурсия не может быть осуществлена ​​без значительных усилий со стороны программиста.

Стековая машина имеет 2 или более стековых регистра — один из них отслеживает стек вызовов , другой(и) отслеживает другой стек (и).

Регистры стека в x86 [ править ]

В 8086 главный регистр стека называется «указателем стека» (SP). Регистр сегмента стека (SS) обычно используется для хранения информации о сегменте памяти , в котором хранится стек вызовов выполняемой в данный момент программы. SP указывает на текущую вершину стека. По умолчанию стек увеличивается в памяти вниз, поэтому новые значения размещаются по меньшим адресам памяти. Чтобы сохранить значение в стек, PUSH используется инструкция. Чтобы получить значение из стека, POP используется инструкция.

Пример : Предположим, что SS = 1000h и SP = 0xF820. Это означает, что текущей вершиной стека является физический адрес 0x1F820 (это связано с сегментацией памяти в 8086 ). Следующие две машинные инструкции программы:

PUSH AX
PUSH BX
  • Эта первая инструкция должна отправить значение, хранящееся в AX (16-битный регистр), в стек. Это делается путем вычитания значения 2 (2 байта) из SP.
  • Новое значение SP становится 0xF81E. Затем ЦП копирует значение AX в слово памяти, физический адрес которого равен 0x1F81E.
  • Когда выполняется «PUSH BX», SP устанавливается в 0xF81C, а BX копируется в 0x1F81C. [2]

Это иллюстрирует, как работает PUSH. Обычно работающая программа помещает регистры в стек, чтобы использовать их для других целей, например, для вызова процедуры, которая может изменить текущие значения регистров. Чтобы восстановить значения, хранящиеся в стеке, программа должна содержать такие машинные инструкции:

POP BX
POP AX
  • POP BX копирует слово по адресу 0x1F81C (старое значение BX) в BX, затем увеличивает SP на 2. SP теперь равно 0xF81E.
  • POP AX копирует слово по адресу 0x1F81E в AX, затем устанавливает SP в 0xF820. [номер 1] [номер 2]

Стековый движок [ править ]

Более простые процессоры хранят указатель стека в обычном аппаратном регистре и используют арифметико-логическое устройство (АЛУ) для управления его значением. Обычно push и pop преобразуются в несколько микроопераций для отдельного добавления/вычитания указателя стека и выполнения загрузки/сохранения в памяти. [3]

Новые процессоры содержат специальный механизм стека для оптимизации операций стека. Pentium M был первым процессором x86, в котором был реализован механизм стека. В своей реализации указатель стека разделен между двумя регистрами: ESP O , который является 32-битным регистром, и ESP d , 8-битным дельта-значением, которое обновляется непосредственно операциями стека. Коды операций PUSH, POP, CALL и RET работают напрямую с регистром ESP d . Если ESP d близок к переполнению или на регистр ESP ссылаются другие инструкции (когда ESP d ≠ 0), вставляется микрооперация синхронизации, которая обновляет ESP O с помощью ALU и сбрасывает ESP d в 0. Эта конструкция в основном осталась без изменений в более поздних процессорах Intel, хотя ESP O был расширен до 64 бит. [4]

Стековый движок, аналогичный процессору Intel, также был принят в микроархитектуре AMD K8 . В Bulldozer необходимость синхронизации микроопераций была убрана, но внутреннее устройство стекового движка не известно. [4]

Примечания [ править ]

  1. ^ Программа выше сначала извлекает BX, потому что она была загружена последней.
  2. ^ В 8086 году PUSH & POP инструкции могут работать только с 16-битными элементами.

Ссылки [ править ]

  1. ^ Саломон, Дэвид (февраль 1993 г.) [1992]. Написано в Университете штата Калифорния, Нортридж, Калифорния, США. Чиверс, Ян Д. (ред.). Сборщики и грузчики (PDF) . Серия Эллиса Хорвуда «Компьютеры и их приложения» (1-е изд.). Чичестер, Западный Суссекс, Великобритания: Ellis Horwood Limited / Simon & Schuster International Group . ISBN  0-13-052564-2 . Архивировано (PDF) из оригинала 23 марта 2020 г. Проверено 1 октября 2008 г. Большинство компьютеров сохраняют адрес возврата либо в стеке, либо в одном из регистров, либо в первом слове процедуры (в этом случае первая исполняемая инструкция процедуры должна храниться во втором слове). При использовании последнего метода возвратом из процедуры является переход к ячейке памяти, адрес которой содержится в первом слове процедуры. (xiv+294+4 страницы)
  2. ^ Говард, Брайан. «Учебник по сборке – Инструкция» . Факультет компьютерных наук Университета ДеПау . Проверено 19 июля 2013 г.
  3. ^ Стоукс, Джон «Ганнибал» (25 февраля 2004 г.). «Взгляд на ядро ​​Centrino: Pentium M» . archive.arstechnica.com . п. 5.
  4. ^ Jump up to: Перейти обратно: а б Туман, Агнер. «Микроархитектура процессоров Intel, AMD и VIA» (PDF) . Технический университет Дании.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3dfc5d1e6c2f26957933f94a7833bcbe__1711669080
URL1:https://arc.ask3.ru/arc/aa/3d/be/3dfc5d1e6c2f26957933f94a7833bcbe.html
Заголовок, (Title) документа по адресу, URL1:
Stack register - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)