Операции со стеком поддерживаются тремя регистрами:
Регистр сегмета стека (SS). Стеки размещаются в памяти. количество стеков в системе ограничивается только максимальным числом сегментов. Размер стека не может превышать 4 Гбайт, что соответствует максимальному размеру сегмента для процессора i486. В каждый момент времени доступен только один стек - стек, селектор сегмента которого содержится в регистре SS. Этот стек называется текущим, однако далее слово "текущий" будет, как правило, опускаться, а текущий стек будет называться просто "стеком". Регистр SS автоматически используется процессором для выполнения всех операций со стеком.
Регистр указателя стека (ESP). В регистре ESP содержится относительный адрес вершины стека в текущем сегменте стека. Его значение используется командами POP и PUSH, при вызове подпрограмм и при возврате, исключениями и прерываниями. При занесении элемента в стек (смотри Рисунок 2-8), процессор уменьшает значение регистра ESP, а затем записывает элемент по адресу новой вершины. При извлечении данных из стека, процессор копирует элемент, расположенный по адресу вершины, а затем увеличивает значение регистра указателя стека. Иными словами, стек растет вниз, в сторону уменьшения адресов.
Регистр указателя базы кадра стека (EBP). Данный регистр, как правило, используется для доступа к структурам данных, содержащимся в стеке. Например, при входе в подпрограмму, стек содержит адрес возврата и некоторое число параметров, передаваемых в данную подпрограмму. Подпрограмма, при необходимости создания временных локальных переменных, использует стек, что приводит к изменению указателя стека по мере занесения и удаления данных в стеке. Если перед началом выполнения операций со стеком указатель стека копируется в базовый указатель кадра стека, последний может быть использован для доступа к данным, имеющим фиксированное смещение в сегменте стека. Если этого не делать, доступ к структурам данных, имеющим фиксированное смещение, может быть утерян в процессе занесения в стек и удаления из стека временных переменных. При использование регистра EBP для хранения адреса пямяти, текущий сегмент обязательно должен быть выбран (установлен регистр SS). Т.к. нет необходимости указывать сегмент стека в каждой команде, их кодирование становится более компактным. Регистр EBP может также использоваться для адресации других сегментов. Такие команды как ENTER и LEAVE предусматривают автоматическое использование регистра EBP для обеспечения удобного доступа к переменным.