2

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

cmp [buffer + ecx], 30h

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

4

2 回答 2

2

这行得通吗?

cmp BYTE PTR [buffer + ecx], 30h

要将 BYTE 提取为 DWORD,您可以执行以下操作:

mov EAX, 0
mov AL, [pointer]

甚至更好(感谢马丁):

movzx EAX, [pointer]
于 2010-03-13T00:39:19.377 回答
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

这就是我需要做的。

于 2010-03-13T00:54:35.850 回答