加载其中一个时变量混合
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
对不起,我没看懂第二个问题
我试图在 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
对不起,我没看懂第二个问题