Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр_на_ассембл_для_WINLOWS.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
908 Кб
Скачать
☆

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