-
GNU匯編語句:
[lable:] instruction [@comment]
lable 表示標號,表示地址位置,可選.
instruction即指令,也就是匯編指令或偽指令。
comment 就是注釋內容。
-
用戶使用.section 偽操作來定義一個段,匯編系統預定義了一些段名:
.text :代碼段,只讀的代碼信息。
.data :初始化的數據段,初始化的全局變量和局部靜態變量。
.bss :未初始化的數據段,未初始化的全局變量和局部靜態變量,使用動態的變量來初始化。
.rodata :只讀數據段,const修飾的static 變量都,以及一些字面量。
我們當然可以自己使用.section 來定義一個段,每個段以段名開始,以下一段名或者文件結尾結束,比如:
.section .section_name @定義了一個testsection段。
3. 偽指令:對會匯編過程進行控制的代碼,該類指令并不是可執行指令,沒有機器代碼,只用于匯編過程中為匯編陳旭提供匯編信息。相當于c語言關鍵字,匯編代碼種全大寫的很可能是偽指令,或者宏。
(1)偽指令只會存在匯編語言中,在其他代碼中叫語句。
(2)偽指令,不是可執行指令,不會產生機器代碼,不會占用ROM空間,只用于匯編過程中為匯編程序提供匯編信息。
例如,.global,.byte, .section都是偽指令
4. 匯編中的函數定義:
函數名:函數體返回語句5. 常見的指令: 處理器(cpu)內部數據傳輸指令:
指令 | 目的 | 源 | 描述 |
---|---|---|---|
mov | R0 | R1 | 將R1復制到R0 |
MRS | R0 | CPSR | 將特殊寄存器CPSR里面的數據復制到R0中 |
MSR | CPSR | R1 | 將R1里面的數據復制到特殊寄存器CPSR中 |
存儲器訪問指令:外設寄存器屬于存儲器的一種,
指令 | 描述 |
---|---|
LDR Rd, [Rn, #offset] | 從存儲器Rn+offset的位置讀取數據存放到Rd中。 |
STR Rd, [Rn, #offset] | 將Rd中的數據寫入到存儲器中的Rn+offset位置。 |
壓棧和出棧指令:
指令 | 描述 |
---|---|
PUSH <req list> | 將寄存器列表存入棧中。 |
POP <req list> | 從棧中恢復寄存器列表。 |
跳轉指令:
(1)直接跳轉指令B,BL,BX等
(2)直接向PC寄存器里面寫入數據。
算術運算指令:
ADD, ADC (帶進位),SUB(減法),MUL(乘法),UDIV(無符號除法),SDIV(有符號除法)
邏輯運算指令:與或非異或。