Условное ассемблирование. Операторы, следующие за директивой, до обнаружения директивы ELSE или ENDIF

Страницы работы

Содержание работы

2500 A.D. Macro Assembler  Version 4.02

УСЛОВНОЕ АССЕМБЛИРОВАНИЕ

IFZ     <значение>

IFE

Ассемблер будет  ассемблировать операторы, следующие за данной директивой, до обнаружения директивы ELSE или ENDIF, если <значение> равно 0. Условные операторы могут быть вложенными до 248 уровней. <Значение> может быть арифметическим выражением, другим символом (идентификатором) или строкой.

IF <значение>

IFN

IFNZ

COND

Ассемблирует операторы, следующие за директивой, до обнаружения директивы ELSE или ENDIF, если <значение> не равно 0. Условные операторы могут быть вложенными до 248 уровней.

FITRUE <значение>

IFNFALSE

Данная директива является фактически эквивалентной директиве IFNZ, но ее использование выглядит гораздо логичнее при использовании операций сравнения периода ассемблирования. Если заданное условие является истинным, то ассемблируются последующие операторы до обнаружения директивы ELSE или директивы ENDIF. Если данное условие является ложным, то операторы, расположенные до директивы ELSE или директивы ENDIF, не ассемблируются.

IFNTRUE <значение>

IFFALSE

Данная директива является фактически эквивалентной директиве IFZ, и она является дополнительной по отношению к директиве IFTRUE. Если заданное условие является ложным, то ассемблируются последующие операторы до обнаружения директивы ELSE или директивы ENDIF. Если данное условие является истинным, то операторы, расположенные до директивы ELSE или директивы ENDIF, не ассемблируются.

IFDEF <метка>

Данная директива будет выполнять поиск в таблице символов (идентификаторов) и, если <метка> найдена, то будут ассемблироваться операторы, следующие за данным оператором вплоть до директивы ELSE или директивы ENDIF. Если <метка> не найдена, то операторы, следующие за данным оператором вплоть до директивы ELSE или директивы ENDIF, ассемблироваться не будут.

IFNDEF <метка>

Данная директива является дополнительной по отношению к директиве IFDEF. Данная директива будет выполнять поиск в таблице символов (идентификаторов) и, если <метка> не найдена, то будут ассемблироваться операторы, следующие за данным оператором вплоть до директивы ELSE или директивы ENDIF. Если <метка> найдена, то операторы, следующие за данным оператором вплоть до директивы ELSE или директивы ENDIF, ассемблироваться не будут.

IFSAME <строка1>,<строка2>

IFNDIFF

Данная директива осуществляет сравнение <строки1> со <строкой2> и осуществляет или не осуществляет ассемблирование операторов, следующих за данным оператором, в зависимости от результатов сравнения. Если указанные две строки являются идентичными, то будут ассемблироваться операторы, следующие за данным оператором вплоть до директивы ELSE или директивы ENDIF.

Если указанные две строки не являются идентичными, то операторы, следующие за данным оператором вплоть до директивы ELSE или директивы ENDIF, ассемблироваться не будут. Строки могут быть одного из двух различных типов, а именно с пробелами или без пробелов. Однако, типы обоих сравниваемых строк должны быть идентичны. Если строки содержат пробелы, то начало и конец каждой из этих строк должны быть отмечены апострофами, а входящие в состав этих строк апострофы должны  быть отмечены использованием сдвоенных апострофов. Если строки не содержат пробелов, то использование апострофов не обязательно. Данный режим очень полезен при сравнении аргументов параметра макроса. В обоих случаях строки должны разделяться между собой запятой. Далее приводятся некоторые примеры использования директивы IFSAME.

lFSAME   'test string','test string'

lFSAME   '2500 A.D.''s','2500 A.D.''s'

lFSAME   X,Y

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

IFNSAME <строка1>,<строка2>

IFDIFF

Похожие материалы

Информация о работе