;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;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