- •Введение
- •Сведения об архитектуре процессоров 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. Структура сообщения
Выполняемая в среде Windows программа реагирует на события. Событиями являются, например, щелчки и перемещение мыши, нажатие клавиш и вообще любое изменение среды окружения данной программы. Система сообщает приложению о событии при помощи сообщения, которое описывает изменение, произошедшее в окружающей приложение среде. Сообщения извлекаются из системной очереди. Каждое сообщение связывается с конкретным окном приложения, с каждым из которых, в свою очередь, связана собственная оконная процедура. Приложение получает сообщение с помощью функции GetMessage, после чего обращается к Windows посредством функции DispatchMessage. Затем Windows вызывает соответствующую оконную процедуру и передает ей это сообщение для обработки. Если сообщение не обрабатывается оконной процедурой, она передает его для обработки системе.
Структура сообщения представлена во включаемом файле следующим образом:
MSGSTRUCT struc
MsHWND UINT ?
MsMESSAGE UINT ?
MsWPARAM UINT ?
MsLPARAM ULONG ?
MsTIME ULONG ?
MsPT ULONG ?
ULONG ?
MSGSTRUCT ends
Поле MsHWND указывает, какому окну передается сообщение. В поле MsMESSAGE передается код сообщения. Поля MsWPARAM и MsLPARAM содержат специфичную для сообщения информацию. Например, если поле сообщения содержит VM_MOUSEMOVE, то поле MsWPARAM содержит Продолжение прил. 4
информацию о том, какая клавиша нажата, а MsLPARAM – информацию о координатах курсора. Поля MsTIME и MsPT содержат соответственно время и позицию курсора, определенные в момент создания сообщения.
3. Структура paintstruct
Взаимодействие приложения с устройствами вывода информации осуществляется с помощью функций интерфейса графических устройств (Graphic Device Interface – GDI). При работе с этими функциями, будь то рисование линии или вывод текста на экран, приложение оперирует с неким стандартизированным описанием параметров устройства, так называемым контекстом устройства (Device Context – DC). Контекст устройства как структура данных автоматически создается системой и размещается в перемещаемом сегменте памяти. Для каждого окна необходимо иметь информацию о контексте устройства. Поэтому алгоритм вывода информации в рабочую область окна можно представить тремя действиями: запрос на создание контекста устройства, операция вывода, освобождение контекста устройства.
Если оконная процедура обрабатывает сообщение WM_PAINT, кроме контекста устройства необходимо получить адрес структуры данных PAINTSTRUCT. Сообщение WM_PAINT передается приложению тогда, когда необходимо перерисовать окно. Структура PAINTSTRUCT содержит информацию для перерисовки окна приложения и в файле win32.inc представлена следующим образом:
PAINTSTRUCT STRUC
PShdc UINT ?
PSfErase UINT ?
PSrcPaint UCHAR size RECT dup (?)
PSfRestore UINT ?
PSfIncUpdate UINT ?
PSrgbReserved UCHAR 16 dup(?)
PAINTSTRUCT ENDS
Тип UCHAR в файле win32.inc представлен как синоним DB.
Поле PShdc должно содержать дескриптор контекста устройства.
Поле PsfErase определяет, должен ли быть уничтожен фон. Содержимое этого поля отлично от нуля, если приложение уничтожает фон.
Поле PsrcPaint определяет структуру RECT, которая содержит информацию о верхнем левом и правом нижнем углах прямоугольника, который необходимо перерисовать.
Остальные поля зарезервированы для внутренних нужд Windows.
