鱼C论坛

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

[已解决]向栈段存了16个字节型的1, 查看却发现并不全是01

[复制链接]
发表于 2022-7-5 21:09:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
  1. assume cs: codesg, ss: stack

  2. stack segment
  3.     db 16 dup(1)
  4. stack ends

  5. codesg segment
  6.     mov ax, 4c00h
  7.     int 21h
  8. start:
  9.     mov ax, stack
  10.     mov ss, ax
  11.     mov sp, 16
  12.     mov ax, 0
  13.     push ax
  14.     ret
  15. codesg ends
  16. end start
复制代码

明明向栈段存入了16个字节型的1,第一行为什么不全是01呢
1.png
最佳答案
2022-7-5 22:25:34
本帖最后由 jackz007 于 2022-7-5 22:32 编辑
6YKT6ZKm5LqI 发表于 2022-7-5 21:51
可是我第13行设置了sp=16,那ss段0~f也就是图里面第一行的16个字节为什么不是16个1呢


         我已经回答了你的问题:堆栈只能保护用户压栈的数据(也就是从 SP 到栈顶之间的数据),从 SP 到栈底的数据属于自由空间,是不被保护的
         所谓"不被保护"的意思是,保存在这部分内存区域的数据存在被意外改变的风险。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-5 21:12:59 | 显示全部楼层
没看懂你的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 21:44:54 | 显示全部楼层
        和其它段相比,堆栈段具有特殊性,除了程序自己用,在进行 DOS 、BIOS 系统中断调用的时候也会被用到,而使用过后,堆栈中原来被静态初始化的内容就会被覆盖,所以,堆栈只能保护用户压栈的数据(也就是从 SP 到栈顶之间的数据),从 SP 到栈底的数据属于自由空间,是不被保护的,所以,堆栈段不适合用来存储静态数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-5 21:51:58 | 显示全部楼层
jackz007 发表于 2022-7-5 21:44
和其它段相比,堆栈段具有特殊性,除了程序自己用,在进行 DOS 、BIOS 系统中断调用的时候也会被用 ...

可是我第13行设置了sp=16,那ss段0~f也就是图里面第一行的16个字节为什么不是16个1呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 22:25:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-7-5 22:32 编辑
6YKT6ZKm5LqI 发表于 2022-7-5 21:51
可是我第13行设置了sp=16,那ss段0~f也就是图里面第一行的16个字节为什么不是16个1呢


         我已经回答了你的问题:堆栈只能保护用户压栈的数据(也就是从 SP 到栈顶之间的数据),从 SP 到栈底的数据属于自由空间,是不被保护的
         所谓"不被保护"的意思是,保存在这部分内存区域的数据存在被意外改变的风险。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
6YKT6ZKm5LqI + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 06:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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