📄 cwfileio.asm
字号:
.386P
NAME fileio
EXTRN DummyRET :NEAR
EXTRN freedos :NEAR
EXTRN mallocdos :NEAR
EXTRN free :NEAR
EXTRN malloc :NEAR
DGROUP GROUP _DATA
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
ASSUME CS:_TEXT ,DS:DGROUP,SS:DGROUP
PUBLIC OpenFile
PUBLIC _OpenFile
PUBLIC CreateFile
PUBLIC _CreateFile
PUBLIC _CloseFile
PUBLIC CloseFile
PUBLIC SeekFile
PUBLIC _SeekFile
PUBLIC ReadFile
PUBLIC _ReadFile
PUBLIC _ReadLineFile
PUBLIC ReadLineFile
PUBLIC ReadByteFile
PUBLIC _ReadByteFile
PUBLIC _WriteFile
PUBLIC WriteFile
PUBLIC WriteByteFile
PUBLIC _WriteByteFile
PUBLIC _FlushFile
PUBLIC FlushFile
_OpenFile:
OpenFile: sub esp,00000004H
push ebx
push ecx
push edx
push esi
push edi
mov edx,dword ptr [esp+1ch]
mov eax,dword ptr [esp+20h]
mov ah,3dH
int 21H
jae short L1
push eax
xor eax,eax
push dword ptr [esp+24h]
push dword ptr [esp+24h]
call dword ptr REDOpenFile
lea esp,[esp+8]
pop ebx
or eax,eax
jne short L1
mov eax,ebx
jmp near ptr L5
L1: mov ebx,eax
mov ecx,dword ptr _FIOBufferSize
add ecx,00000020H
push ecx
call near ptr mallocdos
lea esp,[esp+4]
mov esi,eax
or eax,eax
mov eax,00000001H
jne short L2
push ebx
push ecx
push edx
push esi
push edi
push ebp
push ecx
call near ptr malloc
lea esp,[esp+4]
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
mov esi,eax
or eax,eax
mov eax,00000000H
jne short L2
mov ah,3eH
int 21H
mov eax,00000008H
jmp short L5
L2: mov edi,esi
push eax
push ecx
mov ecx,00000008H
xor eax,eax
or ecx,ecx
je short L4
L3: mov dword ptr [edi],eax
add edi,00000004H
dec ecx
jne short L3
L4: pop ecx
pop eax
mov dword ptr [esi],eax
mov dword ptr [esi+4],ebx
sub ecx,00000020H
mov dword ptr [esi+14h],ecx
mov dword ptr [esp+14h],esi
mov dword ptr _FIOError,00000000H
jmp short L6
L5: mov dword ptr _FIOError,eax
mov dword ptr [esp+14h],00000000H
L6: mov eax,dword ptr [esp+14h]
pop edi
pop esi
pop edx
pop ecx
pop ebx
lea esp,[esp+4]
ret
nop
_CreateFile:
CreateFile: sub esp,00000004H
push ebx
push ecx
push edx
push esi
push edi
mov edx,dword ptr [esp+1ch]
mov ecx,dword ptr [esp+20h]
mov ax,3c00H
int 21H
jb short L10
mov ebx,eax
mov ecx,dword ptr _FIOBufferSize
add ecx,00000020H
push ecx
call near ptr mallocdos
lea esp,[esp+4]
mov esi,eax
or eax,eax
mov eax,00000001H
jne short L7
push ebx
push ecx
push edx
push esi
push edi
push ebp
push ecx
call near ptr malloc
lea esp,[esp+4]
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
mov esi,eax
or eax,eax
mov eax,00000000H
jne short L7
mov ah,3eH
int 21H
mov eax,00000008H
jmp short L10
L7: mov edi,esi
push eax
push ecx
mov ecx,00000008H
xor eax,eax
or ecx,ecx
je short L9
L8: mov dword ptr [edi],eax
add edi,00000004H
dec ecx
jne short L8
L9: pop ecx
pop eax
mov dword ptr [esi],eax
mov dword ptr [esi+4],ebx
sub ecx,00000020H
mov dword ptr [esi+14h],ecx
mov dword ptr [esp+14h],esi
jmp short L11
L10: mov dword ptr _FIOError,eax
mov dword ptr [esp+14h],00000000H
L11: mov eax,dword ptr [esp+14h]
pop edi
pop esi
pop edx
pop ecx
pop ebx
lea esp,[esp+4]
ret
nop
CloseFile:
_CloseFile: push ebx
push esi
mov ebx,dword ptr [esp+0ch]
push ebx
call near ptr _FlushFile
lea esp,[esp+4]
or eax,eax
jne short L14
push ebx
mov ebx,dword ptr [ebx+4]
mov ah,3eH
int 21H
pop ebx
jb short L14
mov esi,ebx
test dword ptr [ebx],00000001H
je short L12
push esi
call near ptr freedos
lea esp,[esp+4]
jmp short L13
L12: push ebx
push ecx
push edx
push esi
push edi
push ebp
push esi
call near ptr free
lea esp,[esp+4]
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
L13: xor eax,eax
jmp short L14
L14: mov dword ptr _FIOError,eax
pop esi
pop ebx
ret
nop
_SeekFile:
SeekFile: push ebx
push ecx
push edx
mov eax,dword ptr [esp+18h]
mov ebx,dword ptr [esp+10h]
mov ecx,dword ptr [esp+14h]
mov edx,eax
push ebx
call near ptr _FlushFile
lea esp,[esp+4]
or eax,eax
jne short L18
mov eax,edx
or al,al
je short L17
dec al
je short L15
dec al
je short L16
mov eax,00000001H
jmp short L18
L15: add ecx,dword ptr [ebx+8]
jmp short L17
L16: push ebx
push ecx
xor cx,cx
xor dx,dx
mov ax,4202H
mov ebx,dword ptr [ebx+4]
int 21H
shl edx,10H
mov dx,ax
pop ecx
pop ebx
add ecx,edx
L17: mov dword ptr [ebx+8],ecx
mov dword ptr [ebx+0ch],ecx
mov dword ptr [ebx+10h],00000000H
xor eax,eax
mov dword ptr _FIOError,eax
mov eax,ecx
jmp short L19
L18: mov dword ptr _FIOError,eax
or eax,0ffffffffH
L19: pop edx
pop ecx
pop ebx
ret
nop
_ReadFile:
ReadFile: sub esp,00000004H
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov dword ptr [esp+18h],00000000H
mov ebx,dword ptr [esp+20h]
mov edx,dword ptr [esp+24h]
mov ecx,dword ptr [esp+28h]
mov edi,edx
mov ebp,ecx
L20: or ebp,ebp
je near ptr L29
mov eax,dword ptr [ebx+8]
sub eax,dword ptr [ebx+0ch]
sub eax,dword ptr [ebx+10h]
neg eax
mov ecx,ebp
or eax,eax
je short L25
cmp eax,ebp
jae short L21
mov ecx,eax
L21: lea esi,[ebx+20h]
add esi,dword ptr [ebx+8]
sub esi,dword ptr [ebx+0ch]
push ecx
push eax
mov eax,esi
and eax,00000003H
sub eax,00000004H
neg eax
and eax,00000003H
je short L22
cmp ecx,eax
jb short L22
push ecx
mov ecx,eax
rep movsb
pop ecx
sub ecx,eax
L22: push ecx
shr ecx,02H
je short L24
L23: mov eax,dword ptr [esi]
mov dword ptr [edi],eax
add esi,00000004H
add edi,00000004H
dec ecx
jne short L23
L24: pop ecx
and ecx,00000003H
rep movsb
pop eax
pop ecx
add dword ptr [ebx+8],ecx
add dword ptr [esp+18h],ecx
sub ebp,ecx
je near ptr L29
L25: push ebx
call near ptr _FlushFile
lea esp,[esp+4]
or eax,eax
jne near ptr L30
push ebx
push ecx
push edx
mov ecx,dword ptr [ebx+8]
mov dword ptr [ebx+0ch],ecx
mov dx,cx
shr ecx,10H
mov ebx,dword ptr [ebx+4]
mov ax,4200H
int 21H
pop edx
pop ecx
pop ebx
mov dword ptr [ebx+10h],00000000H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -