Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Использование условных директив - Программирование от RIN.RU
Использование условных директив



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


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


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


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


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


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



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


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



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


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


.
.
.
load MACRO addr, reg
IFNB
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
MOV reg,addr
ENDM
.
.
.


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


Условия выполнения прохода Ассемблером


Следующие директивы обеспечивают выполнение условного ассемблирования или генерацию ошибки на основе текущего прохода Ассемблера:


Директива IFxxx ассемблирует "тело_условия_true", если:
IF1Турбо Ассемблер выполняет первый проход.
IF2 Турбо Ассемблер выполняет второй проход.



Директива ERRxxxгенерирует ошибку user error, если:
ERRIF1Турбо Ассемблер выполняет первый проход.
.ERR1 Турбо Ассемблер выполняет первый проход (только для режима MASM).
ERRIF2Турбо Ассемблер выполняет второй проход.
.ERR2Турбо Ассемблер выполняет второй проход (только для режима MASM).



Обычно Турбо Ассемблер работает как однопроходный ассемблер. Если вы используете средство многопроходной работы Турбо Ассемблера (вызывая его с параметром командной строки /m), то при необходимости используется несколько проходов.


Поскольку Турбо Ассемблер всегда выполняет по крайней мере один проход, директива условного ассемблирования IF1 всегда будет ассемблировать код своего условного блока, а директивы .ERR1 и ERRIF1 всегда будут генерировать сообщение об ошибке (но только на первом проходе).


Если вы используете любую из этих директив и не разрешаете многопроходную работу, то Турбо Ассемблер будет генерировать для всех таких директив предупреждение "Pass dependent construction" ("Конструкция, зависящая от прохода"), чтобы предупредить вас о возможно опасном пропуске кода. Если вы разрешите многопроходную работу, Турбо Ассемблер будет выполнять точно два прохода и генерировать предупреждение Vaximum compatibility pass was done (Выполнен проход с целью обеспечения максимальной совместимости).


Включение условных директив в файл листинга


Обычно код условного ассемблирования с ложным условием (false) в листинг не включается. Используя директивы Турбо Ассемблера и параметры командной строки, вы можете это переопределить.


Примечание: Более подробная информация содержится здесь и в этом разделе.

<<<  Назад
 1  2  3  4 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Использование моделей памяти программы и сегментации

Определение типов данных

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Расширенные инструкции

Использование макрокоманд

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь