Arm彙編指令集2

什麼是協處理器oop

SoC內部另外一處理核心,協助CPU實現某些功能,被主CPU調用執行必定任務。spa

ARM設計上支持16個協處理器,可是通常SoC只實現其中的CP15(cp就是cooperation processor)。操作系統

協處理器和MMU、cache、TLB等處理有關,功能上和操做系統的虛擬地址映射、cache管理有關。設計

 

協處理器cp15操做指令:mcr & mrc指針

mrc用於讀取cp15中的寄存器ip

mcr用於寫入cp15中的寄存器內存

 

多寄存器訪問指令io

ldr/str每週期只能訪問4字節的內存,若是須要批量讀取,寫入內存時太慢,解決方案是stm/ldmpsr

ldm (load register mutiple)sso

stm(store register mutiple)

好比:

stmia  sp,{r0-r12}

將r0存入sp指向的內存處(假設爲0x30001000);而後地址+4(指向0x30001004),將r1存入該地址;而後地址再+4(指向0x30001008),將r2存入該地址......直到r12內容放入(0x30001030),指令完成。

一個訪存週期同時完成13個寄存器的讀寫。

 

主要還有這個ia這個後綴

ia(increase after)先傳輸,再地址+4

ib(increase before)先地址+4,再傳輸

da(decrease after)先傳輸,再地址-4

db(decrease before)先地址-4,再傳輸

fd(full decrease)滿遞減堆棧

ed(empty decrease)空遞減堆棧

fa(……)滿遞增堆棧

ea(……)空遞增堆棧

 

四種棧

空棧:棧指針指向空位,每次存入時能夠直接存入而後棧指針移動一格;而取出時須要先移動一格才能取出。

滿棧:棧指針指向棧中最後一格數據,每次存入時須要先移動棧指針一格再存入,取出時能夠直接取出,而後在移動棧指針。

增棧:棧指針移動時像地址增長的方向移動的棧。

減棧:棧指針移動時向地址減少的方向移動的棧。

 

!的做用

ldmia  r0,{r2-r3}

ldmia  r0! ,{r2-r3}

感嘆號的做用就是r0的值在ldm過程當中發生的增長或者減小最後寫回到r0去,也就是說ldm時會改變r0的值。

 

^的做用

ldmfd  sp!,{r0-r6,pc}

ldmfd  sp!,{r0-r6,pc}^

^的做用:在目標寄存器中有pc時,會同時將spsr寫入到cpsr。通常用於從異常模式返回。

相關文章
相關標籤/搜索