mov r1,r0; @兩個寄存器之間數據傳輸
mov r1,#0xff @將當即數賦值給寄存器ide
mvn和mov用法同樣,區別是mov是原封不動的傳遞, 而mvn是按位取反後傳遞。
按位取反的含義:
好比: r1 = 0x000000ff,而後mov r0,r1後,r0 = 0xff 可是我mvn r0,r1後,r0=0xffffff00 函數
經常使用ARM指令2:cpsr訪問指令
經常使用mrs&msr
mrs用來讀psr,msr用來寫psr
CPSR寄存器比較特殊,須要專門的指令訪問,這就是mrs和msr。
cpsr和spsr的區別和聯繫:
cpsr是程序狀態寄存器,整個SOC中只有1個;而spsr有5個,分別在5中異常模式下,做用是當從普通模式進入異常模式時,用來保存以前普通模式下的cpsr的,以在返回普通模式時恢復原來的cpsr。
經常使用ARM指令3:跳轉(分支)指令
b & bl & bx
b 直接跳轉(就沒打算返回,經常使用於絕對跳轉)
bl branch and link,跳轉前把返回地址放入lr中,以便返回,以便用於函數調用
bx 跳轉同時切換到ARM模式,通常用於異常處理的跳轉。
經常使用ARM指令4:訪存指令
ldr/str & ldm/stm & swpcode
單個字/半字/字節訪問 ldr/str
多字批量訪問 ldm/stm
swp r1, r2, [r0]
swp r1, r1, [r0]ci
協處理器和協處理器指令string
協處理器cp15操做指令
mcr & mrcit
mrc用於讀取CP15中的寄存器
mcr用於寫入CP15中的寄存器io
經常使用gnu僞指令
.global _start @ 給_start外部連接屬性
.section .text @ 指定當前段爲代碼段
.ascii .byte .short .long .word
.quad .float .string @ 定義數據
.align 4 @ 以16字節對齊
.balignl 16 0xabcdefgh @ 16字節對齊填充
.equ @ 相似於C中宏定義
.end @標識文件結束
.include @ 頭文件包含
.arm / .code32 @聲明如下爲arm指令
.thumb / .code16 @聲明如下爲thubm指令class
ldr 大範圍的地址加載指令
adr 小範圍的地址加載指令
adrl 中等範圍的地址加載指令
nop 空操做psr
ARM中有一個ldr指令,還有一個ldr僞指令
通常都使用ldr僞指令而不用ldr指令float