Exception 未定义的ARM异常的原因是什么?

Exception 未定义的ARM异常的原因是什么?,exception,arm,undefined,Exception,Arm,Undefined,一个问题是未定义的指令何时发生。。。。我们是否需要从R14_SVC或R14_unde获取当前正在执行的指令。目前,我正在处理一个发生未定义指令的问题。在检查R14_SVC时,我发现指令如下所示: 0x46BFD73C cmp r0, #0x0 0x46BFD740 beq 0x46BFD75C 0x46BFD744 ldr r0,0x46BFE358 因此,在我的假设中,未定义的指令会在执行指令beq 0x46BFD75C时发生 让我困惑的一件事是,我检查了r14_unde,发现指令不同 0x

一个问题是未定义的指令何时发生。。。。我们是否需要从R14_SVC或R14_unde获取当前正在执行的指令。目前,我正在处理一个发生未定义指令的问题。在检查R14_SVC时,我发现指令如下所示:

0x46BFD73C cmp r0, #0x0
0x46BFD740 beq 0x46BFD75C
0x46BFD744 ldr r0,0x46BFE358
因此,在我的假设中,未定义的指令会在执行指令beq 0x46BFD75C时发生

让我困惑的一件事是,我检查了
r14_unde
,发现指令不同

0x46bfd4b8  bx r14
0x46bfd4bC  mov r0, 0x01
0x46bfd4c0  bx r14

哪一个导致了未定义的指令异常?

您的所有答案都在ARM、ARM架构参考手册中。请访问参考手册下的infocenter.arm.com,找到您感兴趣的体系结构系列。非cortex-m系列都以相同的方式处理这些异常

When an Undefined Instruction exception occurs, the following actions are performed:
R14_und = address of next instruction after the Undefined instruction
SPSR_und = CPSR
CPSR[4:0] = 0b11011 /* Enter Undefined Instruction mode */
CPSR[5] = 0 /* Execute in ARM state */
            /* CPSR[6] is unchanged */
CPSR[7] = 1 /* Disable normal interrupts */
            /* CPSR[8] is unchanged */
CPSR[9] = CP15_reg1_EEbit
/* Endianness on exception entry */
if high vectors configured then
    PC = 0xFFFF0004
else
    PC = 0x00000004

R14_und指向未定义指令后的下一条指令。您必须检查SPSR\u und以确定处理器处于何种模式(arm或thumb),以了解是否需要从R14\u und中减去2或4,以及是否需要提取2或4个字节。不幸的是,如果在支持thumb2的较新体系结构上,即使在thumb2模式下,您也可能需要获取4个字节,并尝试找出发生了什么。由于字长可变,很可能出现无法确定发生了什么的情况。如果未使用thumb2指令,则它是确定性的。

异常的原因是什么?处理器不支持您尝试执行的指令。