低位元組 高位元組 字位址 大端序 小端序全辨析

2021-07-23 09:11:11 字數 2342 閱讀 2509

@(組成原理)

本次總結這個知識點的起因是一道相對定址題中把這個知識點作為基本條件,然而其他的問題我都明白,卻卡在了低位元組為字位址的存放方式中。因此有必要再次進行細緻的回顧總結。

先看這道題。

設相對定址的轉移指令占用三個位元組。第乙個位元組為操作碼,第二,三個位元組為相對位移量(補碼表示),而且資料在儲存器中採用以低位元組為字位址的存放方式。每當cpu從儲存器中取出乙個位元組時,即自動完成(pc) + 1 ->pc。若pc當前值是240(十進位制),要去轉移到290(十進位制),則轉移指令的第

二、三位元組的機器**是(2fh,00h);若pc當前值為240(十進位制),要求轉移到200(十進位制),則轉移指令的第

二、三位元組的機器**是(d5h,ffh)。

通過對這道題目的深入解析以便分析牽涉到的知識點。

關於轉移指令的pc自增問題:

進行過一次總結。

所以這裡重點關注的是數的表示問題。

因為轉移指令占用3個位元組,所以取出指令後pc已經變成(pc)+3了。

不妨設相對偏移的值為a,那麼下一條執行的指令位址為:(p

c)+3

+a

這樣根據題中的資料就可以算出a是多少了。

第乙個:240–>290:

240+3+

a=290==

>a=

47

第二個:240–>200

240+3+

a=200⇒a=

−43

上面的數字都是在十進位制下。

ok,問題全部轉移到數字的補碼表示與具體的儲存位置上。

先看補碼表示: 47d

=[0010

,1111]補

=2fh

,d表示

十進位制d

ecim

al,h

表示十六

進製he

xade

cima

l −43

d=[1101

,0101]補

=d5h

額外說一句,乙個十六進製制數占用四位,兩個比如,2f, d5占用乙個位元組。我總是會誤以為2f占用兩個位元組。這是錯的認識。

ok,問題只剩下怎麼儲存了。

這也是本篇文章的核心。

我們在小端序,大端序中說過:

小端序:先儲存低位位元組,後儲存高位位元組

大端序:先儲存高位位元組,後儲存地位位元組

大端位元組序,資料高位元組存於記憶體低位址,資料低位元組存於記憶體高位址;小端位元組序反之。

這裡的先後是根據位址的增長順序說的。

將乙個字視為乙個物件,包含多個位元組。

幾乎所有的機器都是多位元組物件(字)的位址是所使用的位元組中最小的位址。

有兩種位元組次序:

比如給定乙個16進製制數,0x12345678, 0x12是資料的高位元組,0x78是資料的低位元組。如果說以低位元組為低位址,則就是說按照位址遞增的順序,先儲存資料的低位位元組。

因此我們說大端序有「大自然」的外號。

即:大端序儲存資料與我們的正常感覺相符合。從左往右存,左邊是儲存位址的低位址,但儲存的是資料的高位元組。比如0x123456h,12是資料的高位元組,存在位址的最左邊。

小端序根據低位元組為低位址,低位元組在右,則字的低位址也在右。從左往右看位址是遞減的順序。

這是兩種端序的說法。

我們需要僅僅抓住的是:

那麼回到問題中來,2fh如何儲存?

如果給兩個位元組表示2fh,我們正常情況下寫成:00h,2fh這個樣子。00h是高位位元組,2fh是低位位元組。

這裡的第一,第二,第三位元組表示的位址遞增的意思。

第二位元組相對於第三位元組是位址較小的位元組,儲存的是資料的相對低位。

即:第二位元組儲存的是2fh,第三位元組儲存的是00h.

即第二、第三位元組**是:2fh,00h.

同理d5h是乙個負數。寫成資料是ffd5h,補碼表示,高位擴充是填1.則高位位元組是ffh,儲存在第三位元組上。

低位位元組是d5h,儲存在第二位元組上。

即:第二、第三位元組**是:d5h, ffh.

值得注意的是如果假定從左到右數第一第二第三位元組,認為位址從左到右增長,與假定從右往左數第一第二第三位元組,即認為位址從右往左增長效果相同。

—感謝 xujiawei4848 關於字位址相關的指正。

高位址 低位址 高位元組 低位元組 大端小端和儲存順序

參考部落格 一 高位址和低位址 二 高位元組低位元組 如int a 16777220,化為十六進製制是0x01 00 00 04則04屬於低位元組,01屬於高位元組 三 大小端模式 1 如果a在記憶體中的存放順序為下圖 即低位元組存放在高位址 則為大端模式 2 如果a在記憶體中的存放順序為下圖 即低...

主機位元組序和網路位元組序(大端序,小端序,網路序)

根據cpu的不同我們可以把主機位元組序在記憶體中儲存的順序叫做主機序,也就是我們常說的,大端機和小端機。我們經常看到的有兩種 1.小端機 記憶體中以小端序儲存的機器 將低位元組序儲存在開始的位址 及記憶體較小的記憶體 舉個例子 我們將記憶體從左到右排列 在記憶體中存放0x01020304 2000 ...

socket網路位元組序以及大端序小端序

不同cpu中,4位元組整數1在記憶體空間的儲存方式是不同的。4位元組整數1可用2進製表示如下 00000000 00000000 00000000 00000001 有些cpu以上面的順序儲存到記憶體,另外一些cpu則以倒序儲存,如下所示 00000001 00000000 00000000 000...