ARM組合語言指令(1)
阿新 • • 發佈:2019-02-07
- Handling Processor Exception
Exception | Description |
Reset | 復位中斷,中斷向量在0x0000處 |
Undefined Instruction | un-recognized executing instruction |
Software Interrupt(SWI) | 使用者中斷,提供了在使用者模式下請求執行監控模式功能的方法,例如呼叫RTOS function |
Prefetch Abort | 用於地址非法,導致了處理器不能執行取址 |
Data Abort | 到資料傳輸時,load或store地址非法 |
IRQ |
外部中斷髮生(低電平有效) |
FIQ | Fast Interrupt Requset發生(低電平有效) |
- 中斷優先順序
Vector address | Exception type | Exception mode |
Priority(1=H, 6=Low) |
0x0 | Reset | Supervisor(SVC) | 1 |
0x4 | Undefined Instruction | Undef | 6 |
0x8 | Software Interrupt(SWI) | Supervisor(SVC) | 6 |
0xC | Prefetch Abort | Abort | 5 |
0x10 | Data Abort | Abort | 2 |
0x14 | Reserved | Not application | Not application |
0x18 | Interrupt(IRQ) | Interrupt(IRQ) | 4 |
0x1C |
Fast Interrupt(FIQ) |
Fast Interrupt(FIQ) | 3 |
- 進入異常處理
- 基本概念
處理器模式 | 說明 | Visible Thumb state registers | Visible ARM state registers |
User使用者 | 正常程式執行模式 | R7..R0, LR, SP, PC, CPSR | R14..R0, PC, CPSR |
FIQ | 支援高速資料傳送或通道處理 | R7..R0,LR_fiq, SP_fiq, PC, CPSR, SPSR_fiq | R7..R0, R14_fiq..R8_fiq, PC, CPSR, SPSR_fiq |
IRQ | 通用中斷處理 | R7..R0,LR_irq, SP_irq, PC, CPSR, SPSR_irq | R12..R0,R14_irq, R13_irq, PC, CPSR, SPSR_irq |
Supervisor(svc) | 作業系統保護模式 | R7..R0,LR_svc, SP_svc, PC, CPSR, SPSR_svc | R12..R0, R14_svc,R13_svc PC, CPSR, SPSR_svc |
Abort | 實現虛擬儲存/儲存器保護 | R7..R0,LR_abt, SP_abt, PC, CPSR, SPSR_abt | R12..R0,R14_abt, R13_abt, PC, CPSR, SPSR_abt |
Undefined | 支援硬體輔助計算器的軟體模擬 | R7..R0,LR_und, SP_und, PC, CPSR, SPSR_und | R12..R0,R14_und, R13_und, PC, CPSR |
System | 執行作業系統工作 | R7..R0,LR, SP, PC, CPSR | R14..R0, PC, CPSR |
對未定義模式堆疊進行初始化 UNDEFMODE DEFINE 0x1b(00011011) MODEMASK DEFINE 0x1f(00001111) NOINT DEFINE 0xc0(11000000) mrs r0, cpsr bic r0, r0, #MODEMASK ;把cpsr的低4位清零 orr r1, r0, #UNDEFMODE | NOINT msr cpsr_cxsf, r1 ldr sp, =UndefStack ;把堆疊的位置送給SP |