.def a0 = r16 .def a1 = r17 .def a2 = r18 .def a3 = r19 .def b0 = r20 .def b1 = r21 .def b2 = r22 .def b3 = r23 .def t0 = r24 .def t1 = r25 .def t2 = r26 .def t3 = r27 .def i0 = r28 ;************************************************************************ ;* * ;* unsigned multiplication 32 bit * ;* * ;************************************************************************ ;cycle: max 245 umul32: cpi a3, 0 cpc a3, a2 breq _umu1 ;one operand must be below 65536 mov t0, a0 ; swap A <-> B mov a0, b0 mov b0, t0 mov t0, a1 mov a1, b1 mov b1, t0 mov b2, a2 mov b3, a3 clr a2 clr a3 ; a3,2,1,0 = a1,0 * b3,2,1,0 _umu1: ldi i0, 16 clr t0 clr t1 ror a1 ror a0 _umu2: brcc _umu3 add a2, b0 adc a3, b1 adc t0, b2 adc t1, b3 _umu3: ror t1 ror t0 ror a3 ror a2 ror a1 ror a0 dec i0 brne _umu2 ret ;------------------------------------------------------------------------