;=================================================================== ;"bin16BCD5"- преобразование 16-битного двоичного ;значения в упакованный BCD формат ;=================================================================== ;Количество слов кода :25 + возврат ;Количество циклов :25/176 (Мин/Макс) + возврат ;Использованные младшие регистры :нет ;Использованные старшие регистры :4(fbinL,fbinH/tBCD0,tBCD1,tBCD2) ;Использованные указатели :нет ;Вход .def fbinL =r16 ;двоичное значение, младший байт .def fbinH =r17 ;двоичное значение, старший байт ;Выход .def tBCD0 =r17 ;BCD значение, цифры 1 и 0 .def tBCD1 =r18 ;BCD значение, цифры 3 и 2 .def tBCD2 =r19 ;BCD значение, цифра 4 ;Примечание: Переменные fbinH и tBCD0 должны размещаться в одном ;регистре. bin16BCD5: ldi tBCD2,-1 b16BCD5_l1: inc tBCD2 subi fbinL,low(10000) sbci fbinH,high(10000) brsh b16BCD5_l1 subi fbinL,low(-10000) sbci fbinH,high(-10000) ldi tBCD1,-0x11 b16BCD5_l2: subi tBCD1,-0x10 subi fbinL,low(1000) sbci fbinH,high(1000) brsh b16BCD5_l2 subi fbinL,low(-1000) sbci fbinH,high(-1000) b16BCD5_l3: inc tBCD1 subi fbinL,low(100) sbci fbinH,high(100) brsh b16BCD5_l3 subi fbinL,-100 ldi tBCD0,-0x10 b16BCD5_l4: subi tBCD0,-0x10 subi fbinL,10 brsh b16BCD5_l4 subi fbinL,-10 add tBCD0,fbinL ret