Читаем Руководство по препроцессору FASM полностью

<p><strong>РУКОВОДСТВО ПО ПРЕПРОЦЕССОРУ FASM</strong></p><p>1. Об этом документе</p>

Я написал это потому что вижу, как многие задают вопросы на форуме FASM, связанные с непониманием идей или особенностей препроцессора. (Я не отговариваю Вас задавать такие вопросы, непонимание чего-то — это вполне нормально, и если Ваш вопрос не чересчур сложен, кто-нибудь наверняка на него ответит).

Если Вам что-нибудь из туториала покажется непонятным, пожалуйста, напишите на форум FASM, форум WASM, автору или переводчику.

<p>2. Общие понятия</p><p>2.1. Что такое препроцессор</p>

Препроцессор — это программа (или чаще — часть компилятора), которая преобразует исходный текст непосредственно перед компиляцией. К примеру, если Вы используете какой-либо кусок кода довольно часто, можно дать ему некое имя и заставить препроцессор повсеместно заменять это имя в исходном тексте на соответствующий ему код.

Другой пример — Вы хотите имитировать инструкцию, которая на самом деле не существует. В таком случае препроцессор может заменять её последовательностью инструкций дающих желаемый эффект.

Препроцессор просматривает исходный текст и заменяет некоторые вещи другими. Но как объяснить препроцессору, что именно он должен делать? Для этих целей существуют директивы препроцессора. О них мы и будем говорить.

Препроцессор понятия не имеет о инструкциях, директивах компилятора и прочих подобных вещах. Для него существуют собственные команды, и он игнорирует всё остальное.

<p>2.2. Комментарии</p>

Подобно большинству ассемблеров, комментарии в FASM начинаются с точки с запятой ;. Всё, что следует за этим символом до конца строки игнорируется и удаляется из исходника.

К примеру, исходный текст

; заполним 100h байтов адресуемых EDI нулями

xor eax, eax ; обнуляем eax

mov ecx, 100h/4

rep stosd

после препроцессора превращается в

xor eax,eax

mov ecx,100h/4

rep stosd

ПРИМЕЧАНИЕ:; можно рассматривать как директиву препроцессора, удаляющую текст начиная с этого символа до конца строки.

ПРИМЕЧАНИЕ: Строка, полностью состоящая из комментария не будет удалена. Она становится пустой строкой (см. пример выше). Это будет важно в дальнейшем.

<p>2.3. Перенос строки (Line Break)</p>

Если строка выглядит слишком длинной, возможно разделить её на несколько, используя символ \. При обработке препроцессором следующая строка будет добавлена к текущей.

Например:

db 1, 2, 3,\

 4, 5, 6,\

 7, 8, 9

будет преобразовано в:

db 1,2,3,4,5,6,7,8,9

Конечно, \ в составе текстовой строки или комментария не вызовет объединения строк. Внутри текстовой строки этот символ воспринимается как обычный ASCII символ (как и всё остальное заключённое между кавычками ' или "). Комментарии же удаляются без анализа того, что в них написано.

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

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

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

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

<p>2.4. Директива INCLUDE</p>

Синтаксис:

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'

<p>3. Присваивания (Equates)</p><p>3.1. Директива EQU</p>

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

Синтаксис:

name1 equ name2

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

Например:

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

mov ecx, count

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

mov ecx, 10

Ещё пример:

mov eax, count

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных