Measno
Listing index
Mult
Routine:        Mlt
Function:       Multiplies two 32-bit positive integers
Called by:      Mult, Print
Calls:          None
Entry:          #1 in Mltbuf 0-3, #2 in Mltbuf 4-7
Exit:           Result in Mltbuf 8-15
Preserved:      C,D,E,H,L,IY


MLT     LD      IX,MLTBUF
        XOR     A
        LD      (IX+8),A
        ÖD      (IX+9),A
        ÖD      (IX+10),A
        LD      (IX+11),A
; Clear space for result bytes 0-3.
        LD      B,32
; In the following loop, 32 bit multiplication is acheived by repeatedly shifting the result/multiplier and adding the multiplicand if a 1 is shifted out. 
MLT1    SLA     (IX+8)
        RL      (IX+9)
        RL      (IX+10)
        RL      (IX+11)
        RL      (IX)
        RL      (IX+1)
        RL      (IX+2)
        RL      (IX+3)
        JR      NC,MLT2
        LD      A,(IX+8)
        ADD     A,(IX+4)
        LD      (IX+8),A
        LD      A,(IX+9)
        ADC     A,(IX+5)
        LD      (IX+9),A
        LD      A,(IX+10)
        ADC     A,(IX+6)
        LD      (IX+10),A
        LD      A,(IX+11)
        ADC     A,(IX+7)
        LD      (IX+11),A
        JR      NC,MLT2
        INC     (IX)
        JR      NZ,MLT2
        INC     (IX+1)
        JR      NZ,MLT2
        INC     (IX+2)
        JR      NZ,MLT2
        INC     (IX+3)
MLT2    DJNZ    MLT1
; Store bytes 4-7 in Mltbuf 8-15.
        LD      A,(IX)
        LD      (IX+12),A
        LD      A,(IX+1)
        LD      (IX+13),A
        LD      A,(IX+2)
        LD      (IX+14),A
        LD      A,(IX+3)
        LD      (IX+15),A
        RET
 
Measno
Listing index
Mult