收集的两段代码
来源:互联网 发布:涂师傅数据恢复软件 编辑:程序博客网 时间: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
- 收集的两段代码
- 收集的一些JS的代码段
- 关于Rational的两段代码
- 递归入门的两段代码
- 两段代码。。。
- 两段Linux代码
- ASP两段常用代码
- 两段代码异同分析
- 两段代码的效率相差甚远!!
- 关于Desktop和SystemTray应用的两段代码
- ant 内用于下载依赖的两段代码
- 关于(Unicode,UTF8) 汉字内码转换的两段代码
- 简单,但是非常有趣的两段c代码!
- 两段简单的JS代码防止SQL注入
- 遵循Android Layout优化的两段通用代码
- 两段简单的JS代码防止SQL注入
- 常用代码段收集--压缩、解压
- 陈灯可重用代码段管理器桌面版2.5发布(个人代码库,代码收集器)+ 陈灯保存的代码段超200条
- 搞软件的容易上太空
- 2006-09-26关于数据安全
- Rational Rose 逆向工程(java) 常见问题二则
- ASP.NET 入门标准
- HashTable和HashMap的区别
- 收集的两段代码
- text
- SCIM输入法架构分析
- Web 窗体介绍
- 程序员的灯下黑:重知识轻技术
- Sniffer简介
- dataGridView使用模版列
- ASP 二进制与字符串互转, 另类完美解决方法, adodb.stream 实现 By shawl.qiu
- 进入Web 2.0时代-2006 Sun科技日