gpt4 book ai didi

assembly - 8086微处理器的堆栈溢出

转载 作者:行者123 更新时间:2023-12-02 22:00:55 24 4
gpt4 key购买 nike

当堆栈已满并且我向其中插入一些东西时,8086 微处理器会发生什么行为?

最佳答案

在 8086 上,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 及更高版本的处理器上,堆栈下溢行为发生了变化。 PUSH、CALL 等使用 32 位(或 64 位)地址计算,而不是 16 位,并且这些地址计算会包装到 $FFFFFFFF(或 $FFFFFFFFFFFFFFFF)而不是 $FFFF。

关于assembly - 8086微处理器的堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com