(в MASS2 я записывал кол-во четных, а не сами числа)
call podpr; вызываем нашу подпрограмму
………….
………….
podpr:
lxi H,MASS1; загружаем указатель чтения в HL
mvi B,128; загружаем счетчик повторений в регистр B
mvi C,0; обнуляем счетчик кол-ва четных чисел
loop:
mov A,M; читаем текущий элемент массива
rrc; младший бит заносим в CY
jc skip; если CY равен 1, число нечетное, не считаем его
inr C; если дошли сюда, то CY =0, число четное, считаем его
skip:
inx H; смещаем указатель чтения
dcr B; уменьшаем счетчик повторений
jnz loop; повторяем пока B не равен 0
mov A,C; заносим С в A (С-счетчик четных чисел)
sta MASS2; пишем A в MASS2 (т.е. кол-во четных чисел)
ret возвращаемся из подпрограммы
lxi H,0; обнуляем счетчик наших чисел (используем регистровую пару, т.к счетчик 32 разрядный)
lxi D,buf5; загружаем указатель чтения в DE
lxi B,0; обнуляем счетчик цикла(в этот раз будем не вычитать, а идти от 0 до 8000)
loop:
ldax D; загружаем текущий элемент из буфера в A
add L; складываем A с младшим словом регистра HL
mov L,A; и заносим эту сумму в L
jnc skip; если при суммировании был перенос,
inr H; увеличим старшее слово на 1
skip:
inx D; смещаем указатель чтения
inx B; увеличиваем счетчик цикла
mov A,B проверим старшее слово счетчика В
cpi 80; если оно равно 80, мы набрали 8000 повторений, выходим,
jnz loop; если нет продолжаем
Предполагаем, что ADR25-ADR24<FF00h
Решение:
lxi H, ADR24; помещаем ADR24 в HL
lxi D, ADR25; помещаем ADR25 в DE
lxi B, ADR26; помещаем ADR26 в BC
call podpr; вызываем подпрограмму
podpr:
mov A,E; вычислим кол-во ячеек между адресами ADR25 и
sub L; ADR24, для этого вычтем из DE HL, проделываем:
mov E,A; E->A, A=A-L,A->E; для старшего слова:
mov A,D; D->A, A=A-H-CY,A->D;
sbb H;
mov D,A;
dcx D; вычтем 1, т.к. Окончание цикла произойдет при DE=FFFFh, а не при 0000h
loop:
mov A,M; читаем текущий элемент
cpi LMIN; сравниваем с минимальной границей
jc skip; если есть флаг CY, то текущий байт < LMIN
cpi LMAX; сравниваем с максимальной границей
jnc skip; если флаг CY=0, то текущий байт >LMAX
stax B; сюда доходим, если байт удовлетворяет нашим inx B; требованиям, записываем его в новый массив
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.