鱼C论坛

 找回密码
 立即注册
查看: 4392|回复: 3

关于SS 和 SP

[复制链接]
发表于 2021-11-2 09:03:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 selfLearn 于 2021-11-2 10:32 编辑

最近学到栈段了,在看例题的时候,比如10010H~1001FH 作为栈段,
经常给 SS 赋值 1000H。
为了测试多出的push 会被送到哪,用 debug 做了测试,结果是入栈到了 0000 之后 会在 相同 SS 的 FFFE 开始继续入栈,得出结论是因为不能改 SS,所以8086的栈在 sp 的范围 0~FFFFH之间是个大循环。

这时突然想到,如果给 SS 赋值 1001H 会发生什么?
// 测试代码


代码

代码
// ss=1001H // sp=10H // 按照我的想法,现在的SS:SP 会指向 10020 应该从这开始入栈

结果1

结果1
// 没问题,确实从1000:001E 开始入栈 // 接下来有疑问

结果2

结果2
// 多出的 PUSH 往 2000:0 那里入栈一行(16字节)后才去 1000:FFF0 入栈的 // 这是什么原理呢 刚才结论不是不能修改SS么,为什么指向1001H 会跑到2000H入栈? // 这点让我十分不解 // 后面补上 调试过程

调试过程

调试过程
// 可以看到调试过程中 SP 没有指向 2000E 2000C 之类的 而是按照之前的结论到 0000 之后,又到 FFFE 去了 // 那为什么我的数据会出现 在2000:0~ 2000F 这一行呢?


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

使用道具 举报

 楼主| 发表于 2021-11-2 10:44:10 | 显示全部楼层
本帖最后由 selfLearn 于 2021-11-2 10:57 编辑

奥 ,明白了。 书上说的不能修改SS,只能修改SP。 指的是操作栈的时候直接对SS修改。

而我的例子里。SS确实没变。 只是和偏移地址合成的时候(加在一起) 物理地址变了。
确实是我想的片面了。只是一个加法的事,就没绕过来,汇编还真有意思。
看来我还是没学会用机器的思维思考

画图方便理解

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

使用道具 举报

发表于 2021-11-2 09:30:52 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-2 09:46 编辑

        内存地址
10010H~1001FH 
        长度是 10H
        如果用段:偏移的方式表达,可以是
1000:0010~1000:001F 
        相应的代码为:
        mov eax,1000h
        mov ss,ax
        mov ax,20h
        mov sp,ax
        也可以是
1001:0000~1001:000F 
        相应的代码为:
        mov eax,1001h
        mov ss,ax
        mov ax,10h
        mov sp,ax
        当堆栈越界时,对于前一种情形而言,首先会侵占本段地址剩余的底部空间,也就是 1000:0000~1000:0010 对应的二十位地址为 10000H~1000FH;如果继续越界,SP 寄存器到 0 值后,会回卷到 FFFE,SP 回卷以后,堆栈侵占的就是本段(SS)的顶部空间;对于后一种情形而言, 堆栈越界会直接导致 SP 回卷到 FFFE,开始侵占本段(SS)的顶部空间。
         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-2 09:36:16 | 显示全部楼层
本帖最后由 selfLearn 于 2021-11-2 09:40 编辑
jackz007 发表于 2021-11-2 09:30
内存地址

        长度是 10H


嗯 编辑帖子的时候 想起来了 没问题的。忘记debug 一行16字节的事了 调试确实是从1000:001E 开始入栈的 ss:sp 指向的是 10020 没毛病
已经改正了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 21:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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