2012-07-12 79 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

相關問題