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