- •Программирование
- •Синтаксис языка Ассемблера
- •Xchg Приемник, Источник
- •Inc Операнд
- •Imul eax, b ; возможна потеря !!!
- •Idiv Источник
- •Стек. Команды работы со стеком
- •Подпрограммы
- •Структура приложения Win32 api
- •Функции Windows api Функции Windows api сохраняют значения регистров ebp, ebx, esi, edi и могут модифицировать регистры eax, ecx, edx
- •Int MessageBox (hwnd hWnd, char * сообщение, char * заголовок, int стиль) вывод диалогового окна с текстовым сообщением и одной-двумя-тремя кнопками (см. Тему«Стандартные диалоги»)
- •Int wsprintf (char * строка, char * образец, …) формирование текстовой строки по образцу
- •Int ReleaseDc(hwnd hWnd,hdc hDc) освободить заданный дескриптор контекста устройства, связанный с заданным окном
- •Арифметический сопроцессор
- •Void FloatToStr(double число, char * строка)
Стек. Команды работы со стеком
В структурах данных:
Стек
линейный список, все элементы которого выбираются, вставляются и удаляются с одного конца, называемого вершиной стека
При работе со стеком используется принцип «последним вошел, первым вышел» (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