12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- ;===================================================================
- ;"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
|