00001 *************************
00002 *
00003 * D3216.ASM
00004 * MDJ 09-26-90
00005 *
00006 * 32-BIT BY 16-BIT
00007 * UNSIGNED INTEGER
00008 * DIVIDE
00009 *
00010 *************************
00011 *
00012 * U AND S STACKS MUST
00013 * ALREADY BE INITIALIZED
00014 *
00015 * ON ENTRY, 32-BIT
00016 * DIVIDEND MUST BE IN
00017 * DIVDND AND 16-BIT
00018 * DIVISOR MUST BE IN
00019 * DIVSOR
00020 *
00021 * ON RETURN, 32-BIT
00022 * QUOTIENT IS IN QUOTNT
00023 * AND 16-BIT MODULUS
00024 * (REMAINDER) IS IN
00025 * MODLUS
00026 *
00027 *************************
00028 *
00029 DIVDND  EQU     $CB     32-BIT DIVIDEND (SCRATCHPAD)
00030 DIVSOR  EQU     $CF     16-BIT DIVISOR (SCRATCHPAD)
00031 QUOTNT  EQU     $CB     32-BIT QUOTIENT
00032 MODLUS  EQU     $CF     16-BIT MODULUS
00033         ORG     $437E
00034 D3216   PSHS    A,B,X
00035         CLRA
00036         CLRB
00037         LDX     #32     SHIFT COUNT
00038 DIVA    LSL     DIVDND+3 DO SHIFT
00039         ROL     DIVDND+2
00040         ROL     DIVDND+1
00041         ROL     DIVDND
00042         ROLB
00043         ROLA
00044         BCC     DIVB    GO IF NO CARRY ON SHIFT
00045         SUBD    DIVSOR  SUBTRACT MUST GO
00046         BRA     DIVC    GO SET QUOTIENT BIT = 1
00047 DIVB    SUBD    DIVSOR  DO SUBTRACT
00048         BHS     DIVC    GO IF + OR 0 RESULT
00049         ADDD    DIVSOR  ADD BACK IN IF - RESULT
00050         BRA     DIVD    GO LEAVE QUOTIENT BIT = 0
00051 DIVC    INC     QUOTNT+3 SET QUOTIENT BIT = 1
00052 DIVD    LEAX    -1,X    DECREMENT COUNT
00053         BNE     DIVA    RETURN FOR NEXT SHIFT
00054         STD     MODLUS  STORE MODULUS
00055         PULS    A,B,X
00056 ZEND    RTS
00057         END
 
 
 
 
 
 
 
 
 
