我似乎无法在x86中解决这个问题。该程序不断崩溃,我的书说我可以使用[reg]插入内存,只要reg在内存中保存一个位置:
.data
Counter BYTE 4;
Prompt BYTE "Enter an Integer: ", 0
UserInput DWORD 10 DUP(?)
.code
PromptUser PROC
mov edx, OFFSET Prompt
call WriteString
ret
PromptUser ENDP
ReadUserInput PROC
mov edx, OFFSET UserInput
add edx, DWORD PTR Counter
call ReadInt
mov [edx], eax //ISSUE IS HERE
即使我在调用ReadInt后移动了movs,它仍然无效。
答案 0 :(得分:4)
这不会很好地结束:
Counter BYTE 4
add edx, DWORD PTR Counter
您只有一个byte
,但您将其视为dword
。您最终不仅会添加Counter
的值,还会添加Prompt
字符串的前3个字节。
最简单的解决方案是Counter
为dword
。如果你必须保持一个字节,你可以做类似的事情:
movzx eax, BYTE PTR Counter
add edx,eax