Смешивание переменных при загрузке одного из них
Я пытаюсь написать простую программу на MASM, и я заметил, что моя программа смешивает переменные во время загрузки одного из них.
Вот простой пример:
.386
.model FLAT, STDCALL
option casemap:none
include \masm32\include\masm32rt.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
buffer2 db "34"
buffer1 db "60"
.data?
number1 dd ?
number2 dd ?
.code
start:
invoke atodw, offset buffer1
mov number1, eax; ;Here eax=60 so it's ok
invoke atodw, offset buffer2
mov number2, eax ;but here eax=3460
invoke ExitProcess, 0
end start
Что еще интереснее, я могу изменить эти значения просто, переключив порядок переменных в разделе.data, и тогда я увижу (1)eax=6034 и (2)eax=34
Поэтому мой вопрос: что я делаю не так и как это исправить?
1 ответ
Решение
"Строка" означает, что в MASM32 SDK всегда строка с нулевым символом в конце. Ассемблер не распознает строку в кавычках как строку с нулевым окончанием, это просто последовательность символов для него.
Все, что я удалил, не было нужно - masm32rt.inc
делает все это:
include \masm32\include\masm32rt.inc
.data
buffer2 db "34",0
buffer1 db "60",0
.data?
number1 dd ?
number2 dd ?
.code
start:
invoke atodw, offset buffer1
mov number1, eax; ;Here eax=60 so it's ok
printf ("number1: %d\n",[number1])
invoke atodw, offset buffer2
mov number2, eax ;but here eax=3460
printf ("number2: %d\n",[number2])
invoke ExitProcess, 0
end start
Извините, я не понял второй вопрос.