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 暫存器定址
addr0,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] ;str r0, [r1]; 把r0的值,存入到r1對應位址空間上(*r1 = r0)r1的值當成位址,再從這個位址裝入資料到r0 (r0=*r1)
ldr r1, =0x30008000; 把位址0x30008000的值裝入到r1中,ldr中用常數要用=打頭.(注意跟mov的區別,mov是#)
str r0, =0x30008000;把r0中值存入到位址0x30008000
5.3 算術運算指令
add r0, r1, r2 ;sub r0, r1, r2; r0=r1-r2r0=r1+r2
add r0, r1, #3
; r0=r1+3
sub r0, r1, #3; r0=r1-3
mul r0, r1, r2; r0=r1*r2mul 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,十六進製制數類似 三 二進位制數或十六進製制數轉換為十進位制數 使用權的展開式 ...