home *** CD-ROM | disk | FTP | other *** search
- MULT:; UNSIGNED SIXTEEN BIT INTEGER MULTIPLY.
- ; ON ENTRANCE: MULTIPLIER IN DE.
- ; MULTIPLICAND IN HL.
- ;
- ; ON EXIT: RESULT IN HL.
- ;
- ; REGISTER USES:
- ;
- ;
- ; H HIGH ORDER PARTIAL RESULT
- ; L LOW ORDER PARTIAL RESULT
- ; D HIGH ORDER MULTIPLICAND
- ; E LOW ORDER MULTIPLICAND
- ; B COUNTER FOR NUMBER OF SHIFTS
- ; C HIGH ORDER BITS OF MULTIPLIER
- ; A LOW ORDER BITS OF MULTIPLIER
- ;
- LD B,16; NUMBER OF BITS- INITIALIZE
- LD C,D; MOVE MULTIPLIER
- LD A,E;
- LD X,Y ;SHOULD GET 'U' ERROR
- LOAD A,B ;SHOULD GET 'O' ERROR
- CP 'A' ;TEST 'X' FORMAT
- EX DE,HL; MOVE MULTIPLICAND
- LD HL,0; CLEAR PARTIAL RESULT
- EJECT ;TEST EJECT PROCESSING
- MLOOP: SRL C; SHIFT MULTIPLIER RIGHT
- RRA; LEAST SIGNIFICANT BIT IS IN CARRY
- JR NC,NOADD-$; IF NO CARRY SKIP THE ADD
- ADD HL,DE; ELSE ADD MULTIPLICAND TO PARTIAL RESULT
- NOADD: EX DE,HL; SHIFT MULTIPLICAND LEFT
- ADD HL,HL; BY MULTIPLYING IT BY TWO
- EX DE,HL;
- DJNZ MLOOP-$; REPEAT UNTIL NO MORE BITS
- RET;
- END;