; Richard Pavlicek <pavlicek@gate.net>
;
;Below is my routine, which displays (in decimal) the 32-bit number in
;bx:ax.  For a 16-bit number, simply set bx to zero.

;--- Display number | bx high word, ax low word
DNUMP:  mov     cx,10           ;divisor and flag
        push    cx              ;put flag on stack

;- divide & store digit loop
DNUM1:  xchg    ax,bx           ;make ax high word, bx low word
        sub     dx,dx           ;extend high word
        div     cx              ;dx = remainder, ax high quotient
        xchg    ax,bx           ;save high quotient, get low word
        div     cx              ;dx = digit (0-9), ax low quotient
        push    dx              ;save digit (remainder) on stack
        mov     dx,bx           ;copy so not destroyed below
        or      dx,ax           ;is full quotient zero?
        jnz     DNUM1           ;no, continue

        pop     dx              ;get most significant digit

;- display loop
DNUM2:  or      dl,30h          ;convert to ASCII digit
        mov     ah,02h          ;DOS display character function
        int     21h             ;display it
        pop     dx              ;get next digit or flag
        cmp     dx,cx           ;is it a digit (less than 10)?
        jc      DNUM2           ;yes, continue display
        retn                    ;no, flag met (stack normal)

