学习笔记——关于堆栈指针SP的理解

本文详细介绍了8086处理器中堆栈指针SP的工作原理,通过PUSH和POP操作说明SP如何变化。堆栈采用段基址+偏移的方式寻址,每次PUSH或POP后SP的调整确保了堆栈空间的有效利用。
摘要由CSDN通过智能技术生成

关于堆栈指针SP的理解


看过很多网络上对于空栈时SP+1的理解,举了很多例子,比如说打电话或者堆箱子,但是都不是很直观透彻,故写下这篇自己对于堆栈指针SP的理解,供以后参考

首先需要明确,堆栈的操作方法的执行步骤。

对于PUSH AX操作来说,CPU分两步执行:
1、SP-1 -> SP
AH-> [SS*10H+SP]

2、SP-1->SP
AL -> [SS*10H+SP]

故完成一次PUSH操作,SP会变成SP-2
同理对于POP BX操作来说,CPU也会分两步执行:
1、[SS*10H+SP] -> BL
SP+1 -> SP

2、[SS*10H+SP] -> BH
SP+1 -> SP

故完成一次POP操作,SP会变成SP+2

这里解释一些为什么堆栈中的内容要用 [SS*10H+SP] 的方式进行访问:
8086处理器中对于堆栈采用段基址+偏移的方式进行寻址,这里堆栈段即SS段,SP表示的是偏移地址,而非有效地址,并且8086采用地址线和数据线复用的方式,内部寄存器、总线等均是16位,但是通过复用可以达到20位地址寻址,故 [SS*10H+SP] 表示堆栈中SP指针指向地址的内容。

回到正题,为什么每一次PUSH或者POP操作是SP-2 -> SP或者SP+2 ->SP,但是一开始SP要+1呢?

SP(起始)
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值