S_18 发表于 2013-7-20 19:36:55

汇编一个小小的问题 我是新手!

为什么SP后面是2 而不是0啊。

遗忘c年华 发表于 2013-7-20 19:36:56

本帖最后由 遗忘c年华 于 2013-7-20 21:45 编辑

棧可以理解为我们暂时存放东西的罐子,东西放进去,慢慢地堆满上来。棧在哪里?棧就是我们从内存地址中抽取一段没有被使用过的内存单元作为我们临时储存的罐子。
我们看内存单元地址是线性存在的,就像一条线,从上往下,从大到小排列,就像这样:
(地址)

00
01
02
03(罐子口)→棧顶
04   。。。。。。。。
05   。。。。。。。。
06   。。。。。。。。
07   。。。。。。。。
08   。。。。。。。。
09(罐子底部)→棧底
10

由于我们存东西进罐子是从罐子底部(棧底)慢慢地慢慢地存到罐子口(棧顶),所以正如你所看到的,为什么我们的棧底是大地址,棧顶是小地址了,明白了吧。

Dardy 发表于 2013-7-20 19:53:56

不要纠结什么前面后面,压栈是从大地址开始,而出栈是从小地直开始。
初始化空栈时,sp指向栈底,即大地址的地方。

S_18 发表于 2013-7-21 01:51:37

遗忘c年华 发表于 2013-7-20 21:42 static/image/common/back.gif
棧可以理解为我们暂时存放东西的罐子,东西放进去,慢慢地堆满上来。棧在哪里?棧就是我们从内存地址中抽取 ...

这个我知道 ,但是 SP 后面的不应该是0吗?怎么是2啊?

遗忘c年华 发表于 2013-7-21 02:18:22

S_18 发表于 2013-7-21 01:51
这个我知道 ,但是 SP 后面的不应该是0吗?怎么是2啊?

因为push运算是先要sp-2,再存入数据的懂了吗?pop指令整好相反,多看看几次视频教程的动画演示吧!

小甲鱼 发表于 2013-7-21 03:56:13

因为push ax是要往栈压入新数据,那么栈需要腾出空间,所有mov sp, 2,这样子的话push压栈就有2个空间可以用来存放ax的内容啦,原理就像我们玩的盖楼游戏,有了新住户,可是楼层已经住满,那么要做就是继续往上盖楼,新住户就可以有地方住啦~楼主应该是想问这个吧?

S_18 发表于 2013-7-21 13:37:50

小甲鱼 发表于 2013-7-21 03:56 static/image/common/back.gif
因为push ax是要往栈压入新数据,那么栈需要腾出空间,所有mov sp, 2,这样子的话push压栈就有2个空间可以用 ...

谢谢小甲鱼老师 我知道了。

S_18 发表于 2013-7-21 13:38:42

遗忘c年华 发表于 2013-7-21 02:18 static/image/common/back.gif
因为push运算是先要sp-2,再存入数据的懂了吗?pop指令整好相反,多看看几次视频教程的动画演示吧!

恩 我知道了 谢谢

S_18 发表于 2013-7-21 14:23:43

小甲鱼 发表于 2013-7-21 03:56 static/image/common/back.gif
因为push ax是要往栈压入新数据,那么栈需要腾出空间,所有mov sp, 2,这样子的话push压栈就有2个空间可以用 ...

小甲鱼老师 请问 哪里有MASM 6.1和UE下载 我的U盘还没到货 想提前学习

小甲鱼 发表于 2013-7-21 15:44:44

S_18 发表于 2013-7-21 14:23 static/image/common/back.gif
小甲鱼老师 请问 哪里有MASM 6.1和UE下载 我的U盘还没到货 想提前学习

MASM5.0和6.15两个版本都很稳定:http://blog.fishc.com/602.html

UE百度下,很多地方有最新版本。

另外问题如果解决了,麻烦设置下最佳答案以及将题目分类设置为【已经解决】~
页: [1]
查看完整版本: 汇编一个小小的问题 我是新手!