назад

Типовой пример №1.

Копирование ячеек заданного диапазона :

УСЛОВИЕ ЗАДАНИЯ:

Скопировать содержимое ячеек диапазона 130..13F в диапазон,

начинающийся с адреса 150. (все данные в 16-ой системе)

ПЛАН РЕШЕНИЯ:

1. Задание начальных значений 
( стартового адреса диапазона-источника= 130,
стартового адреса диапазона-приёмника= 150,
числа шагов цикла= 10).
(все данные в 16-ой системе)

Примечание. Расчет значения счетчика цикла:

CX= (13F - 130) + 1 = F + 1 = 10
(расчёты в 16-ой системе)

2. Организация цикла: AL <- [SI]
[DI]<- AL
(последовательное копирование содержимого
ячеек 130,131,132,...,13F
в ячейки 150,151,152,...,15F соответственно)

3. Завершение работы программы (INT 20)

КОД ПРОГРАММЫ:

100 MOV SI,0130 ; SI  <- 130    (стартовый адрес диапазона-источника= 130) 
103 MOV DI,0150 ; DI <- 150 (стартовый адрес диапазона-приёмника= 150)
106 MOV CX,0010 ; CX <- 10 (число шагов цикла = размеру дипазона = 10)

; цикл по перебору ячеек диапазона:
109 MOV AL,[SI] ; AL <- [SI] (копирование в регистр AL содержимого очередной ячейки диапазона)
10B MOV [DI],AL ; [DI] <- AL (размещение в очередной ячейке диапазона-приёмника содержимого AL)
10D INC SI ; SI <- SI + 1 (наращивание адреса диапазона-источника: +1)
10E INC DI ; DI <- DI + 1 (наращивание адреса диапазона-приёмника: +1)
10F LOOP 109 ; CX <- CX-1 После чего, если CX <> 0 - переход по адресу 109

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

ПРОВЕРКА РЕШЕНИЯ:

Для проверки решения уменьшим значение счетчика цикла СХ до 3.
Кроме того, будем считать, что изначально в ячейках 130..132
находятся следующие числа:
[130] = 10 [131] = 11 [132] = 12

100: SI = 130
103: DI = 150
106: CX = 3 (т.к. проверка проводится для первых 3-х ячеек диапазона)

109: AL = [130] = 10
10B: [150]= AL= 10 (содержимое 1-ой ячейки скопировано)
10D: SI= 130+1= 131
10E: DI= 150+1= 151
10F: CX= 3-1= 2 (CX=2>0, поэтому следует переход на адрес 109)

109: AL= [131]= 11
10B: [151] = AL = 11 (содержимое 2-ой ячейки скопировано)
10D: SI= 131+1= 132
10E: DI= 151+1= 152
10F: CX= 2-1= 1 (CX=1>0, поэтому следует переход на адрес 109)

109: AL= [132]= 12
10B: [152]= AL = 12 (содержимое 3-ей ячейки скопировано)
10D: SI= 132+1= 133
10E: DI= 152+1= 153
10F: CX= 1-1= 0 (CX= 0, поэтому цикл заканчивается)

111: INT 20 - завершение работы.

РЕЗУЛЬТАТ РЕШЕНИЯ:

   [150]= 10 [151]= 11 [152]= 12