改变sp的时候,内存中栈段的数据也会改变?
stack segmentdw 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段中内存就有变化了,为什么?抱歉还没有权限上传内存的截图。
定义栈段就是向系统要内存空间,系统会根据当前情况给你分配定义的内存空间,系统在分配内存空间时是浮动的,说白了就是第一次可能分a段给你,下次同一个程序可能会分配b段给你,所以你在查看内存时要清楚当前是哪儿一段内存 问题是我发现只要不改变sp寄存器的值,定义好的ss段空间内的数据就不会改变,一旦改变sp,下一步就会发现栈空间内有变化了,比如本例中的16个字节的0中有些被改变了。因为是我定义好的栈段,所以这样的变化是不是不安全?问题出在哪里?求解释 看来有个出栈问题你没理解。比如,把1234h压入栈,之后再pop出来,其实pop 的时候并不是真正的把1234h从栈里拿了出来,pop实际上是把栈的内容复制出来的,所以即使你执行pop 后原来的栈内存单元中的数据还是存在的,只是栈指针向下指了而已 {:10_256:}{:10_256:}
页:
[1]