关于堆栈指针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(起始) |
|---|

本文详细介绍了8086处理器中堆栈指针SP的工作原理,通过PUSH和POP操作说明SP如何变化。堆栈采用段基址+偏移的方式寻址,每次PUSH或POP后SP的调整确保了堆栈空间的有效利用。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



