返回
;XMS ASSEMBLER UNIT OF FVISION

    TITLE    XMS

CODE  SEGMENT BYTE PUBLIC 

        ASSUME  CS:CODE,DS:CODE

        PUBLIC  TestXms

;Function TestXms:Boolean

PXms        DD    ?

TestXms:

    PUSH    BP
    MOV    BP,SP
        PUSH    DS
        PUSH    CS
        POP     DS
        MOV     AX,4300H
        INT     2FH
        CMP     AL,80H
        JZ      L1
   L3:  XOR     AL,AL
        JMP     L2
   L1:  MOV     AX,4310H
        INT     2FH
        MOV     WORD PTR [PXms],BX
        MOV     WORD PTR [PXms+2],ES
        MOV     AX,0
        CALL    [PXms]
        CMP     AX,200H
        MOV     AX,1
        JC      L3
   L2:  POP     DS
        MOV     SP,BP
        POP     BP
        RETF


    PUBLIC    GetXmsSize

;Function GetXmsSize

GetXmsSize:

    PUSH    BP
    MOV    BP,SP
        MOV     AH,8
        CALL    CS:[PXms]
        MOV     SP,BP
        POP     BP
        RETF


        PUBLIC  MallocXms
;Function MallocXms(_Size:Word):Word;
MallocXms:
        _Size   EQU  WORD PTR [BP+6]
        PUSH    BP
        MOV     BP,SP
        MOV     DX,_Size
        MOV     AH,9
        CALL    CS:[PXms]
        CMP     AX,0
        JZ      L10
        MOV     AX,DX
   L10: MOV     SP,BP
        POP     BP
        RETF    2



        PUBLIC  FreeXms
;Function FreeXms(Handle:Word):Boolean;
FreeXms:
        Handle  EQU  WORD PTR [BP+6]
        PUSH    BP
        MOV     BP,SP
        MOV     DX,Handle
        MOV     AH,0AH
        CALL    CS:[PXms]
        MOV     AL,BL
        MOV     SP,BP
        POP     BP
        RETF    2



        PUBLIC  MoveXms
;Function MoveXms(L:Longint;SH:Word;SPt:Pointer;TH:Word;TPt:Pointer):Word;
MoveXms:
    PUSH    DS
        PUSH    SI
        PUSH    SS
        POP     DS
    MOV    SI,SP
    ADD    SI,8
        MOV     AH,0BH
        CALL    CS:[PXms]
        POP     SI
        POP     DS
    RETF    16


CODE    ENDS
        END