LINUX-I.MX6U從零開始之1.1-彙編入門知識

彙編基礎,LINUX啓動文件吧。。
【正點原子】I.MX6U嵌入式Linux驅動開發指南V1.0-嚐鮮版第七章

一,僞操作(定義變量)

.byte 定義單字節數據
.short定義雙字節數據
.long定義四字節數據
.equ賦值語句
如:.equ num,0x12 //num=0x12
.alingn數據字節對齊
.end表示源文件結束
.golbal定義一個全局符號(全局變量)

二,函數

/* 未定義中斷 */
Undefined_Handler:
ldr r0, =Undefined_Handler
bx r0
“Undefined_Handler”就是函數名,
“ldr r0, =Undefined_Handler”是函數體,
“bx r0”是函數返回語句,函數返回語句不是必須的。

三,指令
3.1處理器內部數據傳輸指令(就是a=b;)
  1. MOV 指令(複製)
    MOV R0,R1 @將寄存器 R1 中的數據傳遞給 R0,即 R0=R1
    MOV R0, #0X12 @將立即數 0X12 傳遞給 R0 寄存器,即 R0=0X12
  2. MRS 指令(特殊寄存器複製)
    MRS R0, CPSR @將特殊寄存器 CPSR 裏面的數據傳遞給 R0,即 R0=CPSR
  3. MSR 指令(特殊寄存器複製進)
    MSR CPSR, R0 @將 R0 中的數據複製到 CPSR 中,即 CPSR=R0
3.2存儲器訪問指令

(ARM 不能直接訪問存儲器,比如 RAM 中的數據,I.MX6UL 中的寄存器就是 RAM 類型的)

  1. LDR 指令(從存儲器讀數據)
    LDR R0, =0X0209C004 @將寄存器地址 0X0209C004 加載到 R0 中,即 R0=0X0209C004
    LDR R1, [R0] @讀取地址 0X0209C004 中的數據到 R1 寄存器中
  2. STR 指令(存儲器寫數據)
    LDR R0, =0X0209C004 @將寄存器地址 0X0209C004 加載到 R0 中,即 R0=0X0209C004
    LDR R1, =0X20000002 @R1 保存要寫入到寄存器的值,即 R1=0X20000002
    STR R1, [R0] @將 R1 中的值寫入到 R0 中所保存的地址中
3.3壓棧和出棧指令

(A 函數中調用 B 函數,當 B 函數執行完以後再回到 A 函數繼續執行,進入B時壓棧A)

  1. 壓棧
    PUSH {R0~R3, R12} @將 R0~R3 和 R12 壓棧
  2. 出棧
    POP {R0~R3,R12} @在恢復 R0~R3,R12
3.4跳轉指令(跳轉函數)
  1. B 指令(要調用的函數不會再返回到原來的執行處,那就可以用 B 指令)
    b main @跳轉到 main 函數
  2. BL 指令(調用子函數,跳了還回來)
    bl system_irqhandler @加載 C 語言中斷處理函數到 。。 寄存器中
3.5算術運算指令(加減乘除)

在這裏插入圖片描述

3.6邏輯運算指令(與或非)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章