ARM體系中的存儲系統

關於ARM體系的存儲系統,在後面章節會有詳細的介紹。這裏僅僅介紹ARM編程模型中與存儲系統相關的一些概念。算法

ARM體系中的存儲空間:編程

ARM體系中使用單一的地址空間。該地址空間的大小爲2的32次方個8位字節。這些字節單元的地址都是無符號的32位數值,取值範圍是0~2^32 - 1。spa

ARM的地址空間也能夠看做是2^30個32位的字單元,這些字單元的地址能夠被4整除,也就是說,該地址的低兩位爲0b00。地址爲A的字數據包括地址爲A+一、A+二、A+3四個字節單元的內容。ci

各個存儲單元的地址做爲32位的無符號數,能夠進行常規的整數運算。這些運算的結果進行2^32取模。也就是說,運算結果發生上溢處和下溢處時,地址將會發生卷繞。it

ARM存儲器格式:table

在ARM體系中,每一個字單元中包含4個字節單元或2個半字單元;一個半字單元包含兩個字單元。可是在字單元中,4個字節哪個是高位字節,哪個是低位字節,則有兩種不一樣的格式:Big-endian格式和Little-endian格式。程序

在Big-endian格式中,對於地址爲A的字單元,包括字節單元A、A+一、A+二、A+3,其中字節單元由高位到低位字節順序爲A、A+一、A+二、A+3;這種存儲器格式以下表所示。數據

Big-endian格式的存儲系統
字單元A
半字單元A 半字單元A+2
31~24 23~16 15~8 7~0
字節單元A 字節單元A+1 字節單元A+2 字節單元A+3

在Little-endian格式中,地址爲A的字單元包括字節單元A、A+一、A+二、A+3;其中字節單元由高位到低位字節順序爲A+三、A+二、A+一、A;地址爲A的字單元包括半字A、A+2,其中半字單元由高到底位字節順序爲A+二、A;這種存儲格式以下表所示。異常

Little-endian格式的存儲系統
字單元A
半字單元A+2 半字單元A
31~24 23~16 15~8 7~0
字節單元A+3 字節單元A+2 字節單元A+1 字節單元A

非對齊的存儲訪問操做:tab

在ARM中,一般但願字單元的地址是對齊的,半字單元的地址是半字對齊的。在存儲訪問操做中,若是存儲單元的地址沒有遵照對齊規則,則稱爲非對齊的存儲訪問操做。

指令預取和自修改代碼:

在ARM中容許指令預取。在CPU執行當前指令的同時,能夠從存儲器中預取其後若干條指令,具體預取多少條指令,不一樣的ARM實現中有不一樣的數值。

預取的指令並不必定可以獲得執行。好比當前指令執行完後,若是發生了中斷異常,程序將會跳轉到異常中斷處理程序處執行,當前預取指令將被拋棄,或者若是執行了跳轉指令,則當前預取的指令也將被拋棄。

正如在不一樣的ARM實現中,預取的指令條數可能不一樣,當發生程序跳轉時,不一樣的ARM實現中採用的跳轉預測算法也可能不一樣。

自修改代碼指的是代碼在執行過程當中可能修改自身。對於支持指令預取的ARM系統,自修改代碼可能帶來潛在的問題。當指令被預取後,在該指令被執行前,若是有數據訪問指令修改了位於主存中的該指令,這時被預取的指令和主存中對應的指令不一樣,從而多是執行的結果發生錯誤。

相關文章
相關標籤/搜索