清风居士2013 发表于 2012-4-16 22:06:26

改变sp的时候,内存中栈段的数据也会改变?

stack segment
dw 0,0,0,0,0,0,0,0
stack ends
a segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,4c00h
int 21h
a ends
end start写了一段代码,发现单步执行到第6行时候,查看ss段中的内存还是所设置的8个字的0,再执行一布,发现ss段中内存就有变化了,为什么?抱歉还没有权限上传内存的截图。

俟过近牵 发表于 2012-4-16 22:29:56

定义栈段就是向系统要内存空间,系统会根据当前情况给你分配定义的内存空间,系统在分配内存空间时是浮动的,说白了就是第一次可能分a段给你,下次同一个程序可能会分配b段给你,所以你在查看内存时要清楚当前是哪儿一段内存

清风居士2013 发表于 2012-4-16 23:55:00

问题是我发现只要不改变sp寄存器的值,定义好的ss段空间内的数据就不会改变,一旦改变sp,下一步就会发现栈空间内有变化了,比如本例中的16个字节的0中有些被改变了。因为是我定义好的栈段,所以这样的变化是不是不安全?问题出在哪里?求解释

俟过近牵 发表于 2012-4-17 02:19:31

看来有个出栈问题你没理解。比如,把1234h压入栈,之后再pop出来,其实pop 的时候并不是真正的把1234h从栈里拿了出来,pop实际上是把栈的内容复制出来的,所以即使你执行pop 后原来的栈内存单元中的数据还是存在的,只是栈指针向下指了而已

冲啊大笼包 发表于 2016-11-15 08:05:45

{:10_256:}{:10_256:}
页: [1]
查看完整版本: 改变sp的时候,内存中栈段的数据也会改变?