如果在程序中突然用到栈,是否需要回去定义一段内存为栈空间
我们前面学习栈的时候,在程序的开始都单独定义一段内存为栈,sp指针指向它的底部,但我看到有些程序一开始并没有定义栈空间,一样用到了push和pop,我想是不是cpu在看到push的时候可以自己临时定义一段内存为栈? 本帖最后由 yundi 于 2016-1-18 13:57 编辑
做题时也想到同样的问题了,然后测试了一下,结果如下:
程序ds:00指向起始位置,cs:00指向入口位置,用户没定义栈的时候,默认(ss)=cs,(sp)=0也指向入口位置.入栈时(sp)=(sp)-2=(0-2)=FFFE,第一个保存的位置是ss:FFFE
{:10_250:}{:10_250:}怎么没人回答俺呀 我赌5毛你说的是实验10.1的答案里没设栈对吧= = 调试时看ss值,它会告诉你用的栈在哪里。 push ax
等价于
sub sp, 2
mov ss:, ax
你push的时候 是往栈空间里存数据 sp指针先自减 腾出个空间, 然后把数据 存到栈顶指针里
如果你定义的栈非常小 比如只有16个字节 而此时push的数据已经超过了第16个字节 那么这就是传说中的堆栈溢出了 ryxcaixia 发表于 2016-1-18 08:32
push ax
等价于
sub sp, 2
额,我想他应该说的是为何实验10.1的答案中没有定义栈就可以push和pop ufo9876 发表于 2016-1-17 19:45
怎么没人回答俺呀
如果是实验10.1答案那样我想应该放在了是call时cpu自定义的栈里了吧,纯个人见解= = 本帖最后由 ufo9876 于 2016-1-21 19:34 编辑
系统本身有默认的地方放栈的··就是ss:sp,和cs:ip一样。 {:10_256:}{:10_256:}包括call指令等与栈有关的指令使用时其实都不用定义栈空间的哦。。原来是这样
页:
[1]