- •Введение
- •Сведения об архитектуре процессоров 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
- •Оглавление
9. Функция DispatchMessage
Функция DispatchMessage передает сообщение оконной процедуре. Обычно используется для передачи сообщения, считанного из очереди сообщений функцией GetMessage.
В качестве параметра функции передается адрес структуры, которая содержит сообщение.
Возвpащаемое значение определяется оконной процедурой, обычно игноpиpуется.
Продолжение прил. 3
10. Функция ExitProcess
Прототип:
VOID ExitProcess(
UINT uExitCode // код завершения процесса
);
Параметр uExitCode определяет код завершения для процесса и для всех потоков, которые завершаются в результате этого обращения.
Эта функция не возвращает никакого значения.
11. Функция BeginPaint
Функция BeginPaint готовит окно к перерисовке и заполняет структуру PAINTSTRUCT.
Прототип:
HDC BeginPaint(
HWND hwnd, // дескриптор окна
LPPAINTSTRUCT lpPaint // указатель на структуру PAINTSTRUCT
);
Параметр hwnd – дескриптор окна, которое будет перерисовываться, lpPaint - адрес соответствующей структуры PAINTSTRUCT.
Функция возвращает дескриптор контекста устройства (DC), в случае неудачного завершения – нуль.
12. Функция TextOutA
Функция TextOutA выводит последовательность символов в определенное место рабочей области окна текущим шрифтом.
Прототип:
BOOL TextOut(
HDC hdc, // дескриптор контекста устройства
int nXStart, // x-координата началаизображения
int nYStart, // y- координата началаизображения
LPCTSTR lpString, // указатель на строку
int cbString // число символов в строке
);
Продолжение прил. 3
Параметр hdc определяет контекст устройства, nXStart и nYStart – координаты начала текста, lpString – адрес последовательности символов, cbString – количество выводимых символов.
13. Функция EndPaint
Функция EndPaint определяет конец перерисовки данного окна. Вызов этой функции требуется после каждого обращения к функции BeginPaint.
Прототип:
BOOL EndPaint(
HWND hWnd, // дескриптор окна
CONST PAINTSTRUCT lpPaint // указатель на структуру //PAINTSTRUCT
);
Параметр hWnd определяет перерисованное окно, lpPaint – указывает на структуру PAINTSTRUCT, содержащую информацию об области обновления данного окна.
Эта функция всегда возвращает значение TRUE.
Приложение 4
Описание структур, определенных в фале win32.Inc
1. Структура wndclass
Структура WNDCLASS является основой объекта "Окно". Во включаемом файле (в наших примерах - win32.inc) эта структура представлена следующим образом:
WNDCLASS struc
ClsStyle UINT ? ;стиль класса
ClsLpfnWndProc ULONG ? ;адрес оконной процедуры
ClsCbClsExtra UINT ?
ClsCbWndExtra UINT ?
ClsHInstance UINT ? ;дескриптор модуля
ClsHIcon UINT ? ;дескритор модуля,
;содержащего пикто-
;грамму
ClsHCursor UINT ? ;дескриптор модуля
;курсора
ClsHbrBackground UINT ? ;дескриптор модуля
;кисти
ClsLpszMenuName ULONG ? ;адрес имени меню
ClsLpszClassName ULONG ? ;адрес имени класса
;окна
WNDCLASS ends
Типы данных UINT, ULONG соответствуют типу CARDINAL и представляют собой целое положительное 32-разрядное число. В файле win32.inc UINT и ULONG описаны как синонимы директивы DD.
Поле ClsStyle определяет стиль класса и в нашем случае является комбинацией следующих значений, объединяемых операцией ИЛИ:
CS_HREDRAW – выводится повторно все окно в случае его перемещения или изменения ширины;
CS_VREDRAM – выводится повторно все окно, если оно перемещалось или изменялась высота;
CS_GLOBALCLASS – позволяет прикладной программе создавать окно класса независимо от значения параметра hInstance, переданного функции CreateWindow или CreateWindowEx. Если этот стиль не определен, параметр hInstance, переданный функции CreateWindow или CreateWindowEx, должен соответствовать параметру, переданному функции RegisterClass.
Поле ClsLpfnWndProc должно содержать адрес оконной процедуры.
Поле ClsCbClsExtra определяет дополнительное число байтов для структуры класса окна, которые система резервирует в служебной памяти для всех окон этого класса. При создании каждого нового окна Windows создает и заполняет собственную структуру класса окна для каждого созданного окна.
Продолжение прил. 4
Поле ClsCbWndExtra задает в байтах объем памяти, резервируемой системой в конце каждой такой структуры каждого окна данного класса. Если прикладная программа использует структуру WNDCLASS для регистрации диалогового окна, созданного директивой CLASS в файле ресурсов, ClsCbWndExtra должна содержать значение DLGWINDOWEXTRA.
Поле ClsHInstance содержит базовый адрес данного EXE-файла, полученный с помощью функции GetModuleHandle.
Поля ClsHIcon, ClsHCursor и ClsHbrBackground определяют пиктограмму, курсор и фон окна соответственно.
Поле ClsLpszMenuName указывает на строку, содержащую имя меню окна, если оно есть.
Поле ClsLpszClassName указывает на строку, содержащую имя класса окна.
