mov [reg], reg не работает

Я не могу понять это в 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

Даже если я переместлю movs после вызова ReadInt, он все равно не будет работать.

1 ответ

Решение

Это не закончится хорошо

Counter BYTE 4
add edx, DWORD PTR Counter

У вас есть только byte, но вы относитесь к этому, как будто это было dword, В конечном итоге вы добавите не только значение Counter, но первые 3 байта Prompt Строка также.

Самое простое решение - сделать Counter dword, Если вам абсолютно необходимо сохранить его в байте, вы можете сделать что-то вроде:

movzx eax, BYTE PTR Counter
add edx,eax
Другие вопросы по тегам