2013-11-22 93 views
1

我需要帮助理解MASM32本地宏。我知道LOCAL变量被推入堆栈。但是,我试图用它们来存储一个临时值。这是一个快速的片段。MASM32局部变量?

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

。 。 。

.WHILE ecx < eax 
    mov bl, [edx + ecx] 
    .IF bl == "," 
     inc [NumComma] 
    .ELSEIF bl == "." 
     inc [NumPeriod] 
    .ENDIF 
    inc ecx 
.ENDW 

mov ebx, [NumComma] 
mov ecx, [NumPeriod] 

EBX = 004059B5h ECX = 7EFDE000h

有不4217269(004059B5h)逗号。并没有2,130,567,168(7EFDE000h)期间... 他们似乎都不是具有任何价值的地址......真正失去了如何增加局部变量。

侧面说明: 还挺新的编程大会...

+0

你的问题是什么? – Aaron

+0

只是改变了问题,对不起,有点急......在3小时内完成作业......哈哈 – NateAGeek

回答

2

本地(栈)变量亩TBE如果你打算使用它初始化。所以,你应该做的服用点是这样的:如果你正在使用从BSSDATA段变量

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

,他们预先初始化,但堆栈变量有什么恰好是栈,当该功能被称为值。

+3

发现MASM只是纯粹的邪恶......当你使用LOCAL宏时,它也为你设置了堆栈框架。 ..这很好除了当你想要设置它! 邪恶......纯粹的邪恶 – NateAGeek

+0

然而,你可能会节省我的时间...仍然因为我不知道他们必须被引用 – NateAGeek

+0

是的,当你使用本地或参数,MASM会自动创建你的堆栈。这就是为什么发布代码的完整样本总是很好的原因。如果您发布了一段代码,您可能会错过重要的部分,我们当然不知道最新的错误。请记住,如果你让masm为你设置堆栈,你必须使用'ret'而不是'retn',否则stackframe不会被自动销毁,因为MASM在这种情况下也会产生结尾。 – Devolus