- 論壇徽章:
- 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
網(wǎng)上查找了很多,都說這個是中斷向量表,但是可以得出的是比如irq中斷發(fā)生的時候,ldr pc, _irq會被執(zhí)行,所以pc的值將會被賦為_irq標號的地址,這一步是很清楚的,但是為什么當(dāng)pc被賦值為這個之后,pc最終又會被賦值為irq標號的值呢?因為第一次跳轉(zhuǎn)時ldr指令完成的,第二次pc指向_irq標號處并沒有一條指令給它賦值為irq標號的值啊?這是一個想不明白的問題,還有一個想不明白的問題,為什么這里不直接使用ldr pc, irq這樣的形式一步到位呢,為什么非要跳轉(zhuǎn)兩次才跳轉(zhuǎn)到真正的位置呢?
路過的各位大蝦,請幫本菜鳥解解惑吧,感激不盡。。。 |
|