Смешивание переменных при загрузке одного из них

Я пытаюсь написать простую программу на 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

Извините, я не понял второй вопрос.

Другие вопросы по тегам