什么叫异常
Exceptions are generated by internal and external sources to cause the processor to handle an event,
意思就是因为一些内部的或者外部的原因,导致处理器去处理这个原因所触发的事件
什么叫异常向量
The ARM architecture supports seven types of exception. When an exception occurs, execution is forced from a fixed
memory address corresponding to the type of exception. These fixed addresses are called the exception
vectors.
意思就是,ARM共支持七种类型的异常。当一个异常发生时,ARM会跳转到对应的异常的固定地址去执行异常的处理程序,这个固定的地址就叫做异常向量。
而由异常向量与其处理函数所对应的关系表就是异常向量表了
.text
.global _start
_start:
b reset
ldr pc _undifined_instruction
ldr pc _software_interrupt
ldr pc _prefetch_abotr
ldr pc _data_abort
ldr pc _not_used
ldr pc _irq
ldr pc _fiq
_undifined_instruction: .word undifined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abotr: .word prefetch_abotr
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word fiq
undifined_instruction:
nop
software_interrupt:
nop
prefetch_abotr:
nop
data_abort:
nop
not_used:
nop
irq:
nop
fiq:
nop
reset:
nop
下面解析这段代码:
b reset
ldr pc _undifined_instruction
ldr pc _software_interrupt
ldr pc _prefetch_abotr
ldr pc _data_abort
ldr pc _not_used
ldr pc _irq
ldr pc _fiq
这段代码就是异常下向量表
按照表中所示,0x00000000处是reset的处理程序,所以跳转到reset处,也就是b reset
后面的是ldr指令,以ldr pc _undifined_instruction为例,也就是将_undifined_instruction处内存的值放入pc中,而_undifined_instruction中的值是undifined_instruction,也就是未定义指令异常处理程序所在的内存地址,这样就实现了程序的跳转。
后面以此类推,就完成了整个程序的异常向量表!!!!