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

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

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






 

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



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

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

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

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

Меры безопасности при обращении с оружием и боеприпасами 64. Получение (сдача) оружия и боеприпасов для проведения стрельб осуществляется в установленном порядке[1]. 65. Безопасность при проведении стрельб обеспечивается...

Весы настольные циферблатные Весы настольные циферблатные РН-10Ц13 (рис.3.1) выпускаются с наибольшими пределами взвешивания 2...

Хронометражно-табличная методика определения суточного расхода энергии студента Цель: познакомиться с хронометражно-табличным методом опреде­ления суточного расхода энергии...

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