當前位置:首頁 » 服務存儲 » 機器碼小端存儲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

機器碼小端存儲

發布時間: 2023-05-22 22:14:48

⑴ 計組中的大端,小端到底是數據存儲方式還是地址指定方式

大端序就是數據的高位放在內存的低地址,數據的低位放在內存的高地址,這符合人類的閱讀方式。例如將0x12345678這個數放在內存地址0x0~0x3這4位元組空間中,它的表現形式是:12 34 56 78。其中0x0地址存放12,0x1地址存放34,0x2地址存放56,0x3地址存放78。
小端序就是數據的低位放在內存的低地址,數據的高位放在內存的高地址,這符合機器的閱讀方式。例如將0x12345678這個數放在內存地址0x0~0x3這4位元組空間中,它的表現形式是:78 56 34 12。其中0x0地址存放78,0x1地址存放56,0x2地址存放34,0x3地址存放12。
x86CPU使用小端序作為數據的存儲方式。

⑵ Big Endian與Little Endian位元組存儲順序

不同的CPU有不同的位元組序類型,這些位元組序是指整數在內存中保存的順序。分為小端格式和大端格式(Little-Endian&Big-Endian):

比如0x1234; 低8位是34,高8位是12;如果它們分配的內存其實地址是0x0001,
那麼如果是大端存儲,那麼0x0001內存低位地址存放高位位元組12;如果是小端存儲,那麼0x0001內存低位地址存放低位位元組34,0x0002存放12。

據Jargon File記載,endian這個詞來源於Jonathan Swift在1726年寫的諷刺小說 "Gulliver's Travels"(《格利佛游記》)。該小說在描述Gulliver暢游小人國時碰到了如下的一個場景。在小人國里的小人因為非常小(身高6英寸)所以總是碰到一些意想不到的問題。有一次因為對水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開的爭論而引發了一場戰爭,並形成了兩支截然對立的隊伍:支持從大的一端剝開的人Swift就稱作Big-Endians,而支持從小的一端剝開的人就稱作Little-Endians......(後綴ian表明的就是支持某種觀點的人)。

1980年,Danny Cohen在其著名的論文"On Holy Wars and a Plea for Peace"中為了平息一場關於在消息中位元組該以什麼樣的順序進行傳送的爭論而引用了該詞。該文中,Cohen非常形象貼切地把支持從一個消息序列的最高位開始傳送的那伙人叫做Big-Endians,支持從最低位開始傳送的相對應地叫做Little-Endians。此後Endian這個詞便隨著這篇論文而被廣為採用。

little endian和big endian是表示計算機位元組順序的兩種格式,所謂的位元組順序指的是長度跨越多個位元組的數據的存放形式.

假設從地址0x00000000開始的一個字中保存有數據0x1234abcd,那麼在兩種不同的內存順序的機器上從位元組的角度去看的話分別表示為:

需要特別說明的是,以上假設機器是每個內存單元以8位即一個位元組為單位的. 簡單的說,little endian把低位元組存放在內存的低位;而big endian將低位元組存放在內存的高位.

現在主流的CPU,intel系列的是採用的little endian的格式存放數據,而motorola系列的CPU採用的是big endian.

比如: int x, 它的地址為0x100。 那麼它占據了內存中的Ox100, 0x101, 0x102, 0x103這四個位元組(32位系統,所以int佔用4個位元組)。

上面只是內存位元組組織的一種情況: 多位元組對象在內存中的組織有一般有兩種約定。 考慮一個W位的整數。它的各位表達如下:
Xw-1, Xw-2, ... , X1, X0,它的
MSB (Most Significant Byte, 最高有效位元組)為 Xw-1, Xw-2, ... Xw-8;
LSB (Least Significant Byte, 最低有效位元組)為 X7,X6,..., X0。
其餘的位元組位於MSB, LSB之間。

這就引出了大端(Big Endian)與小端(Little Endian)的問題。如果LSB在MSB前面, 既LSB是低地址, 則該機器是小端; 反之則是大端。

對於數據中跨越多個位元組的對象, 我們必須為它建立這樣的約定:

對於跨越多個位元組的對象,一般它所佔的位元組都是連續的,它的地址等於它所佔位元組最低地址。(鏈表可能是個例外, 但鏈表的地址可看作鏈表頭的地址)。

import java.nio.ByteOrder;

⑶ 某 32 位計算機按位元組編址,採用小端(Little Endian)方式。若語句「int i =

-64用32位二進制存儲,16進製表示為FF FF FF C0

又因為題目中說明是小端存儲,即數據的低位元組保存在內存的低地址中,所以要反過來是C0 FF FF FF

故而,選擇A