返回
;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