CPU架構決定大小端模式

2021-07-05 06:04:42 字數 1471 閱讀 9154

不同體系結構的cpu,資料在記憶體中存放的排列順序是不一樣的。

儲存器中對資料的儲存是以位元組(byte)為基本單位的,因此,字(word)和半字(half-word)在儲存器中就有兩種次序,分別稱為:大端模式(big endian)小端模式(little endian)

大端儲存模式是指字或半字的最高位元組(most significant bit,msb)存放在記憶體的最低位位元組位址上,而字資料的低位元組則存放在高位址中。打個比方,有乙個字為0x12345678,這個字由4個位元組組成,從高位到低位的次序為:0x12,0x34,0x56,0x78。如果把這個字存放在以0x00000000起始的記憶體中,這個字在記憶體中的實際存放情況如下表:

記憶體位址

儲存的資料(byte)

0x00000000

0x12

0x00000001

0x34

0x00000002

0x56

0x00000003

0x78

0x00000004 ……

大端模式的次序就像是我們平時書寫的次序,先寫大數,後寫小數。另外,大端儲存次序還廣泛運用在tcp/ip協議上,因此又稱為網路位元組次序

小端儲存模式是指字或半字的最低位位元組(lowest significant bit,lsb)存放在記憶體的最低位位元組位址上,而字資料的高位元組則存放在高位址中。還以0x12345678為例,在小端模式下儲存如下表所示:

記憶體位址

儲存的資料(byte)

0x00000000

0x78

0x00000001

0x56

0x00000002

0x34

0x00000003

0x12

0x00000004 ……

需要注意的幾點是:

(1)   資料在暫存器中都是以大端模式次序存放的。

(2)   對於記憶體中以小端模式存放的資料。cpu訪問數成時,小端和大端之間的轉換是通過硬體實現的,沒有資料載入/儲存的開銷。

知道了大小端模式的概念,但如果讓我們用c語言寫段**判斷乙個cpu是大端模式還是小端模式應當如何做呢 ?

要用c語言簡潔的實現就要用到聯合體(union),簡單的說union就是一種結構,在union中所有的資料成員共用乙個儲存空間,在同一時間只能儲存其中的乙個資料成員,所有的資料成員具相同的起始位址,相對於基位址的偏移量都為0;

採用union來判斷,具體**如下:

int checkendian(void)

endian;

endian.word=1;

if(1 == endian.half)

return little_endian;

else

return big_endian;

}

CPU的大小端模式

不同體系結構的cpu,資料在記憶體中存放的排列順序是不一樣的。儲存器中對資料的儲存是以位元組 byte 為基本單位的,因此,字 word 和半字 half word 在儲存器中就有兩種次序,分別稱為 大端模式 big endian 和小端模式 little endian 大端儲存模式是指字或半字的最...

CPU大小端判斷

big endian 認為第乙個位元組是最高位位元組 按照從低位址到高位址的順序存放資料的高位位元組到低位位元組 大端 而little endian 則相反,它認為第乙個位元組是最低位位元組 按照從低位址到高位址的順序存放資料的低位位元組到高位位元組 小端 用 c程式設計實現判斷,如下 測試你的機器...

判斷乙個CPU大小端模式

請寫乙個c函式,若處理器是big endian的,則返回0 若是little endian的,則返回1 解答 int checkcpu c c.a 1 return c.b 1 剖析 嵌入式系統開發者應該對little endian和big endian模式非常了解。採用little endian模...