Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Команды управление циклом




Условные переходы

 

Практически во всех командах условного перехода проверяется значе­ние того или иного флага (например, флага нуля ZF) и, если он имеет определенное значение, выполняется переход по адресу, указанному в ко­манде. Значение флага должно быть установлено предыдущей командой, на­пример, командой сравнения

CMP <операнд1>,<операнд2>

которая вычисляет разность <операнд1>-<операнд2>, однако результат никуда не записы­вает, а только меняет флаги, на которые и будет реагировать команда условного перехода.

В ассемблере команды условного перехода имеют следующий формат:

Jxx <операнд1>

где xx - одна или несколько букв, в сокращенном виде отражающие прове­ряемое условие (обычно в предположении, что перед этой командой нахо­дится команда сравнения). Примеры некоторых мнемоник:

JE - переход "по равно" (jump if equal)

JL - переход "по меньше" (jump if less)

JNL - переход "по неменьше" (jump if not less)

Особенностью всех машинных команд условного перехода является то, что они реализуют внутрисегментный относительный короткий переход, т.е. добавляют к счетчику команд IP свой операнд, рассматриваемый как знаковое число от -128 до 127. В ассемблере этот операнд всегда должен запи­сываться как метка, которую ассемблер заменит на соответствующий сдвиг.

Такая особенность команд условного перехода вызывает неудобство при переходах на "дальние" команды. Например, если надо сделать пере­ход при A<B на команду, помеченную меткой L и расположенную далеко от команды перехода, то приходится использовать команду длинного безус­ловного перехода:

MOV AX,A

CMP AX,B; сравнение A и B

JNL M; не меньше --> M (обход команды JMP)

JMP L; меньше --> L (длинный переход)

M:...

 

В ПК есть несколько команд, упрощающих программирование циклов с заранее известным числом повторений. Применение этих команд требует, чтобы к началу цикла в регистр CX было занесено число шагов цикла. Са­ми команды размещаются в конце цикла, они уменьшают значение CX на 1 и, если CX еще не равно 0, передают управление на начало цикла.

Напри­мер, найти S - сумму элементов массива X из 10 чисел-слов можно так:

MOV AX,0; начальное значение суммы (накапливается в AX)

MOV SI,0; начальное значение индексного регистра

MOV CX,10; число повторений цикла

L: ADD AX,X[SI]; AX:=AX+X[i]

ADD SI,2; SI:=SI+2

LOOP L; CX:=CX-1; if CX<>0 then goto L

MOV S,AX; S:=AX

Помимо команды LOOP есть еще две "циклические" команды - LOOPZ и LOOPNZ (они имеют синонимичные названия LOOPE и LOOPNE), которых кроме регистра CX проверяют еще и флаг нуля ZF; например, команда LOOPZ "вы­ходит" из цикла, если CX=0 или ZF=1. Эту команду можно, например, ис­пользовать при поиске в массиве первого нулевого элемента, где должно быть предусмотрено два условия выхода из цикла: либо будет найден нулевой элемент (ZF=1, если перед LOOPZ поставить команду сравнения оче­редного элемента с 0), либо будет исчерпан весь массив (CX=0)

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

 




Поделиться с друзьями:


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


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.