2012-07-12 92 views
2

一个问题是什么时候未定义的指令发生....我们是否需要从R14_SVC或R14_UNDEF获取当前正在执行的指令? 。目前我正在处理一个未定义指令发生的问题。在检查R14_SVC我发现该指令是象下面这样:未定义ARM异常的原因是什么?

0x46BFD73C cmp r0, #0x0 
0x46BFD740 beq 0x46BFD75C 
0x46BFD744 ldr r0,0x46BFE358 

所以在我的假设在执行指令beq 0x46BFD75C

有一件事情困扰我的是我检查了r14_undef和未定义指令都不会发生建议是不同的。

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

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

回答

3

所有的答案都在ARM 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_und以确定处理器处于何种模式(手臂或拇指),以确定是否需要从R14_und中减去2或4,以及是否需要获取2或4个字节。不幸的是,如果在一个支持thumb2的新架构上,你甚至可以在拇指模式下获取4个字节,并试图找出发生了什么。作为可变字长,很可能处于无法确定发生的情况。如果你不使用thumb2指令,那么它是确定性的。

+0

异常的原因是什么?您尝试执行的指令不受处理器支持。 – 2012-07-12 13:59:10

相关问题