rrc; делаем сдвиг в сторону младших разрядов
rrc; проделываем этот шаг 4 раза, В результате
rrc; в результате старшая Н цифра оказывается
rrc; на месте младшей
ani 00001111b; обнуляем старшие биты
add D; складываем с текущей суммой
mov D,A; и оставляем сумму в D
inx H; смещаем указатель чтения
dcr B; уменьшаем счетчик
jnz loop; пока не 0 повторяем цикл
(в результате в регистре D окажется сумма всех Н цифр нашего буфера)
5. Из массива, расположенного между адресами ADR1 и ADR2 (ADR1<ADR2), выделить минимальное и максимальное числа(байты) превышающие POROG, находящийся по адресу LIMIT, и просчитать их количество. Результат записать в массив COUNT.
(В задаче предполагаем, что ADR2-ADR1<=256)
lxi H, ADR1; загружаем указатель чтения в HL
mvi B, ADR2-ADR1; загружаем счетчик цикла
lda LIMIT; читаем пороговое значение из LIMIT в А
mov C,A; копируем его в С
mov D,A; текущий максимум ставим равным этому пороговому
mvi E,255; текущий минимум раным 255 (заранее невозможная
mvi A,0; ситуация), обнуляем счетчик чисел(которые>POROG)
push PSW; сохраняем счетчик в стеке
loop:
mov A,M; читаем текущий элемент из памяти
cmp C; сравниваем с POROG
jz skip; если <=POROG, не считаем
jc skip;
cmp D; если >POROG, сравниваем с текущим максимумом
jz check_min; если <=то идем проверять с тек. минимумом
jc check_min;
mov D,A если >его, то ставим данный байт текущим максимумом
check_min:
cmp E; сравниваем с тек. мин,
jz count; если >=, то идем дальше
jnc count;
mov E,A; если < , то это новый тек. мин
count:
pop PSW; нужно посчитать текущий байт. т/к он >POROG
inr A; восстанавливаем счетчик из стека, инкрементируем его,
push PSW; и сохраняем обратно в стек
skip:
inx H; смещаем указатель чтения
dcr B; уменьшаем счетчик цикла
jnz loop; повторяем пока он не обнулится
pop PSW; восстанавливаем счетчик наших чисел
sta COUNT; сохраняем его в COUNT
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.