计算机语言里的堆栈是什么意思,计算机堆栈和Assemly语言

在第53页,计算机的堆栈的工作方式进行了说明:

计算机的堆栈住在记忆的最顶端 地址。您可以通过名为pushl的 指令将值压入堆栈顶部。 [...]嗯,我们说它是最高的,但堆栈的“顶部”实际上是堆栈内存的底部。 [...]在内存中,由于架构考虑,堆栈从 内存的顶部开始并向下增长。因此,当我们提到“堆栈顶部”时,请记住它位于堆栈底部的 内存中。

这部分我得到。假设堆栈的内存从地址0开始并在地址11结束(包含)。这意味着堆栈上目前有三个字(每个字节4个字节)。根据我的理解,堆栈顶部的单词当前占用地址8,9,10和11.(因为一个单词有4个字节,因此占用主内存中的四个存储位置)。但是,本书现在说明如下:

堆栈寄存器%esp始终包含一个指向堆栈当前顶端的指针。

好的,在我的例子中,%esp寄存器将保存地址8.它指向当前位于堆栈顶部的单词。但是......

每次我们的东西推到堆栈中有pushl,ESP%得到了4,使其指向堆栈的顶新(记住减去,每个字是四个字节长,堆栈向下增长)。

什么?这不正是其他方式吗?如果我将另一个4字节大小的机器字压入堆栈,这个字将占用主存储器地址12至15.就像他们所说的:堆栈向下增长。现在%esp寄存器指向当前位于堆栈顶部的单词。它从地址12开始。在我们将另一个单词放入堆栈之前,存储在%esp中的地址是8.因此%esp显然已被添加4,而不是相减。他们从哪里得到减法?我错过了什么?我很迷茫......

帮助是非常赞赏;)

+0

“成长向下”仅仅意味着减法。 12 - 4 = 8,ESP得到一个较低的值,然后你推动堆栈上的东西。只要站在你的头上,一切都看起来很正常。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值