|
УСЛОВИЕ
ЗАДАНИЯ:
Подсчитать
количество символов «9» в диапазоне ячеек 120..16F.
Результат сохранить в ячейке 170.
ПЛАН
РЕШЕНИЯ:
1. Задание начальных значений до начала цикла (стартового адреса= 120, ASCII-кода символа "5"= 35, счётчика образцов= 0, числа шагов цикла= 50).
Примечание. Расчет значения счетчика цикла:
CX= (16F-120)+ 1 = 4F+1= 50
2. Организация цикла: [DI]<->AH (последовательная проверка ячеек с целью поиска в них числа 39, наращивание значения счётчика образцов, если найден символ "9", наращивание содержимого регистра DI)
3. Завершение работы программы (INT 20)
КОД
ПРОГРАММЫ:
100 MOV DI,0120 ; DI<- 120 103 MOV AL,0 ; AL<- 0 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 INC AL ; AL<- AL+1 110 INC DI ; DI<- DI+1 111 LOOP 010A ; CX<- CX-1, после чего, если CX<>0, переход на адрес 10А 113 MOV [170],AL; сохранение найденного количества образцов
116 INT 20 ; завершение работы
ПРОВЕРКА
РЕШЕНИЯ:
Для проверки решения уменьшим значение счетчика цикла СХ до 3. В ячейках 120-122 разместим строку "193" 100: DI = 120 103: AL = 0 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: AL= 0+1= 1 (один образец найден) 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: [170]= 1 (сохранение количества найденных образцов)
116: INT 20 - завершение работы.
РЕЗУЛЬТАТ
РЕШЕНИЯ:
В ячейку 170 занесено число 1 |