- •Введение
- •Сведения об архитектуре процессоров 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.5. Директивы описания процедуры
Процедура представляет собой последовательность команд, выполняющих в программе некоторую определенную функцию. Если процедура содержит команду RET, то она является подпрограммой. Начало процедуры отмечается директивой PROC, конец - ENDP.
формат: <имя> PROC [тип]
<имя> ENDP
Директивы помечены одним и тем же именем, которое является именем процедуры. Необязательный параметр [тип] при программировании для защищенного режима может принимать только значение NEAR(ближняя). Тип NEAR используется по умолчанию и означает, что к процедуре можно обратиться из текущего программного сегмента, а этот сегмент единственный.
2.6.6. Директивы определения данных
Простые типы данных на языке ассемблера описываются директивами DB, DW, DD,DQ, DT. Содержимое ячеек памяти определяется или резервируется как последовательность байтов, слов, двойных слов, слов четырёхкратной длины и последовательности десятибайтных участков памяти. Для понимания способа передачи данных функциям API наибольшее значение имеет один из вариантов описания сложных структур данных, реализуемый с помощью директивы STRUC. Структуры являются шаблонами именованных переменных, содержащие в себе другие переменные разных типов, именуемых полями. Формат директивы в режиме IDEAL:
STRUC <имя>
в режиме MASM:
<имя> STRUC
Затем следует описание полей с помощью директив определения простых типов данных. После описания последнего поля структуры следует директива ENDS. В режиме IDEAL в этой директиве можно указать имя структуры, в режиме MASM формат директивы: <имя> ENDS.
Структура не является переменной. Директивы DB, DW и другие, посредством которых определяются поля структуры, не резервируют памяти и ничего не записывают в код программы. Для использования структуры необходимо в сегменте данных программы зарезервировать место под её поля. Делается это следующим образом. Каждое описание переменной типа "структура" начинается с имени, за которым следует тип (имя) структуры, затем в угловых скобках следует список начального значения полей. Чтобы использовать начальные значения полей, определенные при описании структуры, скобки надо оставить пустыми. Например: в описании сегмента данных нашей программы имеется строка
wc WNDCLASS <?>.
Это означает, что мы используем переменную wc типа структуры WNDCLASS, поля которой не определены и будут заполняться в процессе выполнения программы. Сама структура определена в файле win32.inc, который включается в программы на стадии компиляции.
2.6.7. Директивы определения имен
С помощью директив определения имен (EQU,=) результату вычисления выражения присваивается имя.
формат: <имя> <Имя_директивы> <выражение>
Имя, значение которому присвоено директивой EQU, переопределить в этой же программе нельзя. Директива = позволяет, не только определить, но и переопределить имя, используя его предыдущее значение.
2.6.8. Директивы внешних ссылок
Директивы внешних ссылок служат для объединения программ, исходные тексты которых находятся в разных файлах.
Директива INCLUDE позволяет во время трансляции вставлять в исходный текст обрабатываемой программы текст из постороннего файла.
Формат: INCLUDE <имя_файла>
Директивы PUBLIC и ЕХTRN служат для объединения программ на стадии компоновки.
Директива PUBLIC делает указанные в ней имена доступными из других программных модулей.
формат: PUBLIC <имя>[,…]
Директива EXTRN описывает имена, которые определены в другом программном модуле и объявлены там директивой PUBLIC, для последующей связи с ними из данной программы.
Формат: EXTRN <имя>:<тип>[,…]
Если имя определено в сегменте данных или дополнительном сегменте, то тин принимает значения BYTE, WORD или DWORD в зависимости от того, какой тип получила переменная при определении.
Если директива EXTRN указывает на подпрограмму, то тип будет PROC.
Формат: EXTRN <имя>:PROC
