RST 5.5 中断时的堆栈指针 (SP) 调整
Stack Pointer (SP) adjustment at RST 5.5 interruption
在微处理器 8085 中,我们 运行 命令 CALL 3000H 。程序计数器(PC)等于(PC)=2000H,堆栈指针等于(SP)=4000H。在执行命令的中间,我们有一个 RST 5.5 中断。我想定义 PC 和 SP 的新值。我还想找到堆栈的内容和例程前后发生的操作 return.
我认为由于中断发生在命令CALL 3000H 开始后,命令将完成。完成后,中断发生。程序计数器 (PC) 需要存储在堆栈中,以便程序可以 return 到调用点。这意味着 (SP) 已调整。在 RST 5.5 中断后,程序计数器 (PC) 将取值 (PC) = 002CH。
我的做法对吗?如果是这样,我对堆栈指针 (SP) 和堆栈仍然有点困惑。堆栈和(SP)值的调整究竟会发生什么?
你是对的,因为调用指令开始后中断到达,指令将完成,然后中断将被服务。
所以,首先栈指针减2,调用后指令(2003h)的PC存放在3ffeh,PC加载调用的目标(3000h)。
然后中断服务:SP 再次递减,到 3ffch,PC (3000h) 存储在那里,PC 加载中断处理程序地址。
在微处理器 8085 中,我们 运行 命令 CALL 3000H 。程序计数器(PC)等于(PC)=2000H,堆栈指针等于(SP)=4000H。在执行命令的中间,我们有一个 RST 5.5 中断。我想定义 PC 和 SP 的新值。我还想找到堆栈的内容和例程前后发生的操作 return.
我认为由于中断发生在命令CALL 3000H 开始后,命令将完成。完成后,中断发生。程序计数器 (PC) 需要存储在堆栈中,以便程序可以 return 到调用点。这意味着 (SP) 已调整。在 RST 5.5 中断后,程序计数器 (PC) 将取值 (PC) = 002CH。
我的做法对吗?如果是这样,我对堆栈指针 (SP) 和堆栈仍然有点困惑。堆栈和(SP)值的调整究竟会发生什么?
你是对的,因为调用指令开始后中断到达,指令将完成,然后中断将被服务。
所以,首先栈指针减2,调用后指令(2003h)的PC存放在3ffeh,PC加载调用的目标(3000h)。
然后中断服务:SP 再次递减,到 3ffch,PC (3000h) 存储在那里,PC 加载中断处理程序地址。