- 嵌入式系統(tǒng)設計與實踐:Linux篇
- 季江民
- 1016字
- 2020-04-03 09:21:45
3.3 常用ARM指令
3.3.1 內存訪問指令
1.基本指令
ldr:存儲器memory中數(shù)據(jù)傳送到寄存器register
str:寄存器register中數(shù)據(jù)傳送到存儲器memory
例如:
ldr r0, [r1] ; r1作為指針,該指針指向的數(shù)存入r0 str r0, [r1, #4] ; r1+4作為指針,r0的值存入該地址 str r0, [r1, #4]! ; 同上,并且r1 = r1 + 4 ldr r1, =0x08100000 ; 立即數(shù)0x08100000存到r1 ldr r1, [r2], #4 ; r2+4作為指針,指向的值存入r1,并且r2=r2+4
2.多字節(jié)存取指令
多字節(jié)存取指令常應用于堆棧操作。
ldm:存儲器memory中數(shù)據(jù)傳送到多個寄存器
stm:多個寄存器中的數(shù)據(jù)傳送到存儲器memory
例如:
sub lr,lr, #4 ;lr-4是異常處理完后應該返回的地方 stmfd sp! , {r0-r12, lr};保存r0~r12和lr寄存器的值到堆棧并更新堆棧指針。 ldmfd sp! , {r0-r12, pc}^ ;從堆棧中恢復r0~r12,返回地址賦給pc指針,使程序返回 到異常發(fā)生前所執(zhí)行的地方,^標記用來使CPU退出異常模式,進入普通狀態(tài)。
3.3.2 算術運算指令
基本指令:
add:加法指令
sub:減法指令
例如:
add r0,r1, r2 ; r0 = r1 + r2 adds r0,r1, #0x80 ; r0 = r1 + 0x80,并設置狀態(tài)寄存器 subs r0,r1, #2000 ; r0 = r1-2000,并設置狀態(tài)寄存器
3.3.3 邏輯運算指令
基本指令:
and:與指令
orr:或指令
eor:異或
bic:位清0
例如:
ands r0, r1, #0xff00 ; r0 = r1 and 0xff00,并設置狀態(tài)寄存器 orr r0,r1, r2 ; r0 = r1 and r2 bics r0,r1, #0xff00 ; r0 = r1 and ! (0xff00),高8位清零
3.3.4 mov指令
例如:
mov r0, #8 ; r0 = 8 mov r0,r1 ; r0 = r1
mov不同于LDR、STR指令,mov指令可以在寄存器間賦值,LDR用于把內存中數(shù)據(jù)裝載到寄存器,而STR用于把寄存器中的數(shù)據(jù)裝載到內存中。
3.3.5 比較指令
基本指令:
cmp:比較兩個操作數(shù),并設置狀態(tài)寄存器
例如:
cmp r0,r1 ;計算r0- r1,并設置狀態(tài)寄存器,判斷r0是否大于、小于或等于r1 cmp r0,#0 ;
3.3.6 跳轉指令
基本指令:
b:跳轉
bl:跳轉并將下一指令的地址存入lr寄存器
例如:
loop1 … b loop1 ; 跳到地址loop1處 bl sub1 ; 將下一指令地址寫入lr,并跳至sub1 … sub1 … mov pc , lr ; 從sub1中返回,保存pc指針的是通用寄存器r15,連接寄存器 r14(lr)執(zhí)行有返回的跳轉指令bl時,系統(tǒng)將PC保存到r14中。
3.3.7 條件執(zhí)行指令
條件:狀態(tài)寄存器中某一或某幾個比特的值代表條件,對應不同的條件后綴cond。

例如:
;跳轉代碼 cmp r0, r1 ;比較r0和r1 blgt sub1 ;如果r0>r1,跳轉到sub1,否則不操作
在這段程序代碼中,通過指令cmp比較r0與r1寄存器的值,如果r0>r1,跳轉到sub1,否則不操作。
例如:
;一段循環(huán)代碼 ldr r2, =8 ; r2 = 8 loop ;這里可以進行一些循環(huán)內的操作 subs r2, r2, #1 ; r2 = r2-1,并設置狀態(tài)位 bne loop ;如果r2不等于0,則繼續(xù)循環(huán)
在這段程序代碼中,通過指令cmp比較與寄存器r2是否為0,如果r2不等于0,則跳轉到loop繼續(xù)循環(huán)。
mov r0, #1 ; r0 = 1 cmp r2, #8 ;比較r2和8 movlt r0, #2 ;如果r2<8, r0 = 2
在這段程序代碼中,通過指令cmp對r2的值與8比較,指令movlt中表明如果r2<8,則把值2賦給r0。
推薦閱讀
- 單片機基礎及應用項目式教程
- MC9S12XS單片機原理及嵌入式系統(tǒng)開發(fā)
- FPGA嵌入式項目開發(fā)三位一體實戰(zhàn)精講
- 單片機應用項目化教程
- 嵌入式Linux接口開發(fā)技術
- 嵌入式產品分析與設計
- STM32單片機全案例開發(fā)實戰(zhàn)
- PIC單片機常用模塊與綜合系統(tǒng)設計實例精講
- 基于STM32的嵌入式系統(tǒng)設計與實踐
- 嵌入式Linux與物聯(lián)網軟件開發(fā):ARM處理器開發(fā)自學教程
- 單片機原理與接口技術
- 51單片機工程師是怎樣煉成的:基于C語言+Proteus仿真
- STC 32位 8051單片機原理與應用
- 單片機技術及應用(第2版)
- 案例解說組態(tài)軟件典型控制應用