【发布时间】:2015-09-15 20:06:28
【问题描述】:
我目前正在阅读 ARM 网站上的 ARM Cortex M0+ 用户指南,如下所示
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/CHDBIBGJ.html
在用户手册中,提到了以下段落:
可中断重启指令
可中断重启指令是 LDM、STM、PUSH、POP 以及在 32 周期乘法器实现中的 MULS。当在执行这些指令之一期间发生中断时,处理器将放弃执行该指令。处理完中断后,处理器从头开始重新执行指令。
我无法理解可重启指令的工作原理?有人可以举例说明可中断重启指令的不同阶段(获取、解码和执行)吗?中断来临时指令流水线会发生什么?
【问题讨论】:
-
这里没有什么花哨的,CPU 不保存部分状态和恢复或任何东西。相反,如果一个中断到达,它只是停止而不推进程序计数器,迫使指令在从中断返回时重新执行。请注意,内部寄存器用于缓冲,例如在不破坏输入的情况下读取/写入指针和乘法结果。这种方案的结果是
STM不是原子的,并且中断处理程序可能会看到部分写入。同样,具有副作用的 I/O 寄存器可能会被多次访问。 -
这些指令可能/确实会消耗大量时间,因此处理器设计选择是:等待它们完成并产生延迟,以某种方式在中间保存状态并完成部分完成的指令,或者放弃指令并重新开始。第一个和最后一个选项很简单,从延迟的角度来看,后者是性能最好的(肯定会消耗更多的周期)。
标签: assembly arm cpu-architecture cortex-m