- 论坛徽章:
- 0
|
最近看uboot源码中S3C2440的start.S,源码的开始部分就是如下的代码:
.globl _start
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
_undefined_instruction: .word undefined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word fiq
网上查找了很多,都说这个是中断向量表,但是可以得出的是比如irq中断发生的时候,ldr pc, _irq会被执行,所以pc的值将会被赋为_irq标号的地址,这一步是很清楚的,但是为什么当pc被赋值为这个之后,pc最终又会被赋值为irq标号的值呢?因为第一次跳转时ldr指令完成的,第二次pc指向_irq标号处并没有一条指令给它赋值为irq标号的值啊?这是一个想不明白的问题,还有一个想不明白的问题,为什么这里不直接使用ldr pc, irq这样的形式一步到位呢,为什么非要跳转两次才跳转到真正的位置呢?
路过的各位大虾,请帮本菜鸟解解惑吧,感激不尽。。。 |
|