鱼C论坛

 找回密码
 立即注册
查看: 2981|回复: 10

如果在程序中突然用到栈,是否需要回去定义一段内存为栈空间

[复制链接]
发表于 2016-1-16 19:13:48 | 显示全部楼层 |阅读模式
10鱼币

我们前面学习栈的时候,在程序的开始都单独定义一段内存为栈,sp指针指向它的底部,但我看到有些程序一开始并没有定义栈空间,一样用到了push和pop,我想是不是cpu在看到push的时候可以自己临时定义一段内存为栈?

最佳答案

查看完整内容

做题时也想到同样的问题了,然后测试了一下,结果如下: 程序ds:00指向起始位置,cs:00指向入口位置,用户没定义栈的时候,默认(ss)=cs,(sp)=0也指向入口位置.入栈时(sp)=(sp)-2=(0-2)=FFFE,第一个保存的位置是ss:FFFE
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-16 19:13:49 | 显示全部楼层
本帖最后由 yundi 于 2016-1-18 13:57 编辑

做题时也想到同样的问题了,然后测试了一下,结果如下:

程序ds:00指向起始位置,cs:00指向入口位置,用户没定义栈的时候,默认(ss)=cs,(sp)=0也指向入口位置.入栈时(sp)=(sp)-2=(0-2)=FFFE,第一个保存的位置是ss:FFFE
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-17 19:45:05 | 显示全部楼层
怎么没人回答俺呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-17 22:44:59 | 显示全部楼层
我赌5毛你说的是实验10.1的答案里没设栈对吧= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-17 23:46:19 From FishC Mobile | 显示全部楼层
调试时看ss值,它会告诉你用的栈在哪里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-18 08:32:05 | 显示全部楼层
push ax
等价于
sub sp, 2
mov ss:[sp], ax

你push的时候 是往栈空间里存数据 sp指针先自减 腾出个空间, 然后把数据 存到栈顶指针里
如果你定义的栈非常小 比如只有16个字节 而此时push的数据已经超过了第16个字节 那么这就是传说中的堆栈溢出了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-18 10:38:16 | 显示全部楼层
ryxcaixia 发表于 2016-1-18 08:32
push ax
等价于
sub sp, 2

额,我想他应该说的是为何实验10.1的答案中没有定义栈就可以push和pop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-18 10:42:51 | 显示全部楼层
ufo9876 发表于 2016-1-17 19:45
怎么没人回答俺呀

如果是实验10.1答案那样我想应该放在了是call时cpu自定义的栈里了吧,纯个人见解= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-1-18 22:54:17 | 显示全部楼层
本帖最后由 ufo9876 于 2016-1-21 19:34 编辑


2345截图20160118224909.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-17 16:21:42 | 显示全部楼层
系统本身有默认的地方放栈的··就是ss:sp,和cs:ip一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-24 11:08:25 | 显示全部楼层
包括call指令等与栈有关的指令使用时其实都不用定义栈空间的哦。。原来是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 22:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表