汇编语言中的堆栈段指针是干什么的

 我来答
ASSEMBLYZENG
推荐于2017-09-04 · TA获得超过251个赞
知道答主
回答量:27
采纳率:100%
帮助的人:27.2万
展开全部
  堆栈段指针(寄存器SS)是用于确定堆栈在内存中的起始位置的寄存器;堆栈段寄存器的作用和其他段寄存器(CS,DS,ES)相同,都是为了在一整段的内存中划分区域:由于内存为一整段储存单元,CS(代码段寄存器)中存放代码段的起始位置,DS(数据段寄存器)中存放数据段的起始位置,SS(堆栈段寄存器)中存放堆栈段的起始位置,ES(附加段寄存器)中存放附加段的起始位置。

  在操作系统架构的内存中,堆栈位于程序所使用内存的顶端,向内存低地址处扩展,DS寄存器中存放的是堆栈最低的地址。堆栈本身为内存的一部分,但是相对普通内存段(DS)的区别在于:普通内存段(DS)一般用于存放长久数据,无特殊存储顺序;堆栈内存段(SS)一般用于存放暂时数据(例如调用函数是的参数),可以使用PUSH,POP指令向栈顶压入,弹出数据。

  另外,若SP(栈顶寄存器)中的值小于DS寄存器(PUSH指令执行过多次)将会引发错误:系统显示某某程序Stack Overflow(因为SS段往下的内存地址属于数据段的区域)。若SP中的值大于一定程度(由程序的堆栈段大小决定)(POP指令执行过多),也将会引发错误:系统显示某某程序Access Violation Reading Address(因为程序内存的顶端上有着其他数据)。

  需要注意的是,在较新的操作系统下汇编其平台下的程序时,程序员将无法修改段寄存器中的值(修改会报错),它们由操作系统自身管理(可以理解为由操作系统编写者的代码管理),其原因是出于安全起见。
暗影之王01
2015-11-08 · TA获得超过5.6万个赞
知道大有可为答主
回答量:2万
采纳率:29%
帮助的人:4559万
展开全部
汇编语言中的堆栈段指针是用来保存临时数据、局部变量和中断/调用子程序程序的返回地址。
堆栈指针总是指向栈顶元素。在51系列单片机中,堆栈是向上生长的,所以数据入栈的时候,堆栈指针先加1,再压栈。出栈的时候先弹出数据,堆栈指针再减1。但在AVR单片机中,堆栈是向下生长的,数据入栈时指针将减1,数据出栈时指针将加1。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yezishu3007
推荐于2017-09-09
知道答主
回答量:15
采纳率:0%
帮助的人:18.8万
展开全部
堆栈是用来存储数据的,例如某个寄存器里面的数值或地址。
堆栈可以理解成一个仓库,这个仓库里有很多格子,每个格子里放一个东西,每个格子都有一个编号。堆栈指针就是用来查找格子编号的,假设现在堆栈里有10个格子,编号依次是0,1,2,3,4,5,6,7,8,9,如果现在堆栈指针是5,那么就对应5号格子里的内容(数据或地址)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kd83kdi9
2015-11-11 · TA获得超过123个赞
知道答主
回答量:62
采纳率:100%
帮助的人:41.3万
展开全部
16位汇编下堆栈段SS寄存器是表示一个堆栈的基址,实际地址是(ss)*16+(sp)=物理地址,这个是当前对战指针指向的实际地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anan640925
2015-10-06 · TA获得超过5421个赞
知道大有可为答主
回答量:4868
采纳率:51%
帮助的人:1075万
展开全部
堆栈指针,用于堆栈运算
入站和出站指针都要进行加减,
保证数据的进出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式