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

📄 char.asm

📁 用汇编写的Http、ftp文件下载器
💻 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 + -