Assembly MASM32局部变量?

Assembly MASM32局部变量?,assembly,x86,masm,masm32,Assembly,X86,Masm,Masm32,我需要帮助了解MASM32本地宏。我知道局部变量被推到堆栈中。但是,我尝试使用它们来存储临时值。下面是一个简短的片段 FormatError PROC USES EBX ECX LOCAL NumComma:DWORD, NumPeriod:DWORD 。 . 。而ecx

我需要帮助了解MASM32本地宏。我知道局部变量被推到堆栈中。但是,我尝试使用它们来存储临时值。下面是一个简短的片段

FormatError PROC USES EBX ECX
LOCAL NumComma:DWORD, NumPeriod:DWORD
。 .

。而ecx
EBX=004059B5h ECX=7EFDE000h

没有4217269(004059B5h)逗号。并且没有2130567168(7EFDE000h)周期。。。 它们似乎都不是有任何价值的地址。。。真的不知道如何包含局部变量

旁注: 编程程序集有点新…

如果要使用局部(堆栈)变量,则必须初始化它。所以你应该这样做:

xor eax, eax
mov NumPeriod, eax
mov NumComma, eax

如果您使用的是来自
BSS
数据
段的变量,它们是预初始化的,但是调用函数时堆栈变量的值与堆栈上发生的值相同。

您的问题是什么?只是更改了问题,抱歉,有点匆忙。。。作业3小时后到期。。。哈哈,发现MASM只是纯粹的邪恶。。。当您使用本地宏时,它也会为您设置堆栈帧。。。这很好,除非你想设置它!!!!邪恶的。。。但是,你可能会帮我节省时间。。。还是因为我不知道它们必须初始化是的,当您使用局部变量或参数时,MASM将自动与您一起创建stackframe。这就是为什么发布完整的代码示例总是很好的原因。如果你发布一个片段,你可能会错过重要的部分,我们当然不知道是什么错了。还请记住,如果让masm为您设置stackframe,则必须使用
ret
而不是
retn
,否则StackeName不会自动销毁,因为在这种情况下,masm也会生成尾声。然后不要在masm中使用PROC和ENDP。在这种情况下,您不会失去对源代码的控制:)。
xor eax, eax
mov NumPeriod, eax
mov NumComma, eax