加载其中一个时变量混合

时间:2017-06-08 12:44:08

标签: 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"

.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 个答案:

答案 0 :(得分:0)

“字符串”表示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

对不起,我不明白第二个问题。