天天看點

025_ARM常用彙編指令

目錄

處理器内部傳輸資料指令 ​

存儲器通路指令​

壓棧和出棧指令  (處理器的堆棧是向下增長的)​

跳轉指令

算術運算指令​

邏輯運算指令​

今天主要講解一下ARM中常用的彙編指令:

  • 處理器内部傳輸資料指令 
    025_ARM常用彙編指令

MOV 

MOV R0, R1 @将寄存器 R1 中的資料傳遞給 R0,即 R0=R1
MOV R0, #0X12 @将立即數 0X12 傳遞給 R0 寄存器,即 R0=0X12
           

MRS

MRS R0, CPSR @将特殊寄存器 CPSR 裡面的資料傳遞給 R0,即 R0=CPSR
           

MSR

MSR CPSR, R0 @将 R0 中的資料複制到 CPSR 中,即 CPSR=R0
           
  • 存儲器通路指令
    025_ARM常用彙編指令

LDR 

LDR R0, =0X0209C004 @将寄存器位址 0X0209C004 加載到 R0 中,即 R0=
LDR R1, [R0] @讀取位址 0X0209C004 中的資料到 R1 寄存器中
           

STR 

LDR R0, =0X0209C004 @将寄存器位址 0X0209C004 加載到 R0 中,
LDR R1, =0X20000002 @R1 儲存要寫入到寄存器的值,即 R1=0X20
STR R1, [R0] @将 R1 中的值寫入到 R0 中所儲存的位址中
           
  • 壓棧和出棧指令  (處理器的堆棧是向下增長的)
    025_ARM常用彙編指令

PUSH

PUSH {R0~R3, R12} @将 R0~R3 和 R12 壓棧
           

POP

POP {LR} @先恢複 LR
POP {R0~R3,R12} @在恢複 R0~R3,R12
           
注:
STMFD 可以分為兩部分: 
STM 和 FD,同理, 
LDMFD 也可以分為 LDM 和 FD。
STM 和 LDM 就是多存儲和多加載,
可以連續的讀寫存儲器中的多個連續資料。

FD 是 Full Descending 的縮寫。

ARM 使用的 FD 類型
的堆棧, SP 指向最後一個入棧的數值,堆棧是由高位址向下增長的,也就是前面說的向下增長
的堆棧,是以最常用的指令就是 STMFD 和 LDMFD。 STM 和 LDM 的指令寄存器清單中編号
小的對應低位址,編号高的對應高位址
           
  • 跳轉指令

025_ARM常用彙編指令

B 指令

_start:

ldr sp,=0X80200000 @設定棧指針
b main @跳轉到 main 函數
           

BL 指令

push {r0, r1} @儲存 r0,r1
cps #0x13 @進入 SVC 模式,允許其他中

bl system_irqhandler @加載 C 語言中斷處理函數到

cps #0x12 @進入 IRQ 模式
pop {r0, r1}
str r0, [r1, #0X10] @中斷執行完成,寫 EOIR
           
  • 算術運算指令
    025_ARM常用彙編指令

  • 邏輯運算指令
    025_ARM常用彙編指令