Студопедия — Условные директивы
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

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






 

Помимо использования команд сравнения (cmp…) и различных команд условного перехода (j…) в ассемблере может использоваться конструкция IF, подобная аналогичным операторам из высокоуровневых языков программирования.

.IF выражение....ENDIF

Если значение выражения — ноль (ложь), весь участок программы между IF и ENDIF игнорируется. Директива IF может также сочетаться с ELSE и ELSEIF:

.IF выражение... .ELSE... .ENDIF

Если значение выражения — ноль, ассемблируется участок программы от ELSE до ENDIF, в противном случае — от IF до ELSE.

IF выражение1... ELSEIF выражение2... ELSEIF выражение3... ELSE... ENDIF

Так, если, например, выражение 2 не равно нулю, будет ассемблироваться участок программы между первой и второй директивой ELSEIF. Если все три выражения равны нулю, ассемблируется фрагмент от ELSE до ENDIF. Данная структура директив может использоваться в частном случае аналогично операторам switch/case языков высокого уровня, если выражения — проверки некоторой целочисленной константы на равенство.

Кроме общих директив IF и ELSEIF ассемблеры поддерживают набор специальных команд, каждая из которых проверяет специальное условие:

IF1/ELSEIF1 — если ассемблер выполняет первый проход ассемблирования;

IF2/ELSEIF2 — если ассемблер выполняет второй проход ассемблирования (часто не работает на современных ассемблерах);

IFE выражение/ELSEIFE выражение — если выражение равно нулю (ложно);

IFDEF метка/ELSEIFDEF метка — если метка определена;

IFNDEF метка/ELSEIFNDEF метка — если метка не определена;

IFB < аргумент> /ELSEIFB < аргумент> — если значение аргумента — пробел (эти и все следующие директивы используются в макроопределениях для проверки параметров);

IFNB < аргумент> /ELSEIFNB < аргумент> — если значение аргумента — не пробел (используется в макроопределениях для проверки переданных параметров);

IFDIF < арг1>, < арг2> /ELSEIFDIF < арг1>, < арг2> — если аргументы отличаются (с различием больших и маленьких букв);

IFDIFI < арг1>, < арг2> /ELSEIFDIFI < арг1>, < арг2> — если аргументы отличаются (без различия больших и маленьких букв);

IFIDN < арг1>, < арг2> /ELSEIFIDN < арг1>, < арг2> — если аргументы одинаковы (с различием больших и маленьких букв);

IFIDNI < арг1>, < арг2> /ELSEIFIDNI < арг1>, < арг2> — если аргументы одинаковы (без различия больших и маленьких букв).

Иногда директивы условного ассемблирования используются для того, чтобы прервать ассемблирование программы, если обнаружилась какая-нибудь ошибка. Для таких случаев предназначены директивы условной генерации ошибок.

Пример. if $ gt 65535; Если адрес вышел за пределы сегмента..err endif

Встретив директиву.ERR, ассемблер прекратит работу с сообщением об ошибке. Аналогично командам условного ассемблирования существуют модификации команды.ERR:

.ERR1 — ошибка при первом проходе ассемблирования;

.ERR2 — ошибка при втором проходе ассемблирования;

.ERRE выражение — ошибка, если выражение равно нулю (ложно);

.ERRNZ выражение — ошибка, если выражение не равно нулю (истинно);

.ERRDEF метка — ошибка, если метка определена;

.ERRNDEF метка — ошибка, если метка не определена;

.ERRB < аргумент> — ошибка, если аргумент пуст (эта и все следующие директивы используются в макроопределениях для проверки параметров);

.ERRNB < аргумент> — ошибка, если аргумент не пуст;

.ERRDIF < арг1>, < арг2> — ошибка, если аргументы различны;

.ERRDIFI < арг1>, < арг2> — ошибка, если аргументы отличаются (сравнение не различает большие и маленькие буквы);

.ERRIDN < арг1>, < арг2> — ошибка, если аргументы совпадают;

.ERRIDNI < арг1>, < арг2> — ошибка, если аргументы совпадают (сравнение не различает большие и маленькие буквы).

Пример использования директивы IF.

.586







Дата добавления: 2014-11-10; просмотров: 624. Нарушение авторских прав; Мы поможем в написании вашей работы!



Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Типовые ситуационные задачи. Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт. ст. Влияние психоэмоциональных факторов отсутствует. Колебаний АД практически нет. Головной боли нет. Нормализовать...

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

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Медицинская документация родильного дома Учетные формы родильного дома № 111/у Индивидуальная карта беременной и родильницы № 113/у Обменная карта родильного дома...

Основные разделы работы участкового врача-педиатра Ведущей фигурой в организации внебольничной помощи детям является участковый врач-педиатр детской городской поликлиники...

Ученые, внесшие большой вклад в развитие науки биологии Краткая история развития биологии. Чарльз Дарвин (1809 -1882)- основной труд « О происхождении видов путем естественного отбора или Сохранение благоприятствующих пород в борьбе за жизнь»...

Studopedia.info - Студопедия - 2014-2024 год . (0.009 сек.) русская версия | украинская версия