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

4.2.5.5. Цикл с постусловием

Цикл с постусловием в программе на ассемблере можно организовать следующими способами:

1. Использование команд LOOP, LOOPZ и LOOPNZ. Тело цикла выполняется CX раз. Достоинством этого способа является наличие только одной команды для организации цикла. Пример:

MOV CX, 1000

M1: <тело_цикла>

LOOP M1

2. Использование команды JCXZ. В этом случае для организации цикла требуется еще две дополнительные команды, но в отличие от всех рассмотренных выше примеров циклов, тело такого цикла может занимать более 127 байт (в предыдущих примерах использовались команды коротких переходов). Пример:

MOV CX, 500

M1: <тело_цикла>

DEC CX

JCXZ M2

JMP M1

M2:

3. Использование команд условного перехода. В этом случае условие цикла зависит от используемых команд условного перехода. Цикл выполняется до тех пор, пока условие станет неверным. Пример:

MOV CX, 2000

M1: <тело_цикла>

DEC CX

CMP CX, 0

JNE M1

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

MOV DX, 10

M1: CMP DX, 0

JE M2

JMP SHORT M3

M2: JMP M2

M3: <тело_цикла>

DEC DX

JMP M1

M2:

Сократить число команд безусловного перехода можно путем использования противоположного условия:

MOV DX, 10

M1: CMP DX, 0

JNE M3

JMP M2

M3: <тело_цикла>

DEC DX

JMP M1

M2:

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

4.3.1. Задание на лабораторную работу

  • написать программу на ассемблере, выполняющую заданные операции над элементами массивов целых чисел. Диапазон чисел каждого элемента массива составляет от –32768 до 32767 (размер элемента – 2 байта). В программе должны использоваться цепочечные команды MOVSW, STOSW, CMPSW, SCASW (в зависимости от конкретного задания). Массивы A и B определить в тексте программы. Если по конкретному заданию требуется преобразовать не все элементы массива A, то в массив B записываются как преобразованные, так и не преобразованные элементы массива A.

  • проверить работу программы в отладчике.

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

Порядок выполнения лабораторной работы №3 соответствует порядку выполнения лабораторной работы №1.

4.4. Контрольные вопросы

  1. Какие цепочечные команды существуют для МП 8086?

  2. В чем особенность цепочечных команд?

  3. Какими способами можно определить массив в программе на ассемблере?

  4. Для чего служит директива SEG?

  5. Для чего служит директива OFFSET?

  6. В каких частях программы можно размещать данные?

  7. Объясните выбор части программы, в которой размещаются данные для вашей программы?

  8. Какими способами можно организовать циклы на ассемблере?

  9. В чем состоит отличие префиксов повторения REP и REPNE?