1、資料傳送指令 mov
move r1,r2 /r1=r2/
move r1,#4096 /r1=4096/
2、偽指令ldr 用於將乙個大於八位的資料裝入暫存器
ldr r1,=0x123456789 /r1=0x123456789/
ldr r1,=label /獲取絕對位址,即label的位址/
label:
……3、記憶體訪問指令(當ldr後面沒有=時為記憶體訪問指令)
讀取指令:ldr
ldr r1 ,[r2,#4] /將記憶體位址為r2+4的資料讀取到r1中,相當於c語言中的操作*/
ldr r1,[r2],#4 /將記憶體位址為r2的資料讀取到r1中,再將位址加4,r2=r2+4/
ldr pc,_irq /pc=(_irq)將標號中的內容放入pc中
_irq:
.word do_swi
儲存指令:str
str r1 ,[r2,#4] /將r1的值存入位址為r2+4的記憶體中/
str r1,[r2],#4 /將r1的值存入位址為r2的記憶體中,再將位址加4,r2=r2+4/
4、批量記憶體訪問指令 ldm stm
格式:ldm
stm
格式說明:
1):表示指令的執行條件,根據cpsr暫存器中的條件標誌位決定是否執行該條指令,每條arm指令包含4bit的條件碼域,
可以定義16個執行條件,具體如下表:
3) 中儲存記憶體的位址,如果後面加上!,指令執行完成後,rn的值會更新,等於下乙個記憶體的位址,否則保持初始值。
4)表示暫存器列表,對於ldm指令,從所對應的記憶體塊中讀取資料寫入這些暫存器,對於stm把這些暫存器的值寫入
對應的記憶體塊中。如果暫存器位址連續,可以寫成r1-rx的格式,不連續的用逗號隔開。^符號有兩種含義:如果有pc暫存器,
它表示指令執行後,spsr寄存中的值將自動複製到cpsr暫存器中–這通常用於中斷處理函式的返回;如果沒有pc暫存器,那^表示操作的是
使用者模式下的暫存器,而不是當前特權模式下的暫存器。
5)指令中與的對應關係為:編號低的暫存器對應記憶體中低位址單元,編號高的暫存器對應記憶體中高位址單元,具體如下:
擴充套件:ldmfd
5、算術指令
加指令:add
add r1,r2,#1 /r1=r2+1/
減指令:sub
sub r1,r2,#1 /r1=r2-1/
乘指令:mul
mul r1,r2,#4 /r1=r24*/
6、程式狀態暫存器訪問指令
msr cpsr, r0 /* s
mrs r0,cpsr /r
7、相對跳轉指令 b bl
1)這兩條指令的區別在於bl除了跳轉以外,還將返回位址(bl的下一條指令位址)儲存在lr暫存器中
2)這兩條指令的跳轉範圍是當前指令前後32m範圍內
3)他們是位置無關的指令,相對跳轉
e.g:
b fun1
fun1:
bl fun2
fun2:
…8、其他指令
比較指令:cmp
cmp r1,r2 /*根據對比的結果設定cpsr暫存器的標誌位,參考arm指令條件碼表
邏輯指令
位與:and(相當於&)
and r0,r1,#0xff /r0=r1&0xff/
位或:orr(相當於|)
orr r0,r1,#0xff /r0=r1|0xff/
清零:bic
bic r0,r0,#0x03 /將r0中的第一位和第二位清零/
測試:tst
tst r0,#0x20 /測試第六位是否為0,為0則將cpsr的z位置1/
常用彙編指令
1 加減指令 2 adr指令 adr是小範圍的位址讀取偽指令,ldr是大範圍的讀取位址偽指令。可實際上adr是將基於pc相對偏移的位址值或基於暫存器相對位址值讀取的為指令,而ldr用於載入32為立即數或乙個位址到指定的暫存器中。到這兒就會看到其中的區別了。如果在程式中想載入某個函式或者某個在聯接時候...
常用彙編指令
一 資料傳輸指令 它們在存貯器和 暫存器 寄存 器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依...
彙編指令msr STM 常用彙編指令
在嵌入式開發中,匯程式設計序常常用於非常關鍵的地方,比如系統啟動時初始化,進出中斷時 的環境保護,恢復等對效能有要求的地方。arm指令集可以分為六大類,分別為資料處理指令 load store 指令 跳轉指令 程式狀態 暫存器處理指令 協處理器指令和異常產生指令。arm指令使用的基本格式如下 opc...