2025-11-08 05:48:46
堆栈指针sp是存放堆栈地址的寄存器,当sp指向00h时说明堆栈顶部在CPU内部地址0位置。这种情况下执行push或pop指令会把数据存到CPU内部,可能导致程序跑飞或死机。
堆栈指针sp的值由当前指令和系统状态共同决定,比如执行push或pop时sp会自动+1或-1。当sp指向00h时,如果继续执行push操作,sp会变成FFh(8051单片机地址范围是00h-FFh),此时数据会被存到CPU内部不可见区域。根据《8051单片机原理与接口技术》第3章数据,堆栈区建议至少保留20个字节,sp指向00h时堆栈深度已超过安全范围。比如当sp=00h时再压入一个字节,实际地址会变成FFh,这会导致数据覆盖程序代码区,比如在C51程序中会破坏main函数的入口地址。效果:堆栈指针sp的值由当前指令和系统状态共同决定,比如执行push或pop时sp会自动+1或-1,当sp指向00h时如果继续执行push操作,sp会变成FFh,此时数据会被存到CPU内部不可见区域,根据《8051单片机原理与接口技术》第3章数据,堆栈区建议至少保留20个字节,sp指向00h时堆栈深度已超过安全范围。比如当sp=00h时再压入一个字节,实际地址会变成FFh,这会导致数据覆盖程序代码区,比如在C51程序中会破坏main函数的入口地址。
本题链接: