home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wunderki.zip / LOVF.ASM < prev    next >
Assembly Source File  |  1993-08-16  |  1KB  |  92 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Runtime Library                    *
  5. ; *    Longint Arithmetic with Overflow Checks        *
  6. ; *                            *
  7. ; *    Copyright (C) 1988,92 Borland International    *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    LOVF
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. DATA    SEGMENT    WORD PUBLIC
  16.  
  17. ; Externals
  18.  
  19.     EXTRN    Test8086:BYTE
  20.  
  21. DATA    ENDS
  22.  
  23. CODE    SEGMENT    BYTE PUBLIC
  24.  
  25.     ASSUME    CS:CODE,DS:DATA
  26.  
  27. ; Externals
  28.  
  29.     EXTRN    Overflow:NEAR
  30.  
  31. ; Publics
  32.  
  33.     PUBLIC    LongMulOvf
  34.  
  35. ; Longint multiply with overflow check
  36. ; In    DX:AX = 1st operand
  37. ;    BX:CX = 2nd operand
  38. ; Out    DX:AX = Result
  39.  
  40. LongMulOvf:
  41.  
  42.     CMP    Test8086,2
  43.     JB    @@0
  44.     .386
  45.     SHL    EAX,16
  46.     SHRD    EAX,EDX,16
  47.     SHL    ECX,16
  48.     SHRD    ECX,EBX,16
  49.     IMUL    ECX
  50.     JC    @@5
  51.     SHLD    EDX,EAX,16
  52.     RETF
  53.     .8086
  54. @@0:    MOV    SI,DX
  55.     XOR    SI,BX
  56.     OR    DX,DX
  57.     JNS    @@1
  58.     NEG    AX
  59.     ADC    DX,0
  60.     NEG    DX
  61. @@1:    OR    BX,BX
  62.     JNS    @@2
  63.     NEG    CX
  64.     ADC    BX,0
  65.     NEG    BX
  66. @@2:    OR    DX,DX
  67.     JE    @@3
  68.     XCHG    AX,CX
  69.     XCHG    DX,BX
  70.     OR    DX,DX
  71.     JNE    @@5
  72. @@3:    MOV    DI,AX
  73.     MUL    BX
  74.     JC    @@5
  75.     XCHG    AX,DI
  76.     MUL    CX
  77.     ADD    DX,DI
  78.     JC    @@5
  79.     OR    SI,SI
  80.     JNS    @@4
  81.     NEG    AX
  82.     ADC    DX,0
  83.     NEG    DX
  84. @@4:    XOR    SI,DX
  85.     JS    @@5
  86.     RETF
  87. @@5:    JMP    Overflow
  88.  
  89. CODE    ENDS
  90.  
  91.     END
  92.