Assembly 加载其中一个变量时变量混合

Assembly 加载其中一个变量时变量混合,assembly,masm,masm32,Assembly,Masm,Masm32,我试着用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"

我试着用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

所以我的问题是:我做错了什么以及如何修复它?

在MASM32 SDK中,“字符串”意味着总是以空结尾的字符串。汇编程序不会将引号中的字符串识别为以null结尾的字符串,它只是一个字符序列

我删除的内容都是不需要的-
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
很抱歉,我没有理解第二个问题。

在MASM32 SDK中,“字符串”意味着总是以null结尾的字符串。汇编程序不会将引号中的字符串识别为以null结尾的字符串,它只是一个字符序列

我删除的内容都是不需要的-
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
对不起,我不明白第二个问题