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

📄 cwfileio.asm

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.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 + -