一、ARM的指令結構
1、ARM匯編程序組成:
匯編指令+偽操作+宏指令(instruction directive pseudo-instruction);
偽操作:定義符號、數(shù)據(jù)等使用
宏指令:使用宏定義指令方式
2、匯編指令的組成:
操作碼、操作條件(根據(jù)CPSR中的N、Z、C、V等標志)、操作數(shù)(源、目的/地址或寄存器)、條件、地址變化等等;
3、ARM指令和簡化的Thumb指令可以相互跳轉
B、BL、BLX、BX帶L表示考慮LR寄存器,而X實現(xiàn)不同指令模式的切換;
4、批量操作地址的方式分類
IA、IB、DA、DB
A:after B:before I:increment D:decrement
亦即:事后遞增 事先遞增 事后遞減 事先遞減 四種方式;
5、棧類型及尋址
FD ED FA EA
F:full E:empty D:descending A:Ascending
FULL/EMPTY棧:區(qū)別在于指向棧定的指針是否指向有效數(shù)據(jù),是則為FULL棧,否則為EMPTY棧;
DESCENDING/ASCENDING: 數(shù)據(jù)棧按內(nèi)存地址減小方式增長為DESCENDING棧,相反為ASCENDING棧;
二、ARM的存儲系統(tǒng)及MMU和MPU的差別與聯(lián)系
1、ARM的存儲系統(tǒng)
CASHE及WRITE BUFFER技術用于縮小內(nèi)存和處理器之間差距;
存儲類型:ROM(FLASH/ROM)+RAM(SRAM、DRAM、SDRAM[ sychronization DRAM])
ARM采用協(xié)處理器CP15來進行存儲器的管理;
2、存儲器管理單元MMU
MMU可以實現(xiàn)對內(nèi)存的精細控制:16域\段:1M\大頁 64KB\小頁 4KB\小頁1KB
MMU主要實現(xiàn)的功能:
1、物理地址和虛擬地址的映射;
2、memory讀寫權限AP的設置;
3、B、C(buffer-ability 和 cachability)是否可以使用cache和寫緩沖;
是否使用MMU功能:可以通過CP15的寄存器進行使能設置;
對于MMU實現(xiàn)需要引入頁表(translate table)機制,頁表存儲在內(nèi)存,系統(tǒng)通常提供一個寄存器來存儲頁表的基地址,為了解決內(nèi)存訪問速度問題,采用類似cache方式,引入快表TLB(translation lookaside buffer)機制,小的快速的存儲期間來存儲當前需要訪問的地址變換頁表。(相應塊表可以存在無效、鎖定等操作。)
頁表中存儲著虛擬地址對應的物理地址、訪問權限、緩沖特性等。
頁表根據(jù)設置空間使用情況分為:分為一、二級頁表;粗粒度二級表和細粒度二級表;一級頁表包含以段為單位的地址變換條目以及指向二級頁表的指針。二級頁表包含以大小頁為單位的地址變換條目。
關于訪問控制權限:需要C1寄存器的R、S控制位和頁表中AP來共同控制;
關于域:最多支持16個域,設置每個域的訪問控制特性,可以控制是否從頁表得到訪問權限...
3、MPU與MMU差別
MPU只是簡單支持MMU一小部分功能:不支持虛擬地址和實地址的映射;不支持頁表;(MMU需要更多硬件來支持相應的功能);
MPU最多可以分為8個域,對相應的域進行B、C、AP的設置;
同樣CP15可以控制MPU的功能開關,對于域的設置可以存在地址的重疊,一般如果地址重疊,后面的域設置具有更高的優(yōu)先級;
4、CACHE及WRITE BUFFER技術
cache和寫緩沖用來解決CPU速度大于內(nèi)存的問題,而cache得成本比內(nèi)存高;
cache高速緩沖存儲器,可以數(shù)據(jù)指令分開,也可以使用同一cache;
cache有寫回法和寫通法:寫回法指CPU寫數(shù)據(jù)寫入cache,而寫通法是指數(shù)據(jù)修改cache的同時,也寫入內(nèi)存。
cache內(nèi)容和內(nèi)存地址的映射:有全相聯(lián)映射方式、直接映像方式、組組相聯(lián)映像方式。
cache的存儲空間小于內(nèi)存,所以存在cache內(nèi)容的替換問題,ARM中cache的替換算法:隨機替換和輪轉法
5、快速進程上下文切換(fast context switch extension,F(xiàn)CSE)
主要解決多個進程映射虛擬地址映射重疊問題,簡單理解增加了進程ID PID來區(qū)分,解決這個引起的開銷問題。
小貼士:
1、關于ASR LSR ROR RRX的差別:
--ASR 算數(shù)右移;
--LSR 邏輯右移 和ASR差別在符號位;
--ROR 循環(huán)右移;
--RRX 帶擴展的循環(huán)右移 主要是用CPSR中的C填充移入,并且移出的位改寫C(carry out)位;
2、使用cache應注意的問題
寫入數(shù)據(jù)只寫入cache的情況下,如果硬件如DMA資源直接從物理地址取數(shù)據(jù),需要注意同步問題??梢栽谟|發(fā)硬件資源之前操作cache內(nèi)容同步到內(nèi)存中。
3、子程序參數(shù)的傳遞規(guī)則
可變參數(shù):R0~R3,多與4個參數(shù),則用棧來進行傳送;返回一個32整數(shù)用R0,64位R0-R1,浮點通過f0、D0、s0傳送?
4、MMU和MPU差別參考:
ARM Architecture Reference Manual