汇编语言中,出栈后 出栈的那个数值在栈中会被清零吗?

我觉得会被清零的,但是书上的出栈过程却没有清零,怎么回事?我是新手,越详细越好。

    不会被清零。

汇编语言中,出栈是通过POP指令来实现的,首先看一下Intel手册中对于pop指令的描述:

大致意思如下:Pop指令从栈顶加载值到目标操作数指定的位置,然后增加栈顶指针。目标操作数可以是一个通用寄存器,内存位置或者段寄存器。

可以看到,手册中并没有提到出栈后Pop要清空原有位置的值。因为这是不必要的,正常使用栈的话,出栈后那个位置的数值对栈没有影响,在栈增长后,那个位置可能会被新的值覆盖掉(即通过Push压栈),所以没有必要清空它。而且,处理器和指令集设计的时候,必然会十分注重效率,不会做多余的事情,清不清零对栈的使用完全没有影响,所以设计师当然也不会让pop做这件事。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-26
汇编语言中,出栈后 出栈的那个数值在栈中 不会 被清零,
但是 如果有 新的 压栈操作(入栈),会被新的数据替代。本回答被提问者采纳
第2个回答  2015-11-18
汇编语言中,出栈后 出栈的那个数值在栈中 不会 被清零,
但是 如果有 新的 压栈操作(入栈),会被新的数据替代。
第3个回答  2015-10-01
出栈后 出栈的那个数值在栈中不会被清零 只是sp-1指向上一个栈地址了
第4个回答  2013-04-26
不会,是原封不动的,所以说自动变量总是一个随机值,你每次声明一个自动变量,栈指针就会增加,新变量的值实际上是上一次使用该内存的变量值。。。
相似回答