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

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

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






 

Помимо использования команд сравнения (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; просмотров: 614. Нарушение авторских прав; Мы поможем в написании вашей работы!



Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

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

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

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

Подкожное введение сывороток по методу Безредки. С целью предупреждения развития анафилактического шока и других аллергических реак­ций при введении иммунных сывороток используют метод Безредки для определения реакции больного на введение сыворотки...

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

Роль органов чувств в ориентировке слепых Процесс ориентации протекает на основе совместной, интегративной деятельности сохранных анализаторов, каждый из которых при определенных объективных условиях может выступать как ведущий...

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

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

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