預備知識:理解跳轉指令b和ldr,其形式如下:
b step1 //B 是最簡單的分支。一旦遇到一個 B 指令,ARM 處理器將立即跳轉到給定的地址,從那裏繼續執行。
注意存儲在分支指令中的實際的值是相對當前的 R15(PC) 的值的一個偏移量,而不是一個絕對地址。
它的值由彙編器來計算,它是 24 位有符號數,左移兩位後有符號擴展爲 32 位,表示的有效偏移爲 26 位(+/- 32 M)。
ldr pc,step2 //使用LDR僞指令將一個常量讀取到非PC的其他通用寄存器中可實現位置無關的常 量訪問;
但將一個地址值讀取到PC中進行程序跳轉時,跳轉目標則是位置相關的。
對彙編不是很瞭解,以上內容參看好多資料寫的,也不知道對不對,期望大俠的指點。
找到文件的入口
# vi /arch/arm/cpu/arm920t/start.S
#include <common.h> //定義了關於錯誤處理的一些操作
#include <config.h>
.globl _start
_start: b start_code //定義了入口
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
.balignl 16,0xdeadbeef