假设局部变量的初始值为零是否正确?

假设局部变量的初始值为零是否正确?

问题描述:

如果我有ASM呼叫过程:假设局部变量的初始值为零是否正确?

push ebp 
mov ebp esp 
sub ebp, 8 

我可以假设现在,无论[EBP-4]和[EBP-8]初始化为零,或者他们可以有随机值?

他们将有什么价值是在存储器之前,这是不太可能0。这本身不是“随机的” - 事实上,它可能有点可预测;这通常不会有什么好处,只是没有得到有关在使用它RNG :)

记住任何聪明的想法,你的代码所做的一切是:

  • 保存当前值EBP为[ESP]然后从ESP
  • 减去4复制ESP从EBP EBP
  • 减去8(你的意思是ESP?)

,CPU也不会读任何东西到这个除此之外,除非你告诉它。这是汇编程序的精髓。而且,在正常算术中使用时,ESP根本不是特别的 - 它只是一个数字。

+0

感谢spoting该子EBP,8。我真的以为是EBP:S。我现在正在阅读Barlet的80x86汇编语言和计算机体系结构程序介绍和堆栈章节,以便我终于明白堆栈是如何工作的。 – 2009-09-10 21:48:27

他们将随机值。

+0

嗯?为什么downvote?它回答了这个问题,并没有错。 – 2009-09-11 07:10:36

你不应该依赖于这个,因为这可能取决于执行。处于可预测状态时,始终以特定值初始化寄存器或存储单元。

他们肯定还会有随机值,除非你明确地对它们进行初始化。

+0

关键的原因:你所做的只是移动指针。你所做的任何事情都不会导致它们被归零。 – 2009-09-10 20:48:53