加载其中一个时变量混合

variables mixing when loading one of them

我试图在 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

所以我的问题是:我做错了什么以及如何解决?

A "string" 意味着在 MASM32 SDK 中总是一个 null-terminated 字符串。汇编程序不会将引号中的字符串识别为以 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

对不起,我没看懂第二个问题