Turbo Assembler 3.0. Руководство пользователя

         

Условные директивы с текстовыми строками


Эти директивы условное ассемблирование или генерацию сообще- ний об ошибке на основе содержимого текстовой строки. Текстовой строкой может быть либо строка, заключенная в угловые скобки (<>), либо имя текстовой макрокоманды с предшествующим символом %. Например:

<ABC> ; текстовая строка ABC %foo ; содержимое текстовой макрокоманды foo

Примечание: Об определении текстовых макрокоманд и ра- боте с ними рассказывается в Главе 14.

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

Директивы условного ассемблирования, использующие текстовую строку Таблица 15.6 -----------------------T----------------------------------------¬ ¦ Директива IFxxx ¦ ассемблирует "тело_условия_true", если:¦ +----------------------+----------------------------------------+ ¦ IFNB текст_строка ¦ "текст_строка" не состоит из одних про-¦ ¦ ¦ белов. ¦ ¦ ¦ ¦ ¦ IFB текст_строка ¦ "текст_строка" не пуста. ¦ ¦ ¦ ¦ ¦ IFIDN текст_строка_1,¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ идентичны. ¦ ¦ ¦ ¦ ¦ IFINDI текст_строка_1¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ ,текст_строка_2 ¦ идентичны (регистр символов не учиты- ¦ ¦ ¦ вается. ¦ ¦ ¦ ¦ ¦ IFDIF текст_строка_1,¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ различны. ¦ ¦ ¦ ¦ ¦ IFDEFI текст_строка_1¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ ,текст_строка_2 ¦ различны (регистр символов игнорирует- ¦ ¦ ¦ ся. ¦ ¦ ¦ ¦ ¦ ELSEIFNB текст_строка¦ "текст_строка" не состоит из пробелов. ¦ ¦ ¦ ¦ ¦ ELSEIFB текст_строка ¦ "текст_строка" не пуста. ¦ ¦ ¦ ¦ ¦ ELSEIFIDN текст_стро-¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ ка_1, текст_строка_2¦ идентичны. ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ELSEIDNI текст_стро- ¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ ка_1,текст_строка_2 ¦ идентичны (регистр символов игнориру- ¦ ¦ ¦ ется). ¦ ¦ ¦ ¦ ¦ ELSEIFDIF текст_стро-¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ ка_1,текст_строка_2 ¦ различны. ¦ ¦ ¦ ¦ ¦ ELSEIFDIFI текст_стро¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ -ка_1,текст_строка_2¦ различны (регистр символов игнориру- ¦ ¦ ¦ ется). ¦ L----------------------+-----------------------------------------


Использующие текстовую строку директивы генерации сообщения об ошибке показаны в следующей таблице:

Директивы вывода сообщений об ошибке использующие текстовую строку Таблица 15.6 -------------------------T--------------------------------------¬ ¦Директива ERRxxx ¦ Генерирует сообщение об ошибке, если:¦ +------------------------+--------------------------------------+ ¦ERRIFNB текст_строка ¦ "текст_строка" не состоит из одних¦ ¦ ¦ пробелов. ¦ ¦ ¦ ¦ ¦.ERRIFNB текст_строка ¦ "текст_строка" не состоит из одних¦ ¦ ¦ пробелов (только для режима MASM). ¦ ¦ ¦ ¦ ¦ERRIFB текст_строка ¦ "текст_строка" состоит из пробелов. ¦ ¦ ¦ ¦ ¦.ERRB текст_строка ¦ "текст_строка" состоит из одних про-¦ ¦ ¦ белов. ¦ ¦ ¦ ¦ ¦ERRIFIDN текст_строка_1,¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ идентичны. ¦ ¦ ¦ ¦ ¦.ERRIDN текст_строка_1, ¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ идентичны (только для режима MASM). ¦ ¦ ¦ ¦ ¦ERRIFIDNI текст_строка_1¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ ,текст_строка_2 ¦ идентичны (регистр символов игнориру-¦ ¦ ¦ ется). ¦ ¦ ¦ ¦ ¦.ERRIDNI текст_строка_1,¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ идентичны (регистр символов игнориру-¦ ¦ ¦ ется) - только для режима MASM. ¦ ¦ ¦ ¦ ¦ERRIFDIF текст_строка_1,¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ различны. ¦ ¦ ¦ ¦ ¦.ERRDIF текст_строка_1, ¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ различны (только для режима MASM). ¦ ¦ ¦ ¦ ¦ERIFDIFI текст_строка_1,¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ различны (регистр символов игнориру- ¦ ¦ ¦ ется). ¦ ¦ ¦ ¦ ¦.ERRFIFI текст_строка_1,¦ "текст_строка_1" и "текст_строка_2" ¦ ¦ текст_строка_2 ¦ различны (регистр символов игнориру- ¦ ¦ ¦ ется) - только для режима MASM. ¦ L------------------------+---------------------------------------



Используйте эти директивы для проверки передаваемых макроко- мандам аргументов (однако их можно использовать не только в мак- рокомандах).

При использовании их в макроопределениях директивы IFB и IFNB позволяют определить, передали ли вы в макрокоманду нужное число аргументов. Если при вызове макрокоманды вы передали слиш- ком мало аргументов, Турбо Ассемблер не генерирует сообщение об ошибке. Незаданные аргументы просто остаются пустыми. Таким обра- зом, вы можете определить макрокоманду, воспринимающую переменное число аргументов. Например:

. . . load MACRO addr, reg IFNB <reg> MOV reg,addr ELSE MOV ax,addr ENDIF ENDM . . .

Вы можете вызывать макрокоманду данного примера, как load test,cx, что даст генерацию инструкции mov cx,test, или вызвать ее как load test, то приведет к генерации инструкции mov ax,test, поскольку второй параметр пуст. Можно также использовать директи- ву ERRIFB для генерации сообщения об ошибке, если в вызове макро- команды пропущен аргумент:

. . . load MACRO addr ERRIFNB <addr> MOV reg,addr ENDM . . .

Если эту макрокоманду вызвать с помощью load, а не с помощью load test, то будет генерироваться ошибка.


Содержание раздела