- •Введение
- •Сведения об архитектуре процессоров 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
- •Оглавление
Команды передачи управления
JMP target |
Безусловный переход |
JA или JNBE |
Переход по условию «больше» или «не меньше и не равно» (для чисел без знака) |
JAE или JNB |
Переход по условию «больше и равно» или «не меньше» (для чисел без знака) |
JB JNAE JC |
Переход по условию «меньше» или «не больше и не равно» (для чисел без знака) и при наличии переноса |
JBE JNA |
Переход по условию «меньше или равно» и «не больше» |
JE JZ |
Переход по равенству или по нулевому результату |
JG JNLE |
Переход по условию «больше» или «не меньше и не равно» (для чисел со знаком) |
JGE JNL |
Переход по условию «больше и равно» или «не меньше» (для чисел со знаком) |
JL JNGE |
Переход по условию «меньше» или «не больше и не равно» (для чисел со знаком) |
JLE JNG |
Переход по условию «меньше или равно» или «не больше» (для чисел со знаком) |
JNC |
Переход при отсутствии переноса |
JNE JNZ |
Переход по неравенству и по неравенству нулю |
JNO |
Переход при отсутствии переполнения |
JNP JPO |
Переход по нечетности |
JNS |
Переход по плюсу |
JO |
Переход при наличии переполнения |
JP JPE |
Переход по четности |
JS |
Переход по минусу |
JCXZ |
Переход, если СХ=0 |
JECXZ |
Переход, если ЕСХ=0 |
LOOP |
Переход, если ЕСХ не равен 0 |
LOOPE LOOPZ |
Переход, если ЕСХ не равен 0 и флаг ZF установлен |
LOOPNE LOOPNZ |
Переход, если ЕСХ не равен 0 и флаг ZF сброшен |
CALL target |
Переход к подпрограмме |
RET [N] |
Возврат из подпрограммы. Необязательный параметр N указывает, сколько байт освободить в стеке |
ENTER par1,par2 |
Подготовка стека при входе в процедуру |
LEAVE |
Приведение стека в исходное состояние |
BOUND reg16,mem16 |
Предполагается, что регистр содержит текущий индекс массива, а второй операнд определяет в памяти два слова или два двойных слова. Первое содержит минимальное значение индекса, второе – максимальное. Если текущее значение индекса оказывается вне границ, генерируется команда INT 5 |
BOUND reg32,mem32 |
Командные прерывания
INT n |
Осуществляется переход к программе обработки прерываний по адресу, указанному в n-ом элементе таблицы векторов прерываний |
INTO |
Равносильна команде INT 4, выполняется, если произошло переполнение (OF=1) |
IRET |
Возврат из программы обработки прерываний |
Команды управления процессором
CLC |
Сброс флага переноса |
CMC |
Инверсия флага переноса |
STC |
Установка флага переноса |
CLD |
Сброс флага направления |
STD |
Установка флага направления |
CLI |
Запрет внешних прерываний |
STI |
Разрешение внешних прерываний |
CTS |
Сброс флага переключения задач |
HLT |
Останов |
LOCK |
Префикс блокировки шины |
NOP |
Холостая команда |
WAIT (FWAIT) |
Синхронизация с арифметическим сопроцессором |
