- •Введение
- •Сведения об архитектуре процессоров 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
- •Оглавление
2.7.2. Логические операции
Знаки логических операции имеют те же имена, что и соответствующие команды процессора. Разница заключается в том, что логические операции выполняются на стадии трансляции, а команды - при исполнении программы. Три из логических операций двуместные, и включающие их выражения имеют одинаковый формат;
<звачение1> <знак операцию <значение2>
Таблица 3
Двуместные логические операции
Знак операции |
Действие |
AND |
Операция И над <значением1> и <значением2> |
OR |
Операция ИЛИ над <значением1> и <значением2> |
XOR |
Операция сложения по модулю два над <значением1> и <значением2> |
Одноместная операция NOT имеет формат: NOT <значение> и выполняет поразрядную инверсию <значения>.
2.7.3. Операции отношения
Операции отношения сравнивают два результата вычисления выражений и дают числовой результат. Результатом будет одно из двух чисел: 0, если отношение "ложно", и 0FFFFH, если оно "истинно". Результат дан в предположении, что тип приемника – слово.
Формат выражения: <выражение1><знак операции><выражение2>
Таблица 4
Операции отношения
Знак операции |
Результат |
EQ |
Истинно, если значения выражений совпадают |
NE |
Истинно, если значения выражений не совпадают |
LT |
Истинно, если значение <выражения1> меньше значения <выражения2> |
GT |
Истинно, если значение <выражения1> больше значения <выражения2> |
LE |
Истинно, если значение <выражения1> меньше или равно значению <выражения2> |
GE |
Истинно, если значение <выражения1> больше или равно значению <выражения2> |
2.7.4. Операции, возвращающие значения
Формат: $ - возвращает значение счетчика текущей ячейки.
Например: MOV BX,$-START означает, что если метка START указывает на первую команду программы, в ВХ будет занесено значение, соответствующее смещению этой команды в программном сегменте.
Формат: SEG <переменная> или SEG <метка> Возвращает сегментный адрес переменной или метки. Операция используется только в программах режима реального адреса.
Формат: OFFSET <переменная> или OFFSET <метка> Возвращает смещение переменной или метки.
Формат: LENGTH <переменная>
Возвращает длину в единицах определения переменной, при определении которой был использован оператор DUP.
Формат: TYPE <переменная> или TYPE <метка>
Для переменной операция возвращает 1, если она имеет тип байт; 2, если слово; 4, если двойное слово. Для меток она возвращает 1, если метка имеет атрибут NEAR, или 2, если атрибут FAR.
Формат: SIZE <переменная>
Возвращает размер переменной в байтах, т.е. произведение результатов выполнения операций LENGTH и TYPE.
2.7.5. Операции присваивания атрибута
Формат: <тип> PTR <имя>
Изменяет атрибут типа ВYТЕ, WORD или DWORD.
Изменение атрибута дистанции (NEAR или FAR) имеет смысл только для программ режима реального адреса.
Выражения DS:DSEG, CS:CSEG, ES:ESEG, SS:SSEG в директиве ASSUME означают, что сегменты с именами DSEG, CSEG, ESEG и SSEG будут использоваться в соответствии со связанными с ними сегментными регистрами по умолчанию.
Формат: JMP SHORT <метка>
Устанавливает атрибут метки NEAR команды JMP и указывает, что переход осуществляется не более чем на 127 байт вперед и на 128 байт назад.
Формат: HIGH <выражение>
Возвращает старший байт 16-разрядного числового значения или адресного выражения.
Формат: LOW <выражение>
Возвращает младший байт 16-разрядного числового значения или адресного выражения.
