Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПР№7_ПЗТ23.doc
Скачиваний:
10
Добавлен:
17.09.2019
Размер:
95.23 Кб
Скачать

2) Loope (loopz) — выполнять цикл пока нуль, выход по «не нулю».

Работает аналогично LOOP, только выход из цикла происходит в двух случаях:

  • если CX = 0; или

  • флаг ZF = 0.

Задание

Найти в таблице номер первого ненулевого элемента.

; данные

TABL DB 0,0,3,0,5

. . . . . . . . .

; цикл

MOV CX,5

MOV SI,-1

MET:

INC SI

CMP TABL[SI],0

LOOPZ MET ; пока 0, цикл продолжается

После выхода из цикла в SI будет находиться номер первого ненулевого элемента.

3) Loopne (loopnz) — выполнять цикл пока не 0, выход по «нулю»

Эта команда, в некотором смысле, противоположна предыдущей.

Такая команда может использоваться, например, для поиска в таблице первого нулевого элемента.

Команды циклов Таблица 3.4

Название

Мнемоника

Альтернативная

мнемоника

КОП

Проверяемое

условие

Зациклить

LOOP

11100010

(CX)=0

Зациклить пока ноль

(равно)

LOOPZ

LOOPE

11100001

(ZF=1)&((CX)=0)

Зациклить пока не ноль

(неравно)

LOOPNZ

LOOPNE

11100000

(ZF=0)&((CX)=0)

Перейти по (CX)

JCXZ

11100011

(CX)=0

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

Один из наиболее распространенных видов циклического участка программы представлен на рис.3.18.

СЧ=<число повторений>

да

тело цикла

СЧ = 0

СЧ=СЧ-1

нет

Рис.3.18. Структура счетного цикла с постпроверкой

Команды циклов предназначены для упрощения действий декремента (вычитания единицы), проверки условия и перехода.

Некоторые команды цикла реализуют выход из цикла не только по значению счетчика, но и при выполнении некоторых других условий.

Описание команд цикла сведено в табл. 3.4. За исключе­ни­ем команды JCXZ, которая не изменяет значения регистра CX, при выполнении команд циклов производятся следу­ю­­щие действия: CX=(CX)-1. Затем если проверяемое условие выполнено, то IP=(IP)+disp8 с расширением знаком до disp16, в противном случае IP не изменяется, и программа продолжает выполнение в естественном порядке.

Пример представления фрагмента

программы в машинной форме записи

Рассмотрим пример кодирования команд, представляющих собой некоторый законченный в смысловом отношении фрагмент программы.

Необходимо сложить k слов a[i], расположенных последовательно в оперативной памяти, начиная с адреса [31A6h], а результат записать по адресу [3000h].

Один из возможных вариантов программы, не использующий команду цикла, представлен в табл. 3.5. В программе предполагается, что конечный и промежуточные результаты не превышают длины слова. Количество слагаемых также занимает слово и записано перед исходным массивом, то есть по адресу 31A4h. Начальное значение IP взято произвольно.

Отметим некоторые особенности использования отдельных команд этой программы. Обнуление регистра AX осуществляется вычитанием его содержимого из самого себя. Переход к новому слагаемому достигается использованием регистровой относительной адресации с изменением на каж­дом шаге содержимого индексного регистра на длину слагаемого, то есть на 2.

Последняя команда, засылка резуль­та­та, закодирована в специальном формате работы с акку­му­­лятором.