鱼C论坛

 找回密码
 立即注册
查看: 3050|回复: 4

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

[复制链接]
发表于 2012-4-16 22:06:26 | 显示全部楼层 |阅读模式
1鱼币
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段中内存就有变化了,为什么?抱歉还没有权限上传内存的截图。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-4-16 22:29:56 | 显示全部楼层
定义栈段就是向系统要内存空间,系统会根据当前情况给你分配定义的内存空间,系统在分配内存空间时是浮动的,说白了就是第一次可能分a段给你,下次同一个程序可能会分配b段给你,所以你在查看内存时要清楚当前是哪儿一段内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-16 23:55:00 | 显示全部楼层
问题是我发现只要不改变sp寄存器的值,定义好的ss段空间内的数据就不会改变,一旦改变sp,下一步就会发现栈空间内有变化了,比如本例中的16个字节的0中有些被改变了。因为是我定义好的栈段,所以这样的变化是不是不安全?问题出在哪里?求解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-17 02:19:31 | 显示全部楼层
看来有个出栈问题你没理解。比如,把1234h压入栈,之后再pop出来,其实pop 的时候并不是真正的把1234h从栈里拿了出来,pop实际上是把栈的内容复制出来的,所以即使你执行pop 后原来的栈内存单元中的数据还是存在的,只是栈指针向下指了而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-15 08:05:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 22:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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