/* SLdt 210304 (Disclaimer: None. Sue me.) avrasm2 dual->BCD nach Tietze/Schenk ;****************************************************** .def tmp2 = r14 .def tmp0 = r16 .def tmp1 = r17 nib4_BCD5: ; dual tmp1,tmp0 -> BCD tmp2/2,tmp1,tmp0 #define BCD0 r23 #define BCD1 r24 #define BCD2 r25 #define n_d_cnt r19 push BCD0 push BCD1 push BCD2 push n_d_cnt ldi n_d_cnt,16 clr BCD0 clr BCD1 clr BCD2 n_d_loop: lsl tmp0 ; shift input value through ALL bytes rol tmp1 rol BCD0 rol BCD1 rol BCD2 dec n_d_cnt breq n_d_end subi BCD2,-$03 sbrs BCD2,3 subi BCD2,$03 subi BCD1,-$33 sbrs BCD1,3 subi BCD1,$03 sbrs BCD1,7 subi BCD1,$30 subi BCD0,-$33 sbrs BCD0,3 subi BCD0,$03 sbrs BCD0,7 subi BCD0,$30 rjmp n_d_loop n_d_end: mov tmp2,BCD2 mov tmp1,BCD1 mov tmp0,BCD0 pop n_d_cnt pop BCD2 pop BCD1 pop BCD0 ret #undef BCD0 #undef BCD1 #undef BCD2 #undef n_d_cnt