Assembly 程序集x86 MASM,读取字符串问题

Assembly 程序集x86 MASM,读取字符串问题,assembly,masm,irvine32,Assembly,Masm,Irvine32,输出: 欢迎来到克里斯的整数累加器 你的名字叫什么?克里斯 你好,你好 由于readstring出现问题,它正在打印第二个“Hello here”,而不是“Chris”。我已经把我的课本读了好几遍了,但它对我来说并不合适 如果您能提供任何解释,我们将不胜感激,谢谢 .data buffer DWORD 30 DUP (0) greetingTitle BYTE "Welcome to the Integer Accumulator by

输出:

欢迎来到克里斯的整数累加器 你的名字叫什么?克里斯 你好,你好

由于readstring出现问题,它正在打印第二个“Hello here”,而不是“Chris”。我已经把我的课本读了好几遍了,但它对我来说并不合适

如果您能提供任何解释,我们将不胜感激,谢谢

.data

buffer              DWORD 30 DUP (0)

greetingTitle       BYTE    "Welcome to the Integer Accumulator by chris",0
greetingName        BYTE    "What is your name? ",0
userName            DWORD   ?
userGreeting        BYTE    "Hello there, ",0

.code
main PROC

; introduction

    ;prints title and asks for user name
    mov     EDX, OFFSET greetingTitle
    call    WriteString
    call    CrLf
    mov     EDX, OFFSET greetingName
    call    WriteString

    mov     EDX, OFFSET buffer
    mov     ECX, SIZEOF buffer
    call    ReadString
    mov     userName, EAX

    mov     EDX, OFFSET userGreeting
    call    WriteString
    mov     EAX, OFFSET userName
    call    WriteString
    call    CrLf
如果要访问,数据将保存在缓冲区中

mov EDX, OFFSET buffer
mov ECX, SIZEOF buffer
call ReadString

如果您想在eax寄存器中使用它,您应该使用一个循环,并使用rol在每个循环中传递4个字符。

ReadString
可能会将名称放入
缓冲区,因为这就是您传递的。您应该打印它,而不是可能包含长度的
userName
(假设
ReadString
eax
中返回该长度)。
mov edx, offset buffer
call writestring