
ПТСПЦУВСБ / 11. Условные директивы в ассемблеры
..docx11. Условные директивы в ассемблеры.
Позволяют при трансляции программы просмотреть или пропустить фрагмент программы в зависимости от проверки условия.
-
Директивы условной трансляции.
-
Директивы условной генерации ошибок (позволяет выдать соответствующее сообщение об ошибках на этапе трансляции).
Назначение директивы условной трансляции:
-
Написание отладочных версии программ, в которых после завершения отладки можно протранслировать код без соответствующих операторов
(Например Debug = 1).
-
Написание универсальных макросов, настраевымых на систему.
IF xxx
Операторы (Тело 1)
[ ELSE
Операторы (Тело 2) ]
ENDIF
xxx – некоторое выражение, проверка которого должна давать булевский результат
xxx = 0 Ложь
xxx 0 Истина
Допускается 255 уровневое вложение.
Существуют предопределенные операторы IF:
IF1 Его тело транслируется только на первом проходе.
Пример:
IF1
INCLUDE MYLIB
ENDIF
IFE xxx Транслируется, если выражение (xxx) равно нулю.
ALLOC MACRO LENGHT
VALUE
REPT LENGTH
IFE VALUE – 0FFh
EXITM
ENDIF
VALUE = VALUE + 1
ENDM
ENDM
EXITM – Выход из макроса
Написанный макрос обеспечивает заполнение памяти целыми числами от 1 и далее длиной не более 256 байт.
II.
IFDET / IFNDEF имя _ переменной
Тело выполняется, если определено / не определено имя _ переменной.
Пример (задает возможность проверки дисплея):
IFDEF Disptest
; часть первой общей проверки дисплея
IFCOLOR
; часть проверки цветного дисплея
ELSE
; часть проверки монохромного дисплея
ENDIF
; часть второй общей проверки
ELSE
; код, выполнения при отсутствие проверки
ENDIF
IFB / IFNB <аргумент> Проверяет имеется или отсутствует аргумент
(IF Blank – если отсутствует)
Применяется:
-
Для выдачи подсказок об отсутствия аргументов.
-
Для разработки рекурсивных макросов с переменным числом в параметрах.
Пример:
I способ применения
Make _ Pasc _ String Macro Id, Msg
Local MsgLen, Endstr
Ifb <id>
Display ‘Задать переменную id’
ExitM
IFB <Msg>
Display ‘Задать преобразованную строку’
ExitM
Else
Id Db Endstr-id-1,’&Msg&’
Label EndStr Byte
EndIf
EndIf
EndM
II способ применения
PushReg Macro R1, R2, R3, R4, R5, R6
Ifnb <R1>
Push R1
PushReg R2, R3, R4, R5, R6
Endif
EndM
Отличительные признаки рекурсивного вызова макроса:
-
Должен быть вызов заново себя с количеством элементов меньше на единицу.
-
Предусмотрен контроль аргумента с помощью директивы Ifnb.
Способы использования макросов.
-
Непосредственное размещение макроопределения в тексте программы (Оно размещается в самом начале, обычно после заголовка.).
Применение:
-
Создание макробиблиотеки с последующим подключение ее к программе. Библиотека строится как обычный файл. В основной файл добавляются следующие команды.
IF1
Include My _ Maclib
EndIf
Можно исключить некоторые макросы из библиотеки если они не нужны.
Purge Mac1, Mac2, Mac7