-
.globl _start
globl是關鍵字,相當于c語言中的extern,聲明此變量,并且告訴連結器此變量是全局的,外部可以通路。
-
_start:b reset
_start後面加上一個冒号’:’,表示其是一個标号Label,類似于C語言goto後面的标号。
_start的值就是這個代碼的位置,此處即為代碼的最開始,相對的0的位置。
而此處最開始的相對的0位置,在程式開始運作的時候,如果是從NorFlash啟動,那麼其位址是0,_start=0。
如果是重新relocate代碼之後,就是我們定義的值了。
而_start标号後面的:b reset
就是跳轉到對應的标号為reset的位置。
-
ldr指令
格式:ldr{條件} 目的寄存器,<存儲器位址>
用于從存儲器中将一個32位的字資料傳送到目的寄存器中。
ps:當程式計數器PC作為目的寄存器時,指令從存儲器中讀取的字資料被當作目的位址,進而可以實作程式流程的跳轉。
-
.word
配置設定一個4位元組的位址空間。
eg._undefined_instruction: .word undefined_instruction
c語言表示:_undefined_instruction=&undefined_instruction;
- .balignl
- .balignl 16,0xdeadbeef
接下來的代碼,都要16位元組對齊,不足之處,用0xdeadbeef填充。
-
bl
reset: bl save_boot_params
引起處理器轉移到“save_boot_params”處開始執行,并将下一條指令的位址拷貝到R14,可實作子程式的傳回。
-
mrs/msr bic/orr
7.1格式:
mrs{條件} 通用寄存器,程式狀态寄存器(cpsr或spsr)
mrs指令用于将程式狀态寄存器的内容傳送到通用寄存器中。使用情況1)需要改變程式狀态寄存器的内容時 2)異常處理或程序切換時
7.2格式:
msr{條件} 程式狀态寄存器(cpsr或spsr)_<域>,操作數
msr指令用于将操作數的内容傳送到程式狀态寄存器的特定域中。
7.3格式:
bic{條件}{S} 目的寄存器,操作數1,操作數2
bic指令用于清除操作數1的某些位,并把結果放置到目的寄存器中。
7.4格式:
orr{條件}{S} 目的寄存器,操作數1,操作數2
orr指令用于在兩個操作數上進行邏輯或運算,并把結果放置到目的寄存器中。