Annotation of coherent/b/lib/libc/crt/i8086/vxdiv.s, revision 1.1

1.1     ! root        1: ////////
        !             2: /
        !             3: / Intel 8086 C runtime.
        !             4: / SMALL model.
        !             5: /
        !             6: ////////
        !             7: 
        !             8:        .globl  vldiv
        !             9:        .globl  vrdiv
        !            10: 
        !            11: ////////
        !            12: /
        !            13: / unsigned long
        !            14: / vrdiv(a, b);
        !            15: / unsigned long a;
        !            16: / unsigned long b;
        !            17: /
        !            18: / unsigned long
        !            19: / vldiv(a, p);
        !            20: / unsigned long a;
        !            21: / unsigned long *p;
        !            22: /
        !            23: / these two routines perform 32 bit unsigned divide.
        !            24: / they are called by the compiler when a user program performs an
        !            25: / unsigned long division, and are called by the library routines
        !            26: / that perform long division.
        !            27: /
        !            28: ////////
        !            29: 
        !            30: alow   =       8
        !            31: ahigh  =       10
        !            32: blow   =       0
        !            33: bhigh  =       2
        !            34: 
        !            35: vldiv: mov     ax,bx                   / save bx.
        !            36:        mov     bx,sp                   / point bx at
        !            37:        mov     bx,6(bx)                / the operand and
        !            38:        jmp     L0                      / go to common end.
        !            39: 
        !            40: vrdiv: mov     ax,bx                   / save bx.
        !            41:        mov     bx,sp                   / point bx at
        !            42:        lea     bx,6(bx)                / the operand.
        !            43: 
        !            44: L0:    push    si                      / standard
        !            45:        push    di                      / c
        !            46:        push    bp                      / function
        !            47:        mov     bp,sp                   / linkage.
        !            48: 
        !            49:        push    ax                      / save saved bx.
        !            50:        mov     dx,ahigh(bp)            / pick up
        !            51:        mov     ax,alow(bp)             / dividend.
        !            52:        sub     si,si                   / clear out the
        !            53:        sub     di,di                   / the upper half of the mq.
        !            54: 
        !            55:        mov     cx,$32                  / step count.
        !            56: 
        !            57: L1:    shl     ax,$1                   / shift
        !            58:        rcl     dx,$1                   / one
        !            59:        rcl     di,$1                   / bit
        !            60:        rcl     si,$1                   / left.
        !            61: 
        !            62:        cmp     si,bhigh(bx)            / does it go in ??
        !            63:        jb      L3                      / nope.
        !            64:        ja      L2                      / yes.
        !            65:        cmp     di,blow(bx)             / maybe ??
        !            66:        jb      L3                      / nope.
        !            67: 
        !            68: L2:    sub     di,blow(bx)             / subtract the
        !            69:        sbb     si,bhigh(bx)            / divisor and poke a 1 bit
        !            70:        inc     ax                      / into the quotient.
        !            71: 
        !            72: L3:    loop    L1                      / do this 32 times.
        !            73: 
        !            74:        pop     bx                      / restore saved bx.
        !            75:        mov     sp,bp                   / standard
        !            76:        pop     bp                      / c
        !            77:        pop     di                      / function
        !            78:        pop     si                      / linkage.
        !            79:        ret                             / done.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.