汇编备忘录

本文详细解析了8086 CPU中SS和SP寄存器在堆栈管理中的作用,包括push和pop指令的原理,以及如何通过SS:SP描述栈顶。重点讨论了栈溢出的原理和可能引发的问题,提醒开发者注意堆栈控制的重要性。
摘要由CSDN通过智能技术生成

SS和SP
CPU一般都有栈的设计,并提供相关指令以栈的方式来访问内存。8086CPU中对堆栈的描述主要使用SS和SP寄存器,SS:SP始终指向栈顶,SS是段寄存器,SP是偏移地址。

push和pop指令
PUSH是入栈指令,POP是出栈指令。如 push ax将ax寄存器中的数据入栈,pop ax将栈顶元素取出放入ax寄存器中。8086CPU中入栈和出栈操作都是以字(word,一个字表示两个字节)为单位进行。
push和pop除了操作通用寄存器外,主要有以下使用方式:

push/pop 寄存器 ;将一个寄存器数据入栈和出栈。
push/pop 段寄存器 ;将一个段寄存器数据入栈和出栈
push/pop 内存单元 ; 将内存中的字单元(2Byte,注意高低字节顺序)入栈和出栈。
前面说了SS:SP总是指向栈顶元素,那么一个PUSH指令操作如push axCPU将做以下过程:

SP = SP - 2 ; 伪代码,push和pop指令是以字单元为单位,所以是减2
mov SS:SP, ax ; 伪代码,将ax数据传送到SS:SP说指向的内存空间
同理pop axCPU将做的过程如下:

mov ax, SS:SP ; 伪代码,将当前栈顶字单元数据传送到ax寄存器中。
SP = SP + 2 ; 伪代码,弹出栈顶数据,指向新的栈顶元素。
栈顶溢出
堆栈通过SS:SP描述,每次push后栈的空间SP将减少2,多次push后,可能导致SP为0,再次push后则栈顶溢出, 8086CPU中SP寄存器为0减2后为FFFE,这样会导致覆盖数据等异常情况,8086CPU不检测栈顶溢出,需要程序编写者自己控制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值