- •Введение
- •Сведения об архитектуре процессоров intel 80х86 и операционной системе windows, необходимые для программирования на ассемблере
- •1.1. Программно доступные регистры
- •1.2. Организация памяти [5]
- •1.2.1. Сегментация
- •1.2.2. Дескрипторы сегментов
- •1.2.3 Адресное пространство режима реального адреса
- •1.2.4. Адресное пространство защищенного режима [6]
- •1.2.5. Виртуальное адресное пространство
- •1.2.6. Способы адресации операндов
- •Регистровый операнд
- •Непосредственный операнд
- •1.3. Организация ввода – вывода
- •1.3.1. Консоль
- •1.3.2. Графический интерфейс пользователя
- •1.4. Система команд
- •Команды пересылки данных
- •Команды ввода/вывода
- •Команды целочисленной арифметики
- •Логические операции
- •Операции сдвигов
- •Команды передачи управления
- •Командные прерывания
- •Команды управления процессором
- •Команды обработки последовательности кодов
- •Команды для работы со стеком
- •2. Описание языка ассемблера
- •2.1. Алфавит языка ассемблера
- •2.2. Лексемы
- •2.3. Имена
- •2.3.1. Ключевые слова
- •2.3.2. Имена пользователя
- •2.4. Константы
- •2.4.1.Целые числа
- •2.4.2. Вещественные числа
- •2.4.3. Символьные и строковые константы
- •2.5. Структура строки языка ассемблера
- •2.5.1. Структура строки, содержащей машинную команду
- •2.6.3. Директивы упрощенного определения сегментов
- •2.6.4. Директивы определения сегментов и групп
- •2.6.5. Директивы описания процедуры
- •2.6.6. Директивы определения данных
- •2.6.7. Директивы определения имен
- •2.6.8. Директивы внешних ссылок
- •2.6.7. Директивы управления трансляцией
- •2.6.8. Макросредства
- •2.7. Операции в выражениях
- •2.7.1. Арифметические операции
- •2.7.2. Логические операции
- •2.7.3. Операции отношения
- •2.7.4. Операции, возвращающие значения
- •2.7.5. Операции присваивания атрибута
- •Трансляция программ
- •. Компиляция
- •3.2. Компоновка
- •Библиографический список
- •Функции api
- •1. Функция GetModuleHandleA
- •2. Функция LoadIcon
- •3. Функция LoadCursor
- •4. Функция Register Class
- •5. Функция CreateWindowExA
- •6. Функция ShowWindow
- •7. Функция UpdateWindow
- •8. Функция GetMessage
- •9. Функция DispatchMessage
- •10. Функция ExitProcess
- •11. Функция BeginPaint
- •12. Функция TextOutA
- •13. Функция EndPaint
- •Описание структур, определенных в фале win32.Inc
- •1. Структура wndclass
- •2. Структура сообщения
- •3. Структура paintstruct
- •Продолжение прил. 4
- •4. Структура rect
- •Формат командной строки и ключи транслятора tasm32
- •Формат командной строки и ключи компоновщика tlink32
- •Оглавление
1.4. Система команд
Машинная команда представляет собой закодированное по определенным правилам указание процессору на выполнение определённых действий. В своих программах мы будем использовать основные команды процессора 80386, так как они входят в состав систем команд последующих моделей процессоров. В ассемблере используются мнемокоды команд, то есть коды операций и операнды представлены с помощью символов алфавита языка, причем собственно коды операций являются ключевыми словами. Для лучшего использования и освоения системы команд ее принято делить на группы по функциональному назначению. Ниже приводится базовая система команд микропроцессора 80386 без команд арифметического сопроцессора и расширений [4].
Приняты следующие условные обозначения операндов: src – источник данных, dest – приемник данных, r – регистр, m – память, port – порт ввода-выода
Команды пересылки данных
MOV dest,src
|
Пересылка данных в регистр из регистра, памяти или непосредственного операнда. Пересылка данных в память из регистра или непосредственного операнда |
XCHG r/m,r |
Обмен данными между регистрами или регистром и памятью |
MOVSX r,r/m |
Пересылка байта или слова с его расширением до слова или двойного слова с дублированием знакового бита |
MOVZX r,r/m |
Пересылка байта или слова с его расширением до слова или двойного слова с дублированием нулевого бита |
XLAT |
Загрузить в AL байт из таблицы в сегменте данных , на начало которой указывает содержимое EBX(BX), при этом начальное значение AL является смещением |
LEA r,m |
Загрузка исполнительного адреса. Относительный адрес второго операнда загружается в регистр. Команда LEA r,mem эквивалентна команде MOV r,offset mem |
LDS r,m |
Загрузка указателя. Считывает из памяти двойное слово, содержащее полный адрес некоторой ячейки и загружает младшую часть указателя в указанный регистр, старшую – в регистр DS. Допускается использование 32-разрядного регистра и 32-разрядного смещения |
LES r,m |
Аналогично предыдущей, но с регистром ES |
LGS r,m |
Аналогично предыдущей, но с регистром GS |
LSS r,m |
Аналогично предыдущей, но с регистром SS |
SETcc r/m |
Установка байта по условию «сс», аналогичному условиям в командах условной передачи управления при выполнении условия в 1, в противном случае в 0 |
LAHF |
Копирует содержимое младшего байта регистра флагов (SF, ZF, AF, PF, CF ) в регистр AH |
SAHF |
Копирует содержимое регистра AH в младший байт регистра флагов |
Команды ввода/вывода
IN AL(AX,EAX),port |
Ввод в аккумулятор из порта ввода/вывода. Порт адресуется непосредственно |
IN AL(AX,EAX),DX |
Ввод в аккумулятор из порта ввода/вывода. Порт адресуется косвенно через регистр DX |
INS INSB INSW INSD |
Вводит данные из порта, адресуемого регистром DX в ячейку ES:[EDI/DI]. После ввода байта, слова или двойного слова производится коррекция EDI/DI на 1, 2, 4 соответственно. При наличии префикса повторения процесс продолжается, пока содержимое ECX/CX не станет равным 0 |
OUT port,AL(AX,EAX) |
Вывод из аккумулятора в порт ввода/вывода. Порт адресуется непосредственно |
OUT DX,AL(AX,EAX) |
Вывод из аккумулятора в порт ввода/вывода. Порт адресуется косвенно через регистр DX |
OUTS OUTSB OUTSW OUTSD |
Выводит данные из ячейки памяти, адресуемой регистрами DS:[ESI/SI] в порт, адресуемый DX. После вывода производится коррекция ESI/SI. При наличии префикса повторения процесс повторяется пока ECX/CX не 0 |
