home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / utils / asmutl / z80asm24.lbr / TEST2.AZM / TEST2.ASM
Assembly Source File  |  1987-10-13  |  1KB  |  37 lines

  1. MULT:;    UNSIGNED SIXTEEN BIT INTEGER MULTIPLY.
  2. ;    ON ENTRANCE: MULTIPLIER IN DE.
  3. ;             MULTIPLICAND IN HL.
  4. ;
  5. ;    ON EXIT: RESULT IN HL.
  6. ;
  7. ;    REGISTER USES:
  8. ;
  9. ;
  10. ;    H    HIGH ORDER PARTIAL RESULT
  11. ;    L    LOW ORDER PARTIAL RESULT
  12. ;    D    HIGH ORDER MULTIPLICAND
  13. ;    E    LOW ORDER MULTIPLICAND
  14. ;    B    COUNTER FOR NUMBER OF SHIFTS
  15. ;    C    HIGH ORDER BITS OF MULTIPLIER
  16. ;    A    LOW ORDER BITS OF MULTIPLIER
  17. ;
  18.     LD    B,16;        NUMBER OF BITS- INITIALIZE
  19.     LD    C,D;        MOVE MULTIPLIER
  20.     LD    A,E;
  21.     LD    X,Y        ;SHOULD GET 'U' ERROR
  22.     LOAD    A,B        ;SHOULD GET 'O' ERROR
  23.     CP    'A'        ;TEST 'X' FORMAT
  24.     EX    DE,HL;        MOVE MULTIPLICAND
  25.     LD    HL,0;        CLEAR PARTIAL RESULT
  26.     EJECT            ;TEST EJECT PROCESSING
  27. MLOOP:    SRL    C;        SHIFT MULTIPLIER RIGHT
  28.     RRA;            LEAST SIGNIFICANT BIT IS IN CARRY
  29.     JR    NC,NOADD-$;    IF NO CARRY SKIP THE ADD
  30.     ADD    HL,DE;        ELSE ADD MULTIPLICAND TO PARTIAL RESULT
  31. NOADD:    EX    DE,HL;        SHIFT MULTIPLICAND LEFT
  32.     ADD    HL,HL;        BY MULTIPLYING IT BY TWO
  33.     EX    DE,HL;
  34.     DJNZ    MLOOP-$;    REPEAT UNTIL NO MORE BITS
  35.     RET;
  36.     END;
  37.