назад

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

Поиск максимального значения в заданном диапазоне:

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

Определить максимальное число диапазона 140..16F. Результат сохранить в ячейке 170.

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

1. Задание начальных значений 
(стартового адреса= 140,
числа шагов цикла= 30,
начального значения максимума= 0).

2. Организация цикла: (CMP DL,[BP+00]) (последовательное сопоставление
содержимого ячеек 140..16F с текущим максимумом)

3. Сохранение найденного максимума (в ячейке памяти 0170: [170]=DL).

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

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

100 MOV  BP,0140 ; загрузка в регистр BP начального адреса 
103 MOV CX,0030 ; в регистр CX заносится количество ячеек диапазона
106 MOV DL,0 ; в регистр DL заносится 0 (начальное значение max)

; цикл по нахождению максимального значения:
108 CMP DL,[BP] ; текущий max DL сравнивается с содержимым очередной яч-ки
10B JAE 0110 ; если текущий max DL ≥ [BP]имеет место переход на 110
10D MOV DL,[BP] ; обновление текущего max DL (знач-е [BP] оказалось больше)
110 INC BP ; наращивание адреса текущей ячейки памяти
111 LOOP 0108 ; цикл по перебору ячеек памяти

113 MOV [170],DL ; сохранение в ячейке 170 найденного максимума

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

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

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

100: BP = 140
103: CX = 3 (т.к. проверка проводится для первых 3-х ячеек диапазона)
106: DL = 0 (начальное значение max)

108: DL<->[BP] 0<->[140]=33 Результат сравнения < (меньше)
10B: переход на адрес 110 не следует, т.к. имеет место < (меньше)
10D: DL= [140]= 33 обновление текущего max DL
110: DI= 140+1= 141
111: CX= 3-1= 2 (CX=2>0, поэтому следует переход на адрес 108)

108: DL<->[BP] 33<->[141]=31 Результат сравнения > (больше)
10B: переход на адрес 110, т.к. условие переходы выполнено
110: DI= 141+1= 142
111: CX= 2-1= 1 (CX=1>0, поэтому следует переход на адрес 108)

108: DL<->[BP] 33<->[142]=39 Результат сравнения < (меньше)
10B: переход на адрес 110 не следует, т.к. имеет место < (меньше)
10D: DL= [142]= 39 обновление текущего max DL
110: DI= 142+1= 143
111: CX= 1-1= 0 (CX=0, цикл завершён)
113: [170]= DL= 39 (сохранение найденного max)

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

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

В ячейку 170 занесено значение минимума 39