Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler.doc
Скачиваний:
10
Добавлен:
20.04.2019
Размер:
12.47 Mб
Скачать

Стек. Команды работы со стеком

В структурах данных:

Стек

линейный список, все элементы которого выбираются, вставляются и удаляются с одного конца, называемого вершиной стека

При работе со стеком используется принцип «последним вошел, первым вышел» (LIFO), т.е. последний вставленный в список элемент первым удаляется из списка

В архитектуре микропроцессора:

Стек сегмент памяти, выделяемый для временного хранения данных программы

Для работы с сегментом стека аппаратно реализован механизм, осуществляющий вставку / удаление данных по принципу «последним вошел, первым вышел».

Стековая обработка позволяет использовать безадресные команды и делать программы более компактными.

Основные случаи использования стека:

временное сохранение значений регистров;

работа с подпрограммами;

работа с локальными переменными.

Для работы со стеком предназначены три регистра:

SS – сегментный регистр содержит указание на расположение сегмента стека в памяти

ESP – регистр указателя стека содержит указание на вершину стека

EBP – регистр указателя базы кадра стека обычно используется для доступа к локальным переменным и параметрам функций

Схема работы стека

Регистр ESP всегда указывает на вершину стека, то есть содержит смещение, по которому в стек был занесен последний элемент.

Команды работы со стеком неявно изменяют этот регистр так, чтобы он всегда указывал на последний записанный в стек элемент.

Если стек пуст, то значение ESP на единицу больше адреса последнего байта сегмента, выделенного под стек.

Схема работы стека

При занесении элемента в стек процессор уменьшает значение регистра ESP, а затем записывает элемент по адресу новой вершины.

Схема работы стека

При извлечении данных из стека процессор копирует элемент, расположенный по адресу вершины, а затем увеличивает значение регистра указателя стека ESP.

Команды работы со стеком набор специализированных команд, ориентированных на организацию гибкой и эффективной работы со стеком (относятся к группе команд пересылки данных)

Команда PUSH – занести данные в стек

Формат команды

push Источник

Действие команды

ESP = ESP – размер Источника

[ESP] = Источник

Примеры.

push 12345 ; число (4 байта) push AL ; 1 байт push BX ; 2 байта push ECX ; 4 байта

Команда POP – извлечь данные из стека

Формат команды

pop Приемник

Действие команды

Приемник = [ESP]

ESP = ESP + размер Приемника

Примеры.

pop ECX ; 4 байта pop BX ; 2 байта pop AL ; 1 байт

Команда PUSHA – занести регистры в стек

Формат команды

pusha

Действие команды

сохраняет в стеке значения 8 регистров общего назначения: EAX, ECX, EDX, EBX, ESP (исходное), EBP, ESI, EDI

Команда POPA – извлечь регистры из стека

Формат команды

popa

Действие команды

извлекает из стека значения 8 регистров общего назначения: EDI, ESI, EBP, ESP, EBX, EDX, ECX, EAX

Команда PUSHF – занести в стек регистр флагов

Формат команды

pushf

Действие команды

сохраняет в стеке значения регистров флагов EFLAGS

Команда POPF – извлечь из стека регистр флагов

Формат команды

popf

Действие команды

извлекает из стека значение регистра флагов EFLAGS

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]