- •Введение
- •Сведения об архитектуре процессоров 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
- •Оглавление
Функции api
1. Функция GetModuleHandleA
Функция GetModuleHandleA возвращает базовый адрес модуля, указывающий, куда был отображен в адресном пространстве процесса EXE- или DLL-файл. При вызове функции имя файла передается в виде строки символов с нулем на конце. Если в качестве параметра функции передается нуль, возвращается базовый адрес данного EXE-файла.
Если функция не выполнилась, возвращаемое значение - нуль.
2. Функция LoadIcon
В процессе инициализации структуры WNDCLASS используются две функции API для обеспечения связи предопределенных пиктограммы и курсора с создаваемым окном.
Функция LoadIcon возвращает в случае успешного завершения адрес программы обработки пиктограммы.
Парамеры:
- дескриптор модуля, содержащего программу обработки пиктограммы. Этот параметр должен быть нулевым, если будет использоваться стандартная пиктограмма;
- указатель на последовательность символов с нулем на конце, содержащую имя ресурса пиктограммы. Если используется предопределенная пиктограмма, параметр может принимать следующие значения:
IDI_APPLICATION заданная по умолчанию пиктограмма,
IDI_ASTERISK звездочка (используется в информационных сообщениях),
IDI_EXCLAMATION восклицательный знак (используется в предупреждающих сообщениях),
IDI_HAND "рука" (используется в серьезных предупреждающих сообщениях),
IDI_QUESTION вопросительный знак,
IDI_WINLOGO эмблема Windows (только для Windows95).
В случае неудачного завершения функция LoadIcon возвращает нуль.
3. Функция LoadCursor
Функция LoadCursor возвращает в случае успешного завершения дескриптор курсора.
Продолжение прил. 3
Параметры:
- дескриптор модуля, содержащего программу обработки курсора. Этот параметр должен быть нулевым, если будет использоваться предопределенный курсор;
- указатель на последовательность символов с нулем на конце, содержащую имя ресурса курсора. Если используется предопределенный курсор, параметр может принимать следующие значения:
IDC_APPSTARTING Стандартная стрелка и песочные часы
IDC_ARROW Стандартная стрелка
IDC_NO Перечеркнутый круг
IDC_SIZEALL Стрелка с четырьмя указателями
IDC_SIZE Стрелка с четырьмя указателями (только
для Windows NT)
IDC_SIZENESW Двойная стрелка, указывающая северо-восток и юго-запад
IDC_SIZENS Двойная стрелка, указывающая север - юг
IDC_SIZENWSE Двойная стрелка, указывающая северо-запад - юго-восток
IDC_SIZEWE Двойная стрелка, указывающая запад - восток
IDC_UPARROW Вертикальная стрелка
IDC_WAIT Песочные часы
Функция возвращает нуль, если курсор не найден.
4. Функция Register Class
Функция Register Class регистрирует класс окна, атрибуты которого определены в структуре WNDCLASS. В качестве параметра функции передается адрес структуры WNDCLASS, описывающей соответствующее окно. В случае успешного завершения возвращаемое значение не равно нулю, если класс окна не зарегистрирован – нуль. Класс окна регистрируется только один раз – при первом запуске приложения.
5. Функция CreateWindowExA
Функция CreateWindowExA создает окно, имеющее указанный тип и принадлежащее указанному классу.
Далее формальное описание функций для обеспечения компактности Продолжение прил. 3
приведено на языке С. В справочной системе win32sdk прототип функции представлен следующим образом:
HWND CreateWindowEx(
DWORD dwExStyle, // расширенный стиль
LPCTSTR lpClassName, // адрес имени класса окна
LPCTSTR lpWindowName, // адрес названия окна
DWORD dwStyle, // стиль окна
int x, // координаты верхнего
int y, // левого угла окна
int nWidth, // ширина окна
int nHeight, // высота окна
HWND hWndParent, // дескриптор родительского окна
HMENU hMenu, // дескриптор меню
HINSTANCE hInstance, // базовый адрес модуля
LPVOID lpParam // адрес дополнительных данных
);
В программе параметры передаются через стек с учетом соглашения STDCALL, то есть в обратном порядке. Смысл параметров следующий:
lpParam используется при необходимости в качестве указателя на данные, которые впоследствии могли бы использоваться программой;
hInstance – базовый адрес модуля, с которым связано создаваемое окно;
hMenu – дескриптор меню или идентификатор порожденного окна;
hWndParent – дескриптор родительского окна или окна-владельца;
nHeight – начальный размер окна по высоте;
nWidth - начальный размер окна по ширине;
х,у являются координатами левого верхнего угла окна;
dwStyle определяет стиль окна и может принимать следующие значения:
WS_OVERLAPPED – наиболее универсальный тип окна – перекрывающее окно, имеет название и рамку;
WS_ICONICPOPUP – всплывающее окно, первоначально минимизированное;
WS_POPUP – всплывающее окно, чаще всего используется для отображения диалогового окна;
WS_CHILD – порожденное окно;
WS_MINIMIZE - первоначально минимизированное окно;
WS_VISIBLE – окно становится видимым сразу после создания;
WS_DISABLED – создается неактивное окно;
WS_CLIPSIBLINGS – исключает области, занимаемые другими порожденными окнами из изменяемой области данного порожденного окна; если порожденные окна перекрываются, а стиль WS_CLIPSIBLINGS не указан, то при изменении рабочей области одного
Продолжение прил. 3
из порожденных окон могут быть испорчены рабочие области других порожденных окон, используется только со стилем WS_CHILD;
WS_CLIPCHILDREN – исключает области, занимаемые порожденными окнами при изменении рабочей области родительского окна;
WS_MAXIMIZE – окно будет отображено в максимально возможном для него размере;
WS_CAPTION – окно имеет рамку и название (заголовок), может перемещаться по экрану с помощью мыши (включает в себя стиль WS_BORDER);
WS_BORDER – окно имеет широкую рамку без заголовка;
WS_DLGFRAME – окно имеет тонкую рамку без заголовка;
WS_VSCROLL – окно имеет вертикальную линейку прокрутки;
WS_HSCROLL - окно имеет горизонтальную линейку прокрутки;
WS_SYSMENU – окно имеет меню в заголовке окна;
WS_THICKFRAME – окно имеет рамку изменения размеров;
WS_MINIMIZEBOX – окно имеет кнопку минимизации;
WS_MAXIMIZEBOX – окно имеет кнопку максимизации;
lpWindowName – адрес строки, содержащей заголовок окна;
lpClassName – адрес строки, содержащей имя класса;
dwExStyle – определяет расширенный стиль окна, может, например, принимать значение WS_EX_ABSPOSITION, означающее, что окно не двигается, когда рабочая область перемещается.
