目錄
處理器内部傳輸資料指令
存儲器通路指令
壓棧和出棧指令 (處理器的堆棧是向下增長的)
跳轉指令
算術運算指令
邏輯運算指令
今天主要講解一下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 的指令寄存器清單中編号
小的對應低位址,編号高的對應高位址
-
跳轉指令
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常用彙編指令