我试图在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
所以我的问题是:我做错了什么以及如何解决它?
答案 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
对不起,我不明白第二个问题。