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

在第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,而不是减去。他们从哪里得到减法?我错过了什么?我很困惑......

非常感谢帮助;)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值