📄 xms.asm
字号:
code segment public
assume cs:code,ds:code
.386p
xmsroutine dw 0,0
emms dd 0
dw 0
dd 0
dw 0
dd 0
filename db "xms.dat",0
_handle dw 0
mydata db 30000 dup (0)
main proc far
push ds
sub ax,ax
push ax
mov ax,cs
mov ds,ax
mov ax,4300h
int 2fh
cmp al,80h
jnz noxms
mov ax,4310h
int 2fh
mov cs:xmsroutine,bx
mov cs:xmsroutine+2,es
mov ah,08h
call dword ptr cs:xmsroutine
cmp ax,400h
jb noxms
mov ah,09h
mov dx,10h
call dword ptr cs:xmsroutine
cmp ax,1
jnz noxms
mov word ptr cs:emms+10,dx ;desc handle
mov dx,offset filename
mov ax,3d00h
int 21h
mov cs:_handle,ax
loopx:
mov dx,offset mydata
mov cx,30000
mov bx,ax
mov ah,3fh
int 21h
cmp ax,30000
jnz closefile
mov ax,offset mydata
movzx eax,ax
mov bx,cs
movzx ebx,bx
shl ebx,4
add ebx,eax
mov eax,dword ptr cs:emms+6
add ebx,eax
mov dword ptr cs:emms+6,ebx ;source dis
mov eax,30000
mov dword ptr cs:emms,eax
mov ah,0bh
call dword ptr cs:xmsroutine
jmp loopx
closefile:
mov bx,cs:_handle
mov ah,3eh
int 21h
noxms:
ret
main endp
print proc near
push ax
push bx
push cx
push dx
mov cl,12
mov dx,ax
loop2:
mov ax,dx
shr ax,cl
and ax,0fh
add ax,30h
cmp ax,39h
jle nnn
add ax,7
nnn:
mov ah,0eh
int 10h
sub cl,4
cmp cl,0
jge loop2
mov ah,0eh
mov al,20h
int 10h
pop dx
pop cx
pop bx
pop ax
ret
print endp
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -