home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / rettig / source / segment.asm < prev    next >
Assembly Source File  |  1990-10-21  |  2KB  |  69 lines

  1. ; SEGMENT.ASM
  2. ;
  3. ; by Ralph Davis, Leonard Zerman
  4. ;
  5. ; Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  6. ;
  7.  
  8.            PUBLIC _SEGMENT
  9.  
  10.            EXTRN __TR_HEXASM:FAR
  11.  
  12. ;===================
  13. IN_PARMS   STRUC
  14.  
  15. BP_OLD     DW   ?
  16. RET_ADDR   DD   ?
  17. IN_VAR     DD   ?           ; Variable we want the segment of
  18. OUT_VAR    DD   ?           ; Variable to return segment in
  19.                             ;    must be 4-byte character variable
  20.                             ;    (not including null terminator)
  21.  
  22. IN_PARMS   ENDS
  23. ;===================
  24.  
  25. ;************************************
  26. _TEXT SEGMENT BYTE PUBLIC 'CODE'
  27.            ASSUME  CS:_TEXT
  28. ;------------------------------------
  29. _SEGMENT    PROC    FAR
  30.  
  31.            PUSH    BP
  32.            MOV     BP,SP
  33.            PUSH    DS
  34.            PUSH    ES
  35.            PUSH    AX
  36.            PUSH    BX
  37.            PUSH    CX
  38.            PUSH    SI
  39.            PUSH    DI
  40.            LDS     SI,[BP].IN_VAR
  41.            LES     DI,[BP].OUT_VAR
  42.            XOR     SI,SI
  43.            PUSH    SI            ; pass 0 as first parameter
  44.            PUSH    DS            ; push segment address
  45.            CALL    __TR_HEXASM        ; Returns address of hex string
  46.                                  ; in AX:BX
  47.            ADD     SP,4          ; discard parms from stack
  48.            MOV     DS,DX         ; set up registers to return segment
  49.            MOV     SI,AX         ; DX=segment; AX=offset
  50.            MOV     CX,4
  51.            REP     MOVSB         ; return segment address
  52.  
  53.            POP     DI
  54.            POP     SI
  55.            POP     CX
  56.            POP     BX
  57.            POP     AX
  58.            POP     ES
  59.            POP     DS
  60.            POP     BP
  61.            RET
  62.  
  63. _SEGMENT    ENDP
  64. ;------------------------------------
  65. _TEXT      ENDS
  66. ;*****************************************
  67.            END
  68.  
  69.