ARM指令是三级流水线
就是说取指,译指,执行时同时执行的
这样说吧,现在PC指向的是正在取指的地址,那么cpu正在译指的指令地址是PC-4(假设在ARM状态下,一个指令占4个字节),cpu正在执行的指令地址是PC-8.
比如有一个向量表定义如下:
unsigned int const vecTbl[16] @".arm_vectors" =
{
0xE59FF018,
0xE59FF018,
0xE59FF018,
0xE59FF018,
0xE59FF018,
0xE59FF018,
0xE59FF018, // LDR PC,[PC,0x18] 若产生IRQ,CPU取指此处PC,正在执行指令为PC-8;
// 实际取指PC应该是 PC+8+0x18 = PC+0x20 ==>OS_CPU_ARM_ExceptIrqHndlr,也就是下一执行的PC
0xE59FF018,
(unsigned int) Entry,
(unsigned int) OS_CPU_ARM_ExceptUndefInstrHndlr, //未定义
(unsigned int) OS_CPU_ARM_ExceptSwiHndlr, //软中断
(unsigned int) OS_CPU_ARM_ExceptPrefetchAbortHndlr, //预取址
(unsigned int) OS_CPU_ARM_ExceptDataAbortHndlr, //数据
(unsigned int) Entry,
(unsigned int) OS_CPU_ARM_ExceptIrqHndlr, //IRQ
(unsigned int) OS_CPU_ARM_ExceptFiqHndlr //FIQ
};
CPSR