ARM技术论坛
直播中

HCPcry

9年用户 1258经验值
擅长:处理器/DSP
私信 关注
[问答]

如何确定异常应返回的指令地址呢

我正在研究<Arm体系结构参考手册ARMv7-A ARMv7-R版本>。当我阅读此手册的异常处理部分时,遇到了一个混乱,问题是如何确定异常应返回的指令地址。

这是文档中提到的方法:

假设处理器正在执行0x_0000_1000的指令,并且IRQ进入IRQ模式

根据文档,我们可以获取此异常的返回信息,如下所示:

1)首选返回地址:下一条要执行的指令的地址(在这种情况下,拇指指令集状态为0x_0000_1002,臂指令集状态为0x_0000_1004)。

2)LR: 首选返回地址加上偏移量,该偏移量取决于发生异常时的指令集状态(在这种情况下,LR = 0x_0000_1002 + 4(用于拇指指令集)和0x_0000_1004 + 4(用于arm指令状态)),因此LR = 0x_0000_1006拇指指令集状态,而LR = 0x_0000_1008为手臂指令集状态。

3)PC :在这种情况下,PC = 0x_0000_1000 + 4用于拇指指令集状态,PC = 0x_0000_1000 + 8用于拇指指令集状态。

4)文件给出一个伪代码,通过使用参数PC来计算LR

LR = PC-0,处于拇指指令设置状态。在这种情况下是LR = 0x_0000_1004-0 = 0x_0000_1004

LR = PC-4,处于布防指令设置状态。在此cse中LR = 0x_0000_1008-4 = 0x_0000_1004

在这里我们可以看到通过2)和4)可以得到直接的LR,我的计算出了什么问题?哪种方法正确?以及如何计算最终返回地址?

回帖(1)

张娟

2022-8-16 15:18:54
只需取(2):从LR中减去4(或在虚拟/数据中止的情况下为8)即可得到返回地址。
(4)显示核心功能。不是您的软件应该做什么。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分