Руководство по препроцессору FASM (Неизвестен) - страница 2

или >"). Комментарии же удаляются без анализа того, что в них написано.

В строке после символа >\ могут быть только пробелы или комментарии.

Ранее, я упоминал, что строка, состоящая только из комментария не удаляется, а заменяется на пустую строку. Это значит, что код, подобный этому:

>db 1, 2, 3,\

>; 4,5,6,\   - закомментировано

> 7, 8, 9

преобразуется в:

>db 1, 2, 3

> 7, 8, 9

и вызовет ошибку. Выход из положения — помещать символ \ до комментария:

>db 1, 2, 3,\

>\; 4,5,6     - правильно закомментировано

> 7, 8, 9

в результате будет:

>db 1, 2, 3, 7, 8, 9

как мы и хотели.

2.4. Директива INCLUDE

Синтаксис:

>include 'file name'

Эта директива вставляет содержимое файла >file name в исходный текст. Вставленный текст, естественно, тоже будет обработан препроцессором. Имя файла (и путь к нему, если он есть) должны быть заключены в кавычки >" или апострофы >'.

Например:

>include 'file.asm'

>include 'HEADERS\data.inc'

>include '..\lib\strings.asm'

>include 'C:\config.sys'

Можно также использовать переменные окружения ОС, помещая их имена между символами >%:

>include '%FASMINC%\win32a.inc'

>include '%SYSTEMROOT%\somefile.inc'

>include '%myproject%\headers\something.inc'

>include 'C:\%myprojectdir%\headers\something.inc'

3. Присваивания (Equates)

3.1. Директива EQU

Простейшая команда препроцессора. 

Синтаксис:

>name1 equ name2

Это команда говорит препроцессору, что необходимо заменить все последующие >name1 на >name2.

Например:

>count equ 10 ; это команда препроцессора

>mov ecx, count

преобразуется в:

>mov ecx, 10

Ещё пример:

>mov eax, count

>count equ 10

>mov ecx, count

преобразуется в:

>mov eax, count

>mov ecx,10

потому что препроцессор заменит >count только после директивы >equ.

Даже это работает:

>10 equ 11

>mov ecx, 10

после обработки препроцессором, получим:

>mov ecx, 11

Обратите внимание, >name1 может быть любым идентификатором. Идентификатор — это всего лишь набор символов, завершаемый пробелом (space), символом табуляции (tab), концом строки (EOL), комментарием >;, символом переноса строки >\ или оператором, включая операторы ассемблера и/или специальные символы вроде >, или >}.

>name2 может быть не только единичным идентификатором, берутся все символы до конца строки. >name2 может и отсутствовать, тогда >name1 будет заменен на пустое место.

Например:

>10 equ 11, 12, 13

>db 10

получим:

>db 11, 12, 13

3.2. Директива RESTORE

Можно заставить препроцессор прекратить заменять идентификаторы, определённые директивой >EQU. Это делает директива >RESTORE.

Синтаксис:

>restore name1

>name1 — это идентификатор определённый ранее в директиве >EQU. После этой команды name больше не будет заменяться на