mov [reg],reg不工作

时间:2014-06-17 03:23:59

标签: assembly x86 mov

我似乎无法在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,它仍然无效。

1 个答案:

答案 0 :(得分:4)

这不会很好地结束:

Counter BYTE 4
add edx, DWORD PTR Counter

您只有一个byte,但您将其视为dword。您最终不仅会添加Counter的值,还会添加Prompt字符串的前3个字节。

最简单的解决方案是Counterdword。如果你必须保持一个字节,你可以做类似的事情:

movzx eax, BYTE PTR Counter
add edx,eax