收集的两段代码

来源:互联网 发布:涂师傅数据恢复软件 编辑:程序博客网 时间:2024/05/16 18:03

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;AoGo快排代码
;invoke QuickSort,1,iCount,左边索引必须是1.不能是0.所以...快排时第一个单词排不到
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
QuickSort proc uses esi edi,lpListMem,iLeft,iRight
mov ebx,lpListMem                                    ;ebx=字符串数组地址
mov esi,iLeft                                       ;esi=左边索引;
mov edi,iRight                                       ;edi=右边索引;
mov edx,esi                                          ;
add edx,edi                                          ;
shr edx,1                                          ;edx=ebx[(esi+edi)/2]; 从中间选取的参照
mov edx,DWORD ptr [ebx+edx*4]                        ;
;===================================================
@CF:
   @@:
   invoke _stricmp,DWORD ptr [ebx+esi*4],edx         ;从左到右找比[edx]大的元素
   .if SDWORD ptr eax<0 && esi<iRight
      inc esi
      jmp @B
   .endif
   @@:
   invoke _stricmp,DWORD ptr [ebx+edi*4],edx         ;从右到左找比[edx]小的元素
   .if SDWORD ptr eax>0 && edi>iLeft
      dec edi
      jmp @B
   .endif
   .if esi<=edi                                    ;
      mov eax,DWORD ptr [ebx+esi*4]                  ;
      mov ecx,DWORD ptr [ebx+edi*4]                  ;
      mov DWORD ptr [ebx+esi*4],ecx                  ;若找到且满足条件,则交换并且继续
      mov DWORD ptr [ebx+edi*4],eax                  ;
      inc esi                                       ;
      dec edi                                       ;
      jmp @CF                                       ;
   .endif
   .if esi<iRight                                    ;
      invoke QuickSort,ebx,esi,iRight         ;继续排左边
   .endif                                          ;
   ;------------------------------------------------
   .if edi>iLeft                                    ;
      invoke QuickSort,ebx,iLeft,edi         ;继续排右边
   .endif                                          ;
ret
QuickSort endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;读文本最后一行
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ReadFileLine    proc    uses esi edi _szFileName,_lpAddress
    local    @hFile,@dwSize
    local    @dwFileEnd,@dwSeekEnd
    local    @hFileMap,@lpMemory
    local    @lpLineMemory
    local    @szTemp[32]:BYTE
   
        invoke RtlZeroMemory,addr @szTemp,sizeof @szTemp
   
   
        invoke CreateFile,_szFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL
        .if eax != INVALID_HANDLE_VALUE
            mov @hFile,eax
        .else
            invoke _HandleError,NULL,_szFileName
            xor eax,eax
            ret
        .endif
        invoke GetFileSize,@hFile,NULL
        mov @dwSize,eax
       
       
        invoke CreateFileMapping,@hFile,NULL,PAGE_READONLY,NULL,NULL,NULL
        .if eax
            mov @hFileMap,eax
        .else
            invoke _HandleError,NULL,_szFileName
            invoke CloseHandle,@hFile
            ret
        .endif
        invoke MapViewOfFile,@hFileMap,FILE_MAP_READ or FILE_MAP_COPY,NULL,NULL,NULL
        .if eax
            mov @lpMemory,eax
        .else
            invoke CloseHandle,@hFileMap
            invoke _HandleError,NULL,_szFileName
            ret
        .endif
       
        mov esi,@lpMemory
        mov edi,@lpMemory
       
        mov @dwSeekEnd,0       
       
        .while    @dwSize
            xor eax,eax
            .while ax != 0a0dh
                    dec @dwSize
                    .break .if !@dwSize
                    xor eax,eax
                    mov ax,WORD ptr [esi]
                    inc esi
                    inc @dwSeekEnd
            .endw
           
            invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,@dwSeekEnd
            .if eax
                mov @lpLineMemory,eax
            .else
                invoke _HandleError,NULL,NULL
                ret
            .endif
            dec @dwSeekEnd
            invoke RtlMoveMemory,@lpLineMemory,edi,@dwSeekEnd
            push @lpLineMemory
            call _lpAddress
           
            invoke GlobalFree,@lpLineMemory
            inc esi
            mov edi,esi
            mov @dwSeekEnd,0
        .endw
       
        invoke UnmapViewOfFile,@lpMemory
        invoke CloseHandle,@hFileMap
        invoke CloseHandle,@hFile
        xor eax,eax
   
   
    ret
_ReadFileLine    endp

;处理返行文本程序

_LineText    proc    _szText
   
    invoke MessageBox,0,_szText,0,MB_OK
    ret
_LineText    endp 

原创粉丝点击