- •Введение
- •Сведения об архитектуре процессоров 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.6.7. Директивы управления трансляцией
Директива END указывает компилятору на то, что необходимо завершить трансляцию.
формат: END [<имя>]
где [<имя>] - точка входа в программу.
Параметр формально не является обязательным, но надо иметь в виду, что при отсутствии указания точки входапрограмма не запустится на исполнение после загрузки ЕХЕ-Файла.
Директива ORG позволяет изменить содержимое счетчика адреса, т.е. присваивает значение адреса, определяемого выражением, следующему за директивой коду.
формат: ORG <выражение>
2.6.8. Макросредства
Макросредства языка ассемблера позволяют формировать в исходной программе блок команд (макроопределение), имеющий имя, и затем многократно использовать это имя для включения этого блока команд в программу. В процессе трансляции макрокоманда (имя с параметрами) замещается последовательностью команд в соответствии с макроопределением, в результате чего формируется макрорасширение. В исходный текст макрокоманда может включаться столько раз, сколько это необходимо. Макрокоманды выполняют те же функции, что и подпрограммы, т.е. обеспечивают многократное и функционально законченное действие. Различие заключается в том, что подпрограмма присутствует в программе один раз, тогда как макрорасширение дублируется столько раз, сколько раз макрокоманда встречается в исходном тексте программы. Код подпрограммы неизменен, в то время как макрорасширение может зависеть от параметров макрокоманды. Параметры макрокоманды включаются в макрорасширение в процессе трансляции.
Макроопределение представляет собой последовательность команд, начинающуюся директивой MACRO и заканчивающуюся директивой ENDM.
формат: <имя> MACRO [<формальный_параметр>,.........]
<тело макрокоманды>(последовательность строк на языке ассемблера)
ENDM
Именем макрокоманды считается имя, указанное в директиве MACRO, формальные параметры представляют собой внутренние по отношению к данному макроопределению имена, которые используются для обозначения значений, передаваемых в макрорасширение при трансляции. Может быть определено любое число параметров, но все они должны помещаться в одной строке и разделяться запятыми.
Если в теле макрокоманды есть метки, то они должны быть описаны директивой LOCAL.
формат: LOCAL <метка_1>[,...........]
Тогда при каждом макровызове значение метки будет соответствовать конкретному макрорасширению. Директива LOCAL должна следовать в тексте непосредственно за директивой MACRO.
Здесь рассматривались наиболее часто используемые директивы. Перечень директив с кратким описанием их назначения приведен в прил. 2.
2.7. Операции в выражениях
Выражения, являющиеся операндами команд или параметрами директив, принимают конкретные значения в процессе трансляции. Операции можно разделить на пять групп: арифметические, логические, отношения, возвращающие значения и операции присваивания атрибута.
2.7.1. Арифметические операции
Арифметические операции производятся над числовыми операндами и дают числовой результат.
формат выражения:<значение1> <знак операции> <значение2>
Знаки операций и результат их выполнения приведены в табл. 1
Таблица 1
Арифметические операции
Знак операции |
Действие |
+ |
Складывает <значение1> и <значение2> |
- |
Вычитает <значение2> из <значения1> |
* |
Умножает <значение1> на <значение2> |
/ |
Делит нацело <значение1> на <значение2>. и возвращает частное |
MOD |
Делит нацело <значение1> на <значение2> и возвращает остаток |
Выражения с операциями сдвига имеют отличный от первого формат: <значение> <знак операции> <выражение>.
Знаки операций и результат их выполнения приведены в табл.2.
Таблица 2
Операции сдвига
Знак операции |
Действие |
SHL |
Сдвигает значение влево на число разрядов, равное значению выражения |
SHR |
Сдвигает значение вправо на число разрядов, равное значению выражения |
