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

📄 cwfileio.asm

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                cmp     dword ptr [ebx+14h],ebp
                jae     short L26
                mov     edx,edi
                mov     ecx,ebp
                push    ebx
                mov     ebx,dword ptr [ebx+4]
                mov     ah,3fH
                int     21H
                pop     ebx

;                jb      short L30
                jb      L30

                add     dword ptr [esp+18h],eax
                add     eax,dword ptr [ebx+8]
                mov     dword ptr [ebx+8],eax
                mov     dword ptr [ebx+0ch],eax
                jmp     short L29
L26:            mov     ecx,dword ptr [ebx+14h]
                lea     edx,[ebx+20h]
                test    dword ptr [ebx],00000001H
                push    ebx
                mov     ebx,dword ptr [ebx+4]
                je      short L27
                push    edi
                sub     esp,00000032H
                mov     edi,esp
                mov     dword ptr [edi+1ch],00003f00H
                mov     dword ptr [edi+10h],ebx
                mov     dword ptr [edi+18h],ecx

				mov	WORD PTR [edi+20h],0			

                mov     eax,edx
                and     eax,0000000fH
                mov     dword ptr [edi+14h],eax
                shr     edx,04H
                mov     word ptr [edi+24h],dx
                mov     bl,21H
                mov     ax,0ff01H
                int     31H
                mov     eax,dword ptr [edi+1ch]
                movzx   eax,ax
                rcr     word ptr [edi+20h],1
                lea     esp,[esp+32h]
                pop     edi
                jmp     short L28
L27:            mov     ah,3fH
                int     21H
L28:            pop     ebx
                jb      short L30
                mov     dword ptr [ebx+10h],eax
                or      eax,eax
                jne     near ptr L20
L29:            mov     dword ptr _FIOError,00000000H
                mov     eax,dword ptr [esp+18h]
                jmp     short L31
L30:            mov     dword ptr _FIOError,eax
                or      eax,0ffffffffH
L31:            pop     ebp
                pop     edi
                pop     esi
                pop     edx
                pop     ecx
                pop     ebx
                lea     esp,[esp+4]
                ret     
                nop     
ReadLineFile:
_ReadLineFile:  pushad  
                mov     edi,dword ptr [esp+28h]
                xor     edx,edx
                mov     ecx,00000001H
L32:            push    dword ptr [esp+24h]
                call    near ptr ReadByteFile
                lea     esp,[esp+4]
                cmp     eax,0ffffffffH
                je      short L34
                inc     edx
                cmp     al,0dH
                je      short L33
                cmp     al,1aH
                je      short L32
                cmp     ecx,dword ptr [esp+2ch]
                jae     short L32
                mov     byte ptr [edi],al
                inc     edi
                inc     ecx
                jmp     short L32
L33:            push    dword ptr [esp+24h]
                call    near ptr ReadByteFile
                lea     esp,[esp+4]
                cmp     eax,0ffffffffH
                je      short L35
                cmp     al,0aH
                mov     eax,00000004H
                jne     short L35
                xor     eax,eax
                jmp     short L35
L34:            mov     eax,00000003H
                cmp     dword ptr _FIOError,0fffffffeH
                jne     short L35
                mov     eax,00000001H
                or      edx,edx
                je      short L35
                xor     eax,eax
                jmp     short L35
L35:            mov     byte ptr [edi],00H
                mov     dword ptr [esp+24h],eax
                popad   
                mov     eax,dword ptr [esp+4]
                ret     
                nop     
_ReadByteFile:
ReadByteFile:   push    ebx
                mov     ebx,dword ptr [esp+8]
                mov     eax,dword ptr [ebx+8]
                sub     eax,dword ptr [ebx+0ch]
                cmp     eax,dword ptr [ebx+10h]
                jb      short L36
                push    ecx
                push    edx
                push    edx
                mov     edx,esp
                mov     ecx,00000001H
                push    ecx
                push    edx
                push    ebx
                call    near ptr ReadFile
                lea     esp,[esp+0ch]
                pop     edx
                pop     edx
                pop     ecx
                cmp     eax,0ffffffffH
                je      short L38
                or      eax,eax
                mov     eax,0fffffffeH
                je      short L37
                dec     dword ptr [ebx+8]
                xor     eax,eax
L36:            movzx   eax,byte ptr [eax+ebx+20h]
                inc     dword ptr [ebx+8]
                mov     dword ptr _FIOError,00000000H
                jmp     short L39
L37:            mov     dword ptr _FIOError,eax
L38:            or      eax,0ffffffffH
L39:            pop     ebx
                ret     
                nop     
WriteFile:
_WriteFile:     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     esi,edx
                mov     ebp,ecx
                or      ebp,ebp
                jne     short L40
                push    ebx
                call    near ptr _FlushFile
                lea     esp,[esp+4]
                or      eax,eax
                jne     near ptr L47
                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
                push    ebx
                mov     ebx,dword ptr [ebx+4]
                mov     ah,40H
                xor     ecx,ecx
                int     21H
                pop     ebx
                jb      near ptr L47
                jmp     short L46
L40:            or      ebp,ebp
                je      short L46
                mov     eax,dword ptr [ebx+14h]
                sub     eax,dword ptr [ebx+10h]
                mov     ecx,ebp
                cmp     eax,ebp
                jae     short L41
                mov     ecx,eax
                or      eax,eax
                je      short L45
L41:            lea     edi,[ebx+20h]
                add     edi,dword ptr [ebx+8]
                sub     edi,dword ptr [ebx+0ch]
                push    ecx
                push    eax
                mov     eax,esi
                and     eax,00000003H
                sub     eax,00000004H
                neg     eax
                and     eax,00000003H
                je      short L42
                cmp     ecx,eax
                jb      short L42
                push    ecx
                mov     ecx,eax
                rep     movsb    
                pop     ecx
                sub     ecx,eax
L42:            push    ecx
                shr     ecx,02H
                je      short L44
L43:            mov     eax,dword ptr [esi]
                mov     dword ptr [edi],eax
                add     esi,00000004H
                add     edi,00000004H
                dec     ecx
                jne     short L43
L44:            pop     ecx
                and     ecx,00000003H
                rep     movsb    
                pop     eax
                pop     ecx
                or      dword ptr [ebx],00000002H
                add     dword ptr [ebx+8],ecx
                add     dword ptr [ebx+10h],ecx
                add     dword ptr [esp+18h],ecx
                sub     ebp,ecx
                je      short L46
L45:            push    ebx
                call    near ptr _FlushFile
                lea     esp,[esp+4]
                or      eax,eax
                jne     short L47
                jmp     short L40
L46:            mov     dword ptr _FIOError,00000000H
                mov     eax,dword ptr [esp+18h]
                jmp     short L48
L47:            mov     dword ptr _FIOError,eax
                or      eax,0ffffffffH
L48:            pop     ebp
                pop     edi
                pop     esi
                pop     edx
                pop     ecx
                pop     ebx
                lea     esp,[esp+4]
                ret     
                nop     
_WriteByteFile:
WriteByteFile:  push    ebx
                push    ecx
                mov     ebx,dword ptr [esp+0ch]
                mov     ecx,dword ptr [ebx+8]
                sub     ecx,dword ptr [ebx+0ch]
                cmp     ecx,dword ptr [ebx+14h]
                jb      short L49
                push    ebx
                call    near ptr _FlushFile
                lea     esp,[esp+4]
                or      eax,eax
                jne     short L50
                xor     ecx,ecx
L49:            mov     eax,dword ptr [esp+10h]
                mov     byte ptr [ecx+ebx+20h],al
                or      dword ptr [ebx],00000002H
                inc     dword ptr [ebx+10h]
                inc     dword ptr [ebx+8]
                mov     dword ptr _FIOError,00000000H
                jmp     short L51
L50:            mov     dword ptr _FIOError,eax
                or      eax,0ffffffffH
L51:            pop     ecx
                pop     ebx
                ret     
                nop     
FlushFile:
_FlushFile:     push    ebx
                mov     ebx,dword ptr [esp+8]
                xor     eax,eax
                test    dword ptr [ebx],00000002H
                clc     
                je      near ptr L56
                push    ecx
                push    edx
                push    ebx
                mov     ecx,dword ptr [ebx+0ch]
                mov     dx,cx
                shr     ecx,10H
                mov     ebx,dword ptr [ebx+4]
                mov     ax,4200H
                int     21H
                pop     ebx
                lea     edx,[ebx+20h]
                mov     ecx,dword ptr [ebx+10h]
                test    dword ptr [ebx],00000001H
                push    ebx
                mov     ebx,dword ptr [ebx+4]
                je      short L52
                push    edi
                sub     esp,00000032H
                mov     edi,esp
                mov     dword ptr [edi+1ch],00004000H
                mov     dword ptr [edi+10h],ebx
                mov     dword ptr [edi+18h],ecx

				mov	WORD PTR [edi+20h],0			

                mov     eax,edx
                and     eax,0000000fH
                mov     dword ptr [edi+14h],eax
                shr     edx,04H
                mov     word ptr [edi+24h],dx
                mov     bl,21H
                mov     ax,0ff01H
                int     31H
                mov     eax,dword ptr [edi+1ch]
                movzx   eax,ax
                rcr     word ptr [edi+20h],1
                lea     esp,[esp+32h]
                pop     edi
                jmp     short L53
L52:            mov     ah,40H
                int     21H
L53:            pop     ebx
                jb      short L54
                and     dword ptr [ebx],0fffffffdH
                mov     dword ptr [ebx+10h],00000000H
                mov     eax,dword ptr [ebx+8]
                mov     dword ptr [ebx+0ch],eax
                xor     eax,eax
                mov     dword ptr _FIOError,eax
                jmp     short L55
L54:            mov     dword ptr _FIOError,eax
L55:            pop     edx
                pop     ecx
L56:            pop     ebx
                ret     
                nop     
_TEXT           ENDS

_DATA           SEGMENT DWORD PUBLIC USE32 'DATA'
                PUBLIC  FIOBufferSize 
                PUBLIC  _FIOBufferSize 
                PUBLIC  FIOError 
                PUBLIC  _FIOError 
                PUBLIC  REDOpenFile 
FIOBufferSize	LABEL	BYTE
_FIOBufferSize  DB      00H,08H,00H,00H
FIOError		LABEL BYTE
_FIOError       DB      00H,00H,00H,00H
REDOpenFile     DD      DummyRET
_DATA           ENDS

                END

⌨️ 快捷键说明

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