Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
met.doc
Скачиваний:
0
Добавлен:
30.04.2019
Размер:
1.92 Mб
Скачать

Команды управления циклами (loop, loope, loopz, loopne, loopnz) имеют следующие форматы в мнемонике ассемблера:

LOOP disp,

LOOPE disp,

LOOPZ disp,

LOOPNE disp,

LOOPNZ disp,

где disp – адресное выражение типа метки с атрибутом NEAR, значение которого лежит в интервале от –128 до 127 от адреса следующей за циклом команды.

Все эти команды декрементируют значение регистра CX. Если после этого значение CX не равно нулю, то LOOP передает управление по адресу своего операнда. Эквивалентные друг другу команды LOOPE и LOOPZ передают управление по адресу своего операнда, если CX не равно нулю и значение флага ZF равно 1. Эквивалентные друг другу команды LOOPNE и LOOPNZ передают управление по адресу своего операнда, если CX не равно нулю и ZF = 0. Эти действия позволяют легко реализовать цикл с заданным количеством повторений, которое задается в CX.

Команды управления циклами имеют следующий формат машинных кодов:

LOOP:  

11100010

disp

LOOPE/LOOPZ:  

11100001

disp

LOOPNE/LOOPNZ:  

11100000

disp

Примеры использования команд управления циклами:

; Пример 1: вычисление суммы элементов массива из 10 байт

XOR AX,AX

; обнуление суммы

XOR SI,SI

; обнуление индекса

MOV CX,0Ah

; загрузка количества элементов

NEXT:

; начало цикла

ADD AL, [SI + 20]

; сложение очередного элемента с

; общей суммой

ADC AH,0

; учет возможного переноса

INC SI

; увеличение индекса

LOOP NEXT

; возврат в цикл,

; если массив не исчерпан

; Пример 2: поиск первого ненулевого элемента в массиве из 10 байт

MOV SI, -1

; установить значение индекса

MOV CX, 0Ah

; установить количество элементов

NEXT:

; начало цикла

INC SI

; увеличить индекс

CMP [SI + 20], 0

; сравнить текущий элемент с нулем

LOOPE NEXT

; возврат в цикл,

; если элемент не найден и массив еще

; не исчерпан

JNE YES

; если элемент найден, то переход

; к метке YES

...

; действия, если элемент не найден

...

; массив содержит только нули

JMP short END

; переход к метке END

YES:

...

; действия, если элемент найден

...

; SI указывает на ненулевой элемент

END:

...

; завершающие действия

; Пример 3: поиск заданного значения в массиве из 10 байт

MOV AL, 5Dh

; загрузить искомое значение

MOV SI, -1

; установить значение индекса

MOV CX, 0Ah

; установить количество элементов

NEXT:

; начало цикла

INC SI

; увеличить индекс

CMP [SI + 20], AL

; сравнить текущий элемент

; с искомым значением

LOOPNE NEXT

; возврат в цикл,

; если элемент не найден

; и массив еще не исчерпан

JCXZ NO

; если элемент не найден, то переход

; к метке NO

...

; действия, если элемент найден.

...

; SI указывает на этот элемент

NO:

JMP short END

; переход к метке END

...

; действия, если элемент не найден

END:

...

; завершающие действия

СОДЕРЖАНИЕ РАБОТЫ

1. Ознакомиться с теоретическим материалом.

2. С помощью программы debug исследовать выполнение всех арифметических команд с любым возможным типом их операндов.

3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]