.define .mlu2 .sect .text .sect .rom .sect .data .sect .bss .sect .text ! 16 bits unsigned multiply routine ! Expects operands on stack ! Yields result in de-registers ! This routine could also be used for signed integers, but it won't ! because there is a more clever one just for signed integers. .mlu2: pop h shld .retadr mov h,b mov l,c shld .bcreg pop b ! bc = multiplier pop d ! de = multiplicand lxi h,0 ! hl = product 1: mov a,b ! if multiplier = 0 then finished ora c jz 3f xra a ! reset carry mov a,b ! shift multiplier right rar mov b,a mov a,c rar mov c,a jnc 2f !if carry set: add multiplicand to product dad d 2: xchg ! shift multiplicand left dad h xchg jmp 1b ! keep looping 3: xchg ! de becomes product lhld .bcreg mov b,h mov c,l lhld .retadr pchl