Библиотека knigago >> Справочная литература >> Руководства и инструкции >> Flat Assembler 1.64. Мануал программера


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 2372, книга: Бургомистр города Верне
автор: Жорж Сименон

"Бургомистр города Верне" Жоржа Сименона — это классический детектив, который захватывает читателя с самого начала. Сименон, мастер детективного жанра, умело создает атмосферу тайны и саспенса, которая сохраняется на протяжении всей книги. История разворачивается в тихом провинциальном городке Верне, где происходит серия жестоких убийств. По мере того, как растет число жертв, местный комиссар Мегрэ оказывается под давлением со стороны начальства, которому необходимо найти...

СЛУЧАЙНАЯ КНИГА

Tomasz Grysztar - Flat Assembler 1.64. Мануал программера

Flat Assembler 1.64. Мануал программера
Книга - Flat Assembler 1.64. Мануал программера.  Tomasz Grysztar  - прочитать полностью в библиотеке КнигаГо
Название:
Flat Assembler 1.64. Мануал программера
Tomasz Grysztar

Жанр:

Руководства и инструкции, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, Assembler

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Flat Assembler 1.64. Мануал программера"

Аннотация к этой книге отсутствует.

Читаем онлайн "Flat Assembler 1.64. Мануал программера". [Страница - 15]

bx ecx

{ xor reg,reg }

сгенерирует строки:

xor al,al

xor bx,bx

xor ecx,ecx

Блоки, определенные директивами «irp» и «irps», обрабатываются так же, как макросы, то есть операнды и директивы, специфичные для макросов могут в них свободно использоваться.

2.3.6 Условный препроцессинг

При применении директивы «match» некоторый блок кода обрабатывается препроцессором и передаётся ассемблеру, только если заданная последовательность символов совпадает с образцом. Образец идет первым, заканчивается запятой, далее идут символы, которые должны подходить под образец, и далее блок кода, заключенный в фигурные скобки, как макроинструкция.

Есть несколько правил для построения выражения для сравнения, первое — это любые символьные знаки и строки в кавычках должны соответствовать абсолютно точно. В этом примере:

match +,+ { include 'first.inc' }

match +,- { include 'second.inc' }

Первый файл будет включен, так как «+» после запятой соответствует «+» в образце, а второй файл не будет включен, так как совпадения нет.

Чтобы соответствовать любому другому символу буквально, он должен предварятья знаком «=» в образце. Также чтобы привести в соответствие сам знак «=», или запятую должны использоваться конструкции «==» и «=,». Например, образец «=a==» будет соответствовать последовательности «a=».

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

match a-b, 0–7

{ dw a,b-a }

сгенерирует инструкцию «dw 0, 7–0». Каждое имя всегда ставится в соответствие как можно меньшему количеству символов, оставляя оставшиеся, то есть:

match a b, 1+2+3 { db a }

имя «a» будет соответствовать символу «1», оставляя последовательность «+2+3» в соответствие с «b». Но, таким образом:

match a b, 1 { db a }

для «b» ничего не остается, и блок вообще не будет обработан.

Блок кода, определенный директивой «match» обрабатывается так же, как любая макроинструкция, поэтому здесь могут использоваться любые операторы, специфичные для макроинструкций.

Что делает директиву «match» очень полезной, так это тот факт, что она заменяет символьные константы на их значения в поставленной в соответствие последовательности символов (то есть везде после запятой до начала блока кода) перед началом сопоставления. Благодаря этому директива может использоваться, например, для обработки некоторого блока кода в зависимости от выполнения условия, что данная символьная константа имеет нужное значение, например:

match =TRUE, DEBUG { include 'debug.inc' }

здесь файл будет включен, только если символьная константа «DEBUG» определена со значением «TRUE».

2.3.7 Порядок обработки

При сочетании разных свойств препроцессора важно знать порядок, в котором они обрабатываются. Кат уже было отмечено, высший приоритет имеет директива «fix» и замены, ею определенные. Это полностью делается перед совершением любого другого препроцессинга, поэтому такой кусок кода:

V fix {

  macro empty

   V

V fix }

   V

делает допустимое определение пустого макроса. Можно сказать, что директива «fix» и приоритетные константы обрабатываются на отдельной стадии, и весь остальной препроцессинг делается на результирующем коде.

Стандартный препроцессинг, который начинается после, на каждой строке начинается с распознавания первого символа. Сначала идет проверка на директивы препроцессора, и если ни одна из них не опознана, препроцессор проверяет, является ли первый символ макроинструкцией. Если макроинструкция не найдена, препроцессор переходит ко второму символу на строке, и снова начинает с проверки на директивы, список которых в этом случае ограничивается лишь «equ», так как только она может оказать вторым символом на строке. Если нет директивы, второй символ проверяется на структурную макроинструкцию, и если ни одна из этих проверок не дала положительного результата, символьные константы заменяются на их значения, и строка передается ассемблеру.

Продемонстрируем это на примере. Пусть «foo» — это макрос, а «bar» — это структура. Эти строки:

foo equ

foo bar

обе будут интерпретированы как вызовы макроса «foo», так как значение первого символа берет верх над значением второго.

Макроинструкции --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.