;тест - алгоритм преобразователя двухбайтового положительного числа в 5 неупакованных
;двоично - десятичных числа
; исходное двоичное число прдварительно разместить в регистровой паре DE
; результат размещается в ОЗУ программ/данных в ячейках массива prodakt
    org 0x0000 ; code 0x0000
   jmp init ; резервирование области векторов прерываний
    org 0x0100 ; code 0x0100
init:
   lxi sp,#ssteck
decod:
   lxi h,#prodakt
   mvi b,#5
   xra a
loopz:
   sta m
   inx h
   dcr b
   cmp b
   jnz loopz ; предварительная очистка рвх результата
   lxi h,#prodakt ; указатель на начало массива результата
   lxi b,#0x2710 ; =10000D
mains10000:
   mov a,d ; читать младший байт данных в А
   sub b ; вычесть младший байт текущей константы
   mov d,a ; вернуть результат в D
   mov a,e ; читать старший байт данных в А
   subb c ; вычесть старший байт текущей константы и флаг переноса С
   mov e,a ; вернуть результат в E
   inr m ; значение текущего результата +1
   jnc mains10000 ; повторять до отрицательного результата от mains10000
   dcr m ; скорректировать отрицательный результат
   inx h ; продвижка указателя на следующий накопитель
   mov a,d ; скорректировать исходные данные
   add b
   mov d,a
   mov a,e
   adc c
   mov e,a
   lxi b,#0x03e8 ; =1000D
mains1000:
   mov a,d ; читать младший байт данных в А
   sub b ; вычесть младший байт текущей константы
   mov d,a ; вернуть результат в D
   mov a,e ; читать старший байт данных в А
   subb c ; вычесть старший байт текущей константы и флаг переноса С
   mov e,a ; вернуть результат в E
   inr m ; значение текущего результата +1
   jnc mains1000 ; повторять до отрицательного результата от mains1000
   dcr m ; скорректировать отрицательный результат
   inx h ; продвижка указателя на следующий накопитель
   mov a,d ; скорректировать исходные данные
   add b
   mov d,a
   mov a,e
   adc c
   mov e,a
   lxi b,#0x64 ; =100D
mains100:
   mov a,d ; читать младший байт данных в А
   sub b ; вычесть младший байт текущей константы
   mov d,a ; вернуть результат в D
   mov a,e ; читать старший байт данных в А
   subb c ; вычесть старший байт текущей константы и флаг переноса С
   mov e,a ; вернуть результат в E
   inr m ; значение текущего результата +1
   jnc mains100 ; повторять до отрицательного результата от mains100
   dcr m ; скорректировать отрицательный результат
   inx h ; продвижка указателя на следующий накопитель
   mov a,d ; скорректировать исходные данные
   add b
   mov d,a
   mov a,e
   adc c
   mov e,a
   mvi d,#0x0a ; =10D
mains10:
   mov a,d ; читать младший байт данных в А
   sub b ; вычесть младший байт текущей константы
   mov d,a ; вернуть результат в D
   inr m ; значение текущего результата +1
   jnc mains10 ; повторять до отрицательного результата от mains10
   dcr m ; скорректировать отрицательный результат
   inx h ; продвижка указателя на следующий накопитель
   mov a,d ; скорректировать исходные данные
   add b
   mov d,a
   mov m,d ; завершение - единицы в prodakt+4
stop:
   jmp stop ; технологический останов (или ret,если данная программа вызывалась как call decod)
    org 0xefff ; code 0xefff
ssteck:
    ds1
    org 0xf000 ; code 0xf000 собственно накопитель результата
prodakt:
    ds 5 ; резервируем 5 байт памяти программ/данных под накопитель результата
    ; размещение результата в следующей последовательности :
    ; сотни тысяч в формате 0х0N - где N - число сотен тысяч (prodakt)
    ; десятки тысяч в формате 0х0N - где N - число десятков тысяч (prodakt+1)
    ; сотни в формате 0х0N - где N - число сотен (prodakt+2)
    ; десятки в формате 0х0N - где N - число десятков (prodakt+3)
    ; единицы в формате 0х0N - где N - число единиц (prodakt+4)
  end