我正在阅读 Cortex R5 技术参考手册(版本:r1p2)。并且根据手册
如果您也能解释一下为什么 LR_DABT 在 ARM/Thumb 中具有 IA + 8,我将不胜感激。
为什么FIQ模式下的Link寄存器在thumb模式下是指令地址加4而不是指令地址加2?
TL;DR - 简单。
因为与使代码正确相比,他们并不关心让系统程序员的生活变得轻松。为了实现你想要的,他们必须检查模式。如果中断的指令正在改变模式怎么办?什么是正确的做法。
如果您也能解释一下为什么 LR_DABT 在 ARM/Thumb 中具有 IA + 8,我将不胜感激
这是一个类似的原因,正如你所说的。 CPU 是流水线式的,有多条指令在不同的阶段部分完成。 CPU 需要丢弃或撤消这些指令的效果,因为它们将在恢复时重新运行。
对于数据中止,加载/存储单元处于后期阶段,因此其他单元的预读取和效果已经完成。通常将非加载/存储指令与加载/存储指令交错(这会导致数据中止)。当存储通过总线到达终端设备时,CPU 已经可以完成很多工作了。要实现 DABT+4 处于
LR
状态的“愿望”,您必须接受性能下降的情况。现在你介意吗?