Главная / Эвм / Программирование итеративных циклических вычислительных процессов

Программирование итеративных циклических вычислительных процессов

Цель работы

Изучение команд передачи управления и основ программирования итеративных циклических вычислительных процессов.

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

LOOP метка уменьшает значение регистра CX на 1, и если CX≠0 (флаг ZF сброшен) передает управление к строке «метка», иначе выполняет инструкцию, следующую за LOOP. LOOPE метка LOOPZ метка аналогично LOOP, но переходит к строке «метка» при дополнительном условии: если инструкция, предшествующая LOOP, вернула 0 (флаг ZF установлен). LOOPNE метка LOOPNZ метка аналогично LOOP, но переходит к строке «метка» при дополнительном условии: если инструкция, предшествующая LOOP, вернула не 0 (флаг ZF сброшен).

Схема алгоритма

Таблица состояний регистров

Строчки “9#” и “10#” соответствуют последней (успешной) итерации цикла.

Дамп памяти (до записи значения)

Ds:0000

0A

24

01

01

01

01

01

01

Ds:0008

01

00

02

02

00

00

00

00

Дамп памяти (после записи значения)

Ds:0000

0A

24

01

01

01

01

01

01

Ds:0008

01

24

02

02

00

00

00

00

Листинг программы

.model small

.stack 100h

.data

N db 10

a db 36d

MAS db 7 dup(1), 0, 2 dup(2)

.code

Start:

mov ax, @data

mov ds, ax

; задание

mov di, offset MAS ; MAS = DS:DI

xor cx, cx ; cx = 0

mov cl, N ; cx = N

mov bx, 0FFFFh ; на 1 итерации должно быть bx = 0

Loop1:

inc bx ; bx = bx + 1

mov al, [di + bx] ; al = [MAS + bx]

test al, al ; al == 0 ?

loopnz loop1 ; нет => перейти на loop1

mov al, a ; al = a

mov [di + bx], al ; [MAS + bx] = a

; завершение работы

mov ax, 4C00h

int 21h

End start

Выводы:

1) мы научились использовать команды управления циклами;

2) мы поняли, как использовать адресацию со смещением для обращения к элементам массива, расположенным в памяти.