VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
123
返回列表 发新帖
楼主: qqion1988

关于堆栈段SS寄存器的问题。

[复制链接]

2

主题

18

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2020-7-28 16:30:02 | 显示全部楼层
程序的堆栈段中只能有一个堆栈,SS定位到堆栈段的起始地址(基地址,低地址),栈底位于堆栈段的有效地址的最末端(高地址)。SP初始化为堆栈段的大小,SS:SP永远指向堆栈的栈顶。在初始化时,SS:SP指向堆栈段的最高地址(此时,栈底和栈顶都指向这一内存地址)。随着压入元素,SP不断变小,进而SS:SP代表的栈顶地址变小,不在等于栈底地址,而是逐渐靠近堆栈段的起始地址,当SP为0时,SS:SP代表的栈顶地址与SS:0000代表的堆栈段的起始地址相等,进而确定栈满,我估计CPU也是通过判断SP<0来检验堆栈是否溢出的。
回复

使用道具 举报

2

主题

18

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2020-7-28 19:45:01 | 显示全部楼层
在网络上搜索到了一道题及其答案,大家参考。

1.如果一个堆栈从地址3250H:0000H开始,它的最后一个字的偏移地址为0100H,SP的内容为0052H,问:
1 栈顶地址是什么?
2 栈底地址是什么?
3 存入数据1234H和5678H后,SP的内容是多少?

答案:
1 堆栈的最高地址叫栈底,堆栈指示器SP总是指向栈顶。
栈顶地址=(SS)×10H+(SP)=3250H×10H + 0052H=32552H
2 栈底地址=(SS)×10H + 0100H=32600H
3 8086CPU中堆栈存取必须以字为单位。存入数据1234H和5678H后,即两个字压入堆栈后,SP减4,SP的内容为:(SP) - 字数×2=0052H - 2×2=004EH。SS的内容不变。
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-9-1 00:45:01 | 显示全部楼层
在下初学微机原理 支持qqion1988的说发 最近同学有问 同样的问题 我和m君的观点一致 再内存中 首先开辟64k最大空间 给堆栈 ss指向低地址 sp始终指向栈顶 初始化应该 在高地址 这样 入栈才符合sp-2这一说法
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-9-5 22:15:01 | 显示全部楼层
上面说的好复杂,还是21#的例子比较好懂!!!!!!
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2020|verysource.com ( 京ICP备17048824号-1 )

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