Assembly 加载其中一个变量时变量混合
我试着用MASM编写简单的程序,我注意到我的程序在加载一个变量时混合了变量 下面是一个简单的例子: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"
.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
对不起,我不明白第二个问题