常規
ldr r2,[r5] ;將r5為位址的儲存單元中的資料載入到r2中。
str r1,[r0,#0x04] ;將r1中的內容存放在以 r0 + 0x04 的記憶體位址單元中。
傳送指令型別:
ldrb r3,[r2],#1 ;以r2為位址讀取乙個位元組資料到r3中。r2更新 r2 = r2 + 1
strh r1,[r0,#2]! ;半字送達,傳送r1中低兩位元組資料至r0+2為位址的儲存單元,r0更新。
多暫存器補充:
在非使用者或系統模式下,可出現"^"字尾,若ldm指令暫存器列表包含pc,則會額外將spsr拷貝給cpsr。
例:
mov r1,r0 ;將r0的資料放進r1中;
mov r1,r0,lsl #3
;將r0的數值乘8賦值給r1;
mvn r0,#0;將立即數0取反傳賦值給r0;
例1:64為整數加法
r0/r1與r2/r3分別放兩個加數的低/高32位,r4/r5存放結果的低/高32位
adds r4,r0,r2 ;帶s字尾結果會影響cpsr中的標誌位c,如果不帶s那麼計算中的進製會被省略導致最終的結果發生錯誤。
adc r5,r1,r3;帶進製的加法,c標誌位參與運算。
例2:64為整數減法
subs r4,r0,r2
sbc r5,r1,r3
例3:逆向減法
rsb r0,r1,r2 ;r0 = r2 - r1。
rsc r0,r1,r2 ;r0 = r2 - r1 - c標誌位的反碼。
例4:邏輯運算
and r0,r0,#3
;保持r0的0位和1位,其餘清0。
orr r0,r0,#3
;置位r0的0位和1位, 其餘不變。
eor r0,r0,#3
;反轉r0的0位和1位,其餘不變。
bic r0,r0,#3
;清0 r0的0位和1位,其餘不變。
例5:比較指令
cmp r1,r0 ;r1 - r0,結果影響cpsr中的標誌位,但是不保留運算的結果。
cmn r0,#1
;判斷r0的數值是否是1的補碼,如果是則z置位。
例6:測試指令
tst r1,#3
;按位與,結果影響cpsr中的標誌位。
teq r1,r2 ;按位或,結果影響cpsr中的標誌位。
例7:乘法指令
mul:32位乘法。
mla:3位運算元,將運算元1與運算元2相乘,結果加第三個操作書,存入目的暫存器。
mal rd,rm,rs,rn ;rd = rm * rs + rn。
規則:rd和rm不能是用一暫存器;
形成兩個向量的標誌量積例程:
mov r11 ,#20
;計數即代表向量維度
mov r10,#0
;初始化結果暫存器
loop:
ldr r0,
[r8]
,#4;讀取向量1指標
ldr r1,
[r9]
,#4;讀去向量2指標
mal r10,r0,r1,r10
subs r11,r1,r10
bne loop
含義:跳轉指令用於控制程式的走向,可以完成從當前指令向前或向後4位元組的位址空間跳轉,包括基本跳轉指令,帶返回跳轉指令bl,帶狀態切換(arm與thumb之間)的跳轉指令bx,帶返回和狀態切換的跳轉指令blx
例:
bl label ;程式無條件挑戰到label處執行
;同時將pc數值存放到r14中
mov lr,pc
b label ;利用b指令也可以完成上面的操作
此外還有不受範圍限制的跳轉指令:
ldr pc,
=label
cpsr[31:24]: _f(標誌域)
cpsr[23:16]: _s(狀態域)
cpsr[15:08]: _x(擴充套件域)
cpsr[07:00]: _c(控制域)
例:
清cpsr標誌位
msr r0,cpsr ;將cpsr的數值賦值給r0;msr指令用於cpsr賦值給暫存器
bic r0,r0,#0xf0000000
;清高四位
msr cpsr_f,r0 ;將r0的數值賦給cpsr,因為帶了標誌域,則指令只會修改31
-24其他自動遮蔽
-----繾綣
arm 彙編學習
一 暫存器和定址 arm有16個暫存器,r0 r15 pc r15 lr r14 sp r13 ip r12 push sp減少,pop sp增加 1.定址方式 從操作位址尋找運算元的方式 2.arm的定址方式 a 暫存器定址,運算元在暫存器中 b 立即定址,運算元就在指令中 subs r0,r0,...
ARM彙編學習
前言 任何彙編行都是如下結構 comment 注釋 gnu arm 彙編中,任何以冒號結尾的都被認為是乙個標籤,而不一定非要在一行的開始。下面是乙個簡單的例子,這段匯程式設計序定義了乙個 add 的函式,該函式返回兩個引數的和 section text,x global add give the s...
ARM彙編學習
前言 任何彙編行都是如下結構 comment 注釋 gnu arm 彙編中,任何以冒號結尾的都被認為是乙個標籤,而不一定非要在一行的開始。下面是乙個簡單的例子,這段匯程式設計序定義了乙個 add 的函式,該函式返回兩個引數的和 section text,x global add give the s...