我再次做MASM编程。我正在尝试使用Irvine32库编写一个过程,用户输入一个字符串,该字符串放入带有ReadString的BYTE数组中。然后它遍历该arrray并确定每个字符是否是数字。 但是,当我尝试
时cmp [buffer + ecx], 30h
MASM抱怨比较两件尺寸不同的东西。无论如何,我可以将数组中每个BYTE中的ASCII码读取为DWORD(或以其他方式提取每个BYTE中的ASCII值)?
答案 0 :(得分:2)
这有用吗?
cmp BYTE PTR [buffer + ecx], 30h
要将BYTE提取为DWORD,您可以执行以下操作:
mov EAX, 0
mov AL, [pointer]
甚至更好(感谢Martin):
movzx EAX, [pointer]
答案 1 :(得分:0)
getData PROC
push ebp
mov ebp, esp
mov esi, [ebp + 12] ; offset of buffer
mov ebx, [ebp + 8] ; where to write answer
GETNUMBERSTRING:
mov edx, esi
mov ecx, BufferSize
mov eax, 0
call ReadString
mov ecx, eax ; set size to loop counter
cld
mov edx, 0
PROCESSSTRING:
lodsb
cmp al, 30h
jl WRONG
cmp al, 39h
jg WRONG
; add digit into total edx
sub al, 30h
push eax ; multiply edx by 10
push ecx
mov eax, edx
mov ecx, 10
mul ecx
mov edx, eax
pop ecx
pop eax
push ebx ; add to the total
movsx ebx, al
add edx, ebx
pop ebx
loop PROCESSSTRING
jmp DONE
WRONG:
call Crlf
stringWriterEndl invalid
jmp GETNUMBERSTRING
DONE:
mov [ebx], edx
pop ebp
ret 8
getData ENDP
这就是我需要做的事情。