我正在研究Arm体系结构参考手册ARMv7-A ARMv7-R版本文档。当我阅读本手册中的异常处理部分时,我感到困惑。 问题是有关当ARMv7-A体系结构实现IRQ异常时如何确定LR值。>>
示例:假设处理器正在地址0x_0000_1000上执行一条指令,并执行了IRQ。首先,我们必须计算一些用于计算LR的参数。
- 首选返回地址,这是在这种情况下要执行的下一条指令的地址。因此,拇指指令集中的首选返回地址= 0x_0000_1002,或者手臂指令集中的首选返回地址= 0x_0000_1004。preferred return address for the exception
- PC
,它是程序计数器并保存当前程序地址。在这种情况下,处于拇指指令状态的PC = 0x_0000_1004或处于臂指令状态的PC = 0x_0000_1008。[C0 ]然后,在此IRQ异常时,这里有两种方法可以确定LR值。
- 使用首选返回地址。 LR = 首选返回地址 + 偏移量取决于发生异常时的指令集状态。在这种情况下,LR = 0x_0000_1002 + 4处于拇指指令状态或< [LR = 0x_0000_1004 + 4处于布防指令状态。how to calculate PC使用
- PC
。如果是拇指指令集,则为LR = PC-0;如果是臂指令集,则为LR = PC-4。在这种情况下,拇指指令集为LR = 0x_0000_1004-0或LR = 0x_0000_1008-4处于布防指令状态。 Offsets applied to Link value for exceptions taken to PL1 modes 问题
:在拇指设置状态和手臂设置状态下,两种方法计算的LR结果均为
different(使用
first method得出
LR = 0x_0000_1006或LR = 0x_0000_1008 ,但
第二种方法我们得到
LR = 0x_0000_1004或LR = 0x_0000_1004)。哪个是正确的,或者我的理解有什么错误?
我现在正在研究《 ARM体系结构参考手册》 ARMv7-A ARMv7-R版文档。当我阅读本手册中的异常处理部分时,我感到困惑。 ...