назад

Типовой пример №3

Поиск и замена образца в заданном диапазоне:

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

Просмотреть ячейки 120..16F и заменить символ "9" символом "5".

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

1. Задание начальных значений до начала цикла 
(стартового адреса= 120,
ASCII-кода символа "5"= 35,
ASCII-кода символа "9"= 39,
числа шагов цикла= 50).

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

CX= (16F-120)+ 1 = 4F+1= 50

2. Организация цикла: [DI]<->AH
(последовательная проверка ячеек с целью поиска в них числа 39,
заполнение очередной ячейки кодом 35, если найден символ "9",
наращивание содержимого регистра DI)

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

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

100 MOV DI,0120 ; DI<- 120
103 MOV AL,35 ; AL<- 35
105 MOV AH,39 ; AH<- 39
107 MOV CX,0050 ; CX<- 50

; цикл по перебору ячеек диапазона:
10A CMP [DI],AH ;[DI]<->AH
10C JNZ 0110 ; переход, если "Not Zero" (не равное 0 значение)
10E MOV [DI],AL ; [DI]<- AL (AL= 35)
110 INC DI ; DI<- DI+1
111 LOOP 010A ; CX<- CX-1, после чего, если CX<>0, переход на адрес 10А

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

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

Для проверки решения уменьшим значение счетчика цикла СХ до 3.
В ячейках 120-122 разместим строку "193"

100: DI = 120
103: AL = 35
105: AH = 39
107: CX = 3 (т.к. проверка проводится для первых 3-х ячеек диапазона)

10A: [120]= 31<->39 Не равно, т.е. имеет место "Not Zero"
10C: переход на адрес 110, т.к. имеет место "Not Zero"
110: DI= 120+1= 121
111: CX= 3-1= 2 (CX=2>0, поэтому следует переход на адрес 10А)

10A: [121]= 39<->39 Равно, т.е. имеет место "Zero"
10C: переход на адрес 110 не следует, т.к. имеет место "Zero"
10E: [121]= 35
110: DI= 121+1= 122
111: CX= 2-1= 1 (CX=1> 0, поэтому следует переход на адрес 10А)

10A: [122]= 33<->39 Не равно, т.е. имеет место "Not Zero"
10C: переход на адрес 110, т.к. имеет место "Not Zero"
110: DI= 122+1= 123
111: CX= 1-1= 0 (CX=0, цикл завершен)

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

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

В ячейках 120-122 находятся символы "153"