当堆栈已满时,8086微处理器的行为会是什么?
发布于 2011-01-29 00:31:53
在8086上,PUSH指令或隐式堆栈push将使SP寄存器递减2,并将适当数量存储在SS:SP (即16*SS+SP)。如果SP寄存器为$0000,数据将转到SS:$FFFE。如果SP寄存器为$0001,则数据的MSB将转到SS:$0000,LSB将转到SS:$FFFF。处理器不会特别注意堆栈回绕。虽然堆栈环绕通常是一件坏事,但在8086上的某些情况下,可以忽略它不会影响任何事情。例如,如果SS指向64K的RAM,而其他任何事情都不需要,并且一个永远不会退出的程序有时会通过简单地调用"main()“而不重置堆栈来重新启动自己,堆栈可以在不影响程序操作的情况下回绕,因为所有有效地址计算都将以相同的方式回绕。
请注意,在80386及更高版本的处理器上,堆栈下溢行为已更改。推送、调用等使用32位(或64位)地址计算,而不是16位,并且这些计算包装到$FFFFFFFF (或$FFFFFFFFFFFFFFFF)而不是$FFFF。
发布于 2010-08-15 06:52:18
8086没有“保护模式”,因此没有“堆栈底部的保护页”,因此没有明确定义的异常。相反,您的推送将覆盖堆栈底部以下的任何代码或数据,如果这些代码或数据被执行或使用,最终(但不是立即)将导致“未定义的行为”。
发布于 2010-08-15 06:25:05
没有尽头。我的意思是这些处理器中的堆栈具有相反的顺序(从右到左)。因此,它将一直进行到rom块或存储器的末尾。这会导致处理器中的异常,该异常可能会软重置自身。
https://stackoverflow.com/questions/3485349
复制相似问题