📄 devcall.asm
字号:
.MODEL LARGE,C
.286
.DATA
TRUE equ 1
FALSE equ -1
DriveName db 'A4SPI$ ', 0
sOpenFlag db 0
DriveHandle dw 0
Ioctl_cmd dd 0
.CODE
PUBLIC SCNOpen,SCNCall,SCNClose
SCNOpen PROC FAR USES ax bx cx dx si di ds es
mov ax,@data
mov ds,ax
mov ax, TRUE
cmp sOpenFlag, 0
jne s_exit
mov sOpenFlag, 1
lea dx, DriveName
mov ax, 3d02h
int 21h ;execute open a file
jc s_fail
mov DriveHandle, ax
mov ax, TRUE
jmp s_exit
s_fail: mov ax, FALSE
s_exit: ret
SCNOpen endp
;
SCNCall PROC FAR USES ax bx cx dx si di ds es, parm:far PTR DWORD
mov ax,@data
mov ds,ax
lea bx,Ioctl_cmd ;0
mov dx,bx ;to be used by dos
les ax,parm
mov word ptr [bx],ax
mov word ptr [bx+2],es
mov bx, DriveHandle ;0
mov cx, 4
mov ax, 4403h ;execute ioctl for devices
int 21h
ret
SCNCall endp
;
SCNClose PROC FAR USES ax bx cx dx si di ds es
mov ax,@data
mov ds,ax
cmp sOpenFlag, 0
je noclose
mov sOpenFlag, 0
mov bx, DriveHandle
or bx, bx
jz noclose
mov ah, 3eh
int 21h
noclose:ret
SCNClose endp
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -