⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xms.asm

📁 DOS 源代码 系列之 command 源码
💻 ASM
字号:
;            name    XMSDriver
.model  small,c
.code
            public  XMSDriver
XMSDriver   proc    XMSPtr: far ptr
            mov     ah,00h
            call    [XMSPtr]
            mov     ax,bx
            ret
XMSDriver   endp
;            end
;
;            name    XMSVersion
.model  small,c
.code
            public  XMSVersion
XMSVersion  proc    XMSPtr: far ptr
            mov     ah,00h
            call    [XMSPtr]
            ret
XMSVersion  endp


;
; This code snitched from xmsinfo.exe
;

HimemHandleTable proc uses es si, pHandleCount:NEAR PTR, pHandleSize:NEAR PTR

	mov	ax, 4309h	; 'secret' handle table info call
	int	2fh
	cmp	al, 43h
	jne	not_himem

	cmp	word ptr es:[bx], 0A01h ; info version 1 & Handle size 10?
	jne	not_himem

	mov	al, es:[bx+1]		; handle size
	cbw
	mov	si, [pHandleSize]
	mov	[si], ax

	mov	ax, es:[bx+2]		; # handles
	mov	si, [pHandleCount]
	mov	[si], ax

	mov	ax, es:[bx+4]		; offset to handle table
	mov	dx, es:[bx+6]		; segment of handle table
	jmp	short hht_ret

not_himem:

	xor	ax,ax			; doesn't look like himem,
	mov	dx,ax			; return NULL ptr

hht_ret:

	ret

HimemHandleTable endp


;
; Machines before the 80286 will set high the top four bits in the flags
; register as soon as you try to clear them.  So put zero in AX, move that
; to the flags register and back into AX ... if AX has the top four bits
; set, it's a pre-286.
;

IsPre286 proc			; Returns 0 if 286 or higher, !0 if <= 286

        xor    AX,AX
        push   AX
        popf
        pushf
        pop    AX

        and    AX, 0F000h	; Returns F000 if <= 286
	cmp    AX, 0F000h
	jz     ip286_ret

	xor    AX, AX

ip286_ret:

        ret

IsPre286 endp

	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -