?? char.asm
字號:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Programmed by 羅云彬, bigluo@telekbird.com.cn
; Website: http://asm.yeah.net
; LuoYunBin's Win32 ASM page (羅云彬的編程樂園)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 公用子程序部分:通用部分
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_FillMemory proto :DWORD,:DWORD,:DWORD ;填充內存
_CopyMemory proto :DWORD,:DWORD,:DWORD ;拷貝內存
_GetStringValue proto :DWORD,:DWORD ;轉換字符串的值
_GetStringPoint proto :DWORD,:DWORD,:DWORD ;取字符串第N個參數開始指針
;********************************************************************
; 填充內存
; 參數:填充的地址,長度,填充的值
; 相同于:RtlFillMemory
;********************************************************************
_FillMemory proc _lpDest,_dwCount,_dwChar
pushad
mov edi,_lpDest
mov eax,_dwChar
mov ecx,_dwCount
cld
rep stosb
popad
ret
_FillMemory endp
;********************************************************************
; 拷貝內存
; 參數:目標地址,源地址,長度
; 相同于:RtlCopyMemory
;********************************************************************
_CopyMemory proc _lpDest,_lpSource,_dwCount
pushad
mov esi,_lpSource
mov edi,_lpDest
mov ecx,_dwCount
cld
rep movsb
popad
ret
_CopyMemory endp
;********************************************************************
; 轉換字符串的值
; 參數:字符串地址,進制(缺省為10進制)
; 返回:數值
;********************************************************************
_GetStringValue proc _lpString,_dwBase
local @dwValue
pushad
mov ebx,_dwBase
.if ebx == 0
mov ebx,10
.endif
xor eax,eax
mov esi,_lpString
_GSV_Loop:
mov cl,[esi]
inc esi
or cl,cl
jz _GSV_LoopEnd
cmp cl,20h
jz _GSV_Loop
cmp cl,'0'
jb _GSV_LoopEnd
cmp cl,'9'
ja _GSV_Check1
sub cl,'0'
jmp _GSV_CheckOK
_GSV_Check1:
or cl,20h
cmp cl,'a'
jb _GSV_LoopEnd
cmp cl,'f'
ja _GSV_LoopEnd
sub cl,'a'-10
_GSV_CheckOK:
movzx ecx,cl
cmp ecx,ebx
jae _GSV_LoopEnd
mul ebx
add eax,ecx
jmp short _GSV_Loop
_GSV_LoopEnd:
mov @dwValue,eax
popad
mov eax,@dwValue
ret
_GetStringValue endp
;********************************************************************
; 取字符串第N個參數開始指針
; 參數:字符串地址,第幾個參數,分隔符
; 返回:第N個參數指針
;********************************************************************
_GetStringPoint proc _lpString,_dwNumber,_dwChar
local @dwPoint
pushad
mov esi,_lpString
cld
mov ebx,_dwChar
xor ecx,ecx
inc ecx
cmp ecx,_dwNumber
jz _GSP_OK ;如果取第一個參數直接返回
_GSP_Loop:
lodsb
or al,al
jz _GSP_Error ;如果到字符串尾還沒有找到,出錯
cmp al,bl
jnz _GSP_Loop
inc ecx ;如果找到分隔符,記數加1
cmp ecx,_dwNumber
jnz _GSP_Loop
_GSP_OK:
lodsb
cmp al,20h ;去掉參數前的空格
jz _GSP_OK
dec esi
clc
jmp _GSP_Return
_GSP_Error:
stc
_GSP_Return:
mov @dwPoint,esi
popad
mov eax,@dwPoint
ret
_GetStringPoint endp
;********************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -