【问题标题】:In ARM ASM how to check from which state interrupt is raised?在 ARM ASM 中如何检查从哪个状态引发中断?
【发布时间】:2016-09-30 21:16:49
【问题描述】:

在引发SWI中断后的ARM ASM编程中,如何检查它是从ARM状态还是THUMB状态引发的?

LDR R11,=DST
LDR R12,=0X4000100 ;THIS IS FOR STORING THE ADDRESS
LDR R1,=0X4000200 ;THIS IS FOR STORING THE COUNT

SWI 0X1240 ;

【问题讨论】:

    标签: assembly arm asmx interrupt thumb


    【解决方案1】:

    您尚未指定所使用的 ARM 指令集版本,但您几乎可以肯定会在保存的程序状态寄存器 (SPSR) 中找到它。

    具体来说,你想知道T-bit的值。

    T位

    T位反映运行状态:

    • 当设置 T 位时,处理器在 Thumb 状态下执行
    • 当 T 位清零时,处理器在 ARM 状态下执行。

    运行状态由CPTBIT外部信号反映。

    顺便说一句,如果您试图从中断中返回,您通常不需要担心中断是来自拇指代码还是 ARM 代码。有一些特殊的中断返回指令可以为您处理这个问题。

    在我使用的最后一个 ARM 平台上,您只需执行 movs pc, lr 即可从中断返回,同时恢复之前的执行状态。

    【讨论】:

    • 确实不管它来自什么状态的唯一例外是一条未定义的指令,其中 LR 偏移量是来自 ARM 的 +4 但来自 Thumb 的 +2。对于其他任何事情,LR 偏移量完全取决于异常的类型(特别是对于 SVC,确实是 0)。
    猜你喜欢
    • 2011-10-21
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多