ARM體系架構(gòu)中的存儲(chǔ)系統(tǒng)
在計(jì)算機(jī)系統(tǒng)當(dāng)中,數(shù)據(jù)的存儲(chǔ)是以字節(jié)為單位的,每個(gè)地址單元當(dāng)中都可以存放一個(gè)字節(jié)的數(shù)據(jù),每個(gè)字節(jié)為8bit。在C語(yǔ)言中編譯器為char型的數(shù)據(jù)分配了一個(gè)字節(jié)的存儲(chǔ)空間,為long型的數(shù)據(jù)分配了4個(gè)字節(jié)的存儲(chǔ)空間,為int型的數(shù)據(jù)分配了2個(gè)字節(jié)的存儲(chǔ)空間(要看具體的編譯器),這樣當(dāng)所定義的數(shù)據(jù)類(lèi)型占用的存儲(chǔ)空間大于一個(gè)字節(jié)時(shí)就需要用多個(gè)字節(jié)的空間來(lái)存儲(chǔ)一個(gè)數(shù)據(jù),即一個(gè)數(shù)據(jù)占用了多了地址單元,這樣就存在著一個(gè)存儲(chǔ)順序的問(wèn)題,即這幾個(gè)字節(jié)在內(nèi)存單元中是以什么樣的順序來(lái)存儲(chǔ)的。
在A(yíng)RM體系中通常采用的字節(jié)存儲(chǔ)機(jī)制主要有兩種:Big-Endian(大端模式)Little-Endian(小端模式)。Big-Endian是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的高地址中。Little-Endian是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中,這種存儲(chǔ)模式將地址的高低和數(shù)據(jù)位權(quán)有效地結(jié)合起來(lái),高地址部分權(quán)值高,低地址部分權(quán)值低,和我們的邏輯方法一致。
舉一個(gè)例子,比如十六進(jìn)制數(shù)字0x12345678在內(nèi)存中的表示形式為:
1)大端模式:
低地址 -----------------> 高地址
0x12 | 0x34 | 0x56 | 0x78
2)小端模式:
低地址 ------------------> 高地址
0x78 | 0x56 | 0x34 | 0x12
在A(yíng)RM體系結(jié)構(gòu)中采用Big-Endian存儲(chǔ)模式還是Little-Endian存儲(chǔ)模式都各有利弊,比如在Little-Endian模式下強(qiáng)制轉(zhuǎn)換數(shù)據(jù)不需要調(diào)整字節(jié)內(nèi)容,而在Big-Endian模式下符號(hào)位的判定固定為第一個(gè)字節(jié),與Little-Endian模式相比較更容易判斷數(shù)據(jù)的正負(fù)。
在A(yíng)RM體系中默認(rèn)的存儲(chǔ)格式為小端對(duì)齊,但ARM處理器還可以由硬件來(lái)選擇是大端模式還是小端模式。