在Masm读一个BYTE作为DWORD

时间:2010-03-12 23:45:34

标签: assembly masm irvine32

我再次做MASM编程。我正在尝试使用Irvine32库编写一个过程,用户输入一个字符串,该字符串放入带有ReadString的BYTE数组中。然后它遍历该arrray并确定每个字符是否是数字。 但是,当我尝试

cmp [buffer + ecx], 30h

MASM抱怨比较两件尺寸不同的东西。无论如何,我可以将数组中每个BYTE中的ASCII码读取为DWORD(或以其他方式提取每个BYTE中的ASCII值)?

2 个答案:

答案 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

这就是我需要做的事情。