匯編格式:
label:instruction @ comment
- label:標號
- instruction:具體匯編指令
- comment:注釋內容
常用段名:
- .text:代碼段
- .data:初始化的數據段
- .bss:未初始化的數據段
- .rodata:只讀數據段
- .section:自定義段
.section .vector
常見偽操作:
- .global:定義全局標號
.global _start - .align:字節對齊
.align 2
寄存器間數據傳輸:
- mov:寄存器數據(或者是立即數)拷貝到另一個寄存器
mov r0,r1
mov r0,#0x12 - mrs:讀程序狀態寄存器
mrs r0,cpsr - msr:寫程序狀態寄存器
msr cpsr,r0 - mrc:讀寫cp15協處理器
- mcr:寫cp15寄存器
內存與寄存器數據傳輸:
- ldr:把內存數據(或者是立即數)加載到寄存器
ldr r0, =0x80000000
ldr r1, [r0] - str:把寄存器數據寫入到內存
ldr r0, =0x80000000
str r1, [r0]
壓棧和出棧
- push:把寄存器列表存入棧中
push {r0~r3, r12} - pop:從棧中恢復寄存器列表
pop {r0~r3, r12}
跳轉
- b:跳轉到目標地址
b main - bl:跳轉到目標地址,并把當前pc指針值保存在lr寄存器中
bl main
算術運算指令
- add:加法運算
add r1,r2,r3
add r1,r2 - sub:減法運算
sub r1,r2,r3 - mul:乘法運算
mul r1,r2,r3 - udiv:除法運算
udiv r1,r2,r3
邏輯運算
- and:與
and r1,r2,r3
and r1,r2 - orr:或
orr r1,r2,r3 - bic:位清除
bic r1,r2,r3