home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 April / Chip_1997-04_cd.bin / prezent / cb / data.z / REAL2EXT.ASM < prev    next >
Assembly Source File  |  1997-01-16  |  1KB  |  62 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Delphi Runtime Library                          *
  5. ; *                            *
  6. ; *    Copyright (c) 1996 Borland International    *
  7. ; *                            *
  8. ; *******************************************************
  9.  
  10.     INCLUDE    SE.ASM
  11.  
  12.     .386
  13.     .MODEL    FLAT
  14.  
  15.     PUBLIC    _Real2Ext, @Real2Ext
  16.  
  17.     .CODE
  18.  
  19. RealBias EQU    129
  20. ExtBias  EQU    3FFFH
  21.  
  22. ;    FUNCTION _Real2Ext( val : Real ) : Extended;
  23.  
  24. @Real2Ext:
  25. _Real2Ext PROC
  26.  
  27. ; ->    EAX    Pointer to value
  28. ; <-    FST(0)    Result
  29.  
  30. ;    the REAL data type has the following format:
  31. ;    8 bit exponent (bias 129), 39 bit fraction, 1 bit sign
  32.  
  33.     MOV    DH,[EAX+5]    ; isolate the sign bit
  34.     AND    DH,80H
  35.     MOV    DL,[EAX]    ; fetch exponent
  36.     TEST    DL,DL        ; exponent zero means number is zero
  37.     JE    @@zero
  38.  
  39.     ADD    DX,ExtBias-RealBias    ; adjust exponent bias
  40.  
  41.     PUSH    EDX        ; the exponent is at the highest address
  42.  
  43.     MOV    EDX,[EAX+2]    ; load high fraction part, set hidden bit
  44.     OR    EDX,80000000H
  45.     PUSH    EDX        ; push high fraction part
  46.  
  47.     MOV    DL,[EAX+1]    ; load remaining low byte of fraction
  48.     SHL    EDX,24        ; clear low 24 bits
  49.     PUSH    EDX
  50.  
  51.     FLD    tbyte ptr [ESP]    ; pop result onto chip
  52.     ADD    ESP,12
  53.  
  54.     RET
  55.  
  56. @@zero:    FLDZ
  57.     RET
  58.  
  59. _Real2Ext ENDP
  60.  
  61.     END
  62.