📄 h2dw.asm
字号:
H2DW PROTO :DWORD
h2dw equ <H2DW>
.code
H2DW proc uses ecx edx esi edi lpszHexString:DWORD
;---------------------------------------------
;作用:将十六进制字符'"串转换为十进制数字
;传入值:字符串的地址
;反回值:转换后的;"数值,在eax里
;如果字符中包含了非十六进制字符串,返回值为0(h,H结尾则忽略)
;------------------------------------------------
mov esi,lpszHexString
push esi
xor ecx,ecx
;求出字符串的长度
@@:
lodsb
inc ecx
cmp al,0
jnz @B
;忽略最后的h或H
cmp BYTE ptr [esi-2],'h'
je @1
cmp BYTE ptr [esi-2],'H'
jne @2
@1:
mov BYTE ptr [esi-2],0
dec ecx
@2:
dec ecx;减去字符串中0的长度
dec ecx;计算时是以0为下界的
lea ecx,[ecx*4] ;最高项,如四位数最高16^3=2^(3*4) [^表示乘方]
xor edx,edx
pop esi
_nextchar_:
lodsb
cmp al,'a'
jb @F
cmp al,'f'
ja _error_
sub al,'a'-10
jmp _calc_
@@:
cmp al,'A'
jb @F
cmp al,'F'
ja _error_
sub al,'A'-10
jmp _calc_
@@:
cmp al,'0'
jb _error_
cmp al,'9'
ja _error_
sub al,'0'
_calc_:
movzx eax,al
shl eax,cl
add edx,eax
sub cl,4
jge _nextchar_
mov eax,edx
jmp _ret_;直接用ret会导致多出几行pop
_error_:
xor eax,eax
_ret_:
ret
H2DW endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -