ARM彙編基礎知識

2022-09-19 16:18:12 字數 3765 閱讀 8224

1。risc和cisc

risc:精簡指令集,多條簡單指令完成一項任務

cisc:複雜指令集,一條指令完成一項任務

2.統一編址和獨立編址

統一編址:io外設和記憶體使用同一段記憶體空間,外設會消耗定址空間資源

獨立編址:io外設和記憶體使用不同的記憶體空間,外設不占用消耗定址空間資源

3.哈佛結構和馮諾依曼結構

哈佛結構:程式和資料分開獨立存放,安全性高

馮諾依曼結構:程式和資料不區分放在一起

4.arm彙編8種定址方式

4.1 立即數定址

mov r0,#64  ;64賦值給r0暫存器

add r0, r0, #1  ;  r0   ← r0 + 1

sub r0, r0, #0x3d  ;  r0   ← r0 – 0x3d

4.2 暫存器定址

add

r0,r1,r2 ;r0 ← r1 + r2

mov r0, r1 ;

r0 ← r1

4.3 暫存器間接定址

ldr r0,[r1]  ;取暫存器r1的值作為運算元的位址,把取得運算元傳送到r0中

4.4 暫存器偏移定址

mov r0,r2,lsl  #3   ;r0 ← r2 * 8

,r2的值左移3位,結果賦給r0。

mov r0,r2,lsl r1 ;r2的值左移r1位,結果放入r0。

4.5 暫存器基址變址定址

ldr r0,[r1,#4

] ;r0 ←[r1 +

4],將r1的內容加上4形成運算元的位址,取得的運算元存入暫存器r0中。

ldr r0,[r1,#

4]!;r0 ←[r1 +

4]、r1 ←r1 + 4,將r1的內容加上4形成運算元的位址,取得的運算元存入暫存器r0中,然後,r1的內容自增4個位元組。其中!表示指令執行完畢把最後的資料位址寫到r1。

4.6 多暫存器定址

ldmia  r0,  ;

ldm:load data from memory to register. r1←[r0],r2←[r0+4],r3←[r0+8],r4←[r0+12]

ldmia r0, ;功能同上。

4.7 相對定址

bl   next  ;相對定址,跳轉到next處執行。

4.8 堆疊定址

stmfd  sp!, {r1-r7, lr} ; stm: 

store data from register to stack (memory). 將r1-r7, lr壓入堆疊。滿遞減堆疊。

ldmed sp!, {r1-r7, lr};將堆疊中的資料取回到r1-r7, lr暫存器。空遞減堆疊。

5.arm常用指令

5.1 資料傳輸指令

mov  r0, r1  ;

r1的值傳給r0

mov  r1, #3 ; 立即數3傳給

mvn  r1, r2 ; r2取反後傳給r1

mvn  r2, #5 ; 5取反後傳給r

5.2 載入儲存指令

ldr  r0, [r1]  ;

r1的值當成位址,再從這個位址裝入資料到r0 (r0=*r1)

ldr  r1, =0x30008000; 把位址0x30008000的值裝入到r1中,ldr中用常數要用=打頭.(注意跟mov的區別,mov是#)

str  r0, [r1]; 把r0的值,存入到r1對應位址空間上(*r1 = r0)

str  r0, =0x30008000;把r0中值存入到位址0x30008000

5.3 算術運算指令

add  r0, r1, r2  ;

r0=r1+r2

add  r0, r1, #3

; r0=r1+3

sub  r0, r1, r2; r0=r1-r2

sub  r0, r1, #3; r0=r1-3

mul  r0, r1, r2; r0=r1*r2

mul  r0, r1, #3; r0=r1*3

5.4 位操作指令

and  r0, r1, r2  ;

r0=r1 & r2

and  r0, r1, #0xff ;

r0=r1 & 0xff

orr  r0, r1, r2

;r0=r1 | r2

orr  r0, r1, #0xff ;

r0=r1 | 0xff

st  r1, #0xffe

;等同於if(r1 & 0xffe)

tst  r1, #%1

; 測試最低位是否為1,%表示二進位制

; 清位操作bic r0,r0,#0xf ; 等同於 r0 &=~(0xf)

bic r0,r0,#%

1011 ; 該指令清除 r0 中的位 0

13,其餘的位保持;

%表示是二進位制,0x表示十六進製制

5.5 比較指令

; cmp比較兩個運算元,並把結果存入cpsr供下一句語句使用

cmp  r0, r1 ;

比較r0,r1

5.6 多暫存器傳輸指令

; 類似於一次傳乙個buffer到暫存器當中,或反過來.後面一般要接乙個位址改變方法

; ldm 從buffer傳資料多個暫存器傳輸資料到

ldmia  r0!,

; 加r0指向的位址上連續空間的資料,儲存到r3-r9當中,!表示r0值更新,ia字尾表示按word遞增

ldmfd  sp!, ^

; 恢復現場,異常處理返回,^表示不允許在使用者模式下使用。

; stm 從暫存器列表向儲存空間傳值。

stmia  r1!,

; 將r3-r9的資料儲存到r1指向的位址上,r1值更新。

stmfd  sp!,

;現場儲存,將r0~r7,lr入棧

stmfd sp!, ; 把sp暫存器對慶的位址的值存到r8,r9當中.!表示最後的值寫入sp中。fd表示

5.7 跳轉指令

如實現類似c語言的return語句,就是用

mov  

pc, lr ; 函式返回

b指令(branch)表示無條件跳轉.

b  main

; 跳轉到標號為main地**處

bl指令(branch with link)表示帶返回值的跳轉.

bl比b多做一步,在跳轉前,bl會把當前位置儲存在r14(即lr暫存器),當跳轉**結束後,用mov pc,lr指令跳回來,這實際上就是c語言執行函式的用法,

彙編裡調子程式都用bl,執行完子函式後,可以用mov pc,lr跳回來.

bl  delay

; 執行子函式或**段delay ,delay可以為c函式.

與 mov  pc, *** 能在4g空間跳轉不同,b語句只能32m空間跳轉,(因為偏移量是乙個有符號26bit的數值=32m)

ARM基礎知識

arm處理器模式 模式可以理解為 工作環境。異常模式 svc管理模式 fiq 快速中斷模式 irq中斷模式 abort中止 undef 未定義模式 正常模式 system系統模式 user 使用者模式 1 6 模式稱為特權模式,7為非特權模式。pc機裡面有乙個執行級別的概念。某些程式執行在這個模式下...

彙編基礎知識

最近感覺自己學的到了乙個瓶頸,學的不知道有多少是記住的,總是感覺自己要學的東西有那麼多,時間又太少。專業課也越來越多,花在程式設計上的時間就少了,但是這畢竟是我的興趣愛好,所以我不想放棄。昨晚突然有個想法,以後寫部落格的頻率加快,儘管這樣部落格的質量也就下降了很多,但是我還是覺得部落格就是來記錄我成...

彙編 基礎知識

一 進製數的表示 十進位制後加d,二進位制後加b,八進位制加o,十六進製制加h 二 十進位制數轉換為二進位制數或十六進製制數 使用除2取餘法或使用除16取餘法,結果向上讀,如4,得餘數0 0 1,則相應二進位制為100,十六進製制數類似 三 二進位制數或十六進製制數轉換為十進位制數 使用權的展開式 ...