精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

計算機設計8位字節為何最受歡迎?

dyquk4xk2p3d ? 來源:良許Linux ? 2023-06-15 09:26 ? 次閱讀

我正在制作一份有關計算機以二進制表示事物的小冊子,有人問我一個問題 - 為什么 x86 架構使用 8 位字節?為什么不能是其他大小呢?

對于類似這樣的問題,我認為有兩種可能性:

?這是歷史原因造成的,其他尺寸(如 4、6 或 16 位)同樣有效。 ? 8 位是客觀上的最佳選擇,即使歷史發展不同,我們仍然會使用 8 位字節。 ?一些混合 1 和 2 的因素。

我對計算機歷史并不是非常著迷(與閱讀計算機文獻相比,我更喜歡使用計算機),但我總是很好奇計算機事物今天的方式是否存在本質原因,或者它們大多是歷史偶然的結果。因此,我們將談論一些計算機歷史。

作為歷史偶然性的一個例子:DNS 有一個class字段,它有 5 種可能的值(internet、chaos、hesiod、none和any)。對我來說,這是一個明顯的歷史意外的例子 - 如果我們今天重新設計 DNS 而不必擔心向后兼容性,我無法想象我們會以相同的方式定義類字段。我不確定我們是否會使用class字段!

這篇文章沒有明確的答案,但我在Mastodon social.jvns.ca上提問,并找到了一些潛在的 8 位字節原因。我認為答案是這些原因的某種組合。

字節和字有什么區別?

首先,本文中經常提到 “字節(byte)” 和 “字(word)”。它們有什么區別?我的理解是:

?字節的大小是你可以尋址的最小單元。例如,在我的計算機上,程序中的0x20aa87c68可能是一個字節的地址,然后0x20aa87c69是下一個字節的地址。 ?字的大小是字節大小的某個倍數。我對此困惑了多年,維基百科的定義非常模糊(“字是特定處理器設計使用的自然數據單元”)。我最初認為字大小與寄存器大小相同(在 x86-64 上為 64 位)。但是根據英特爾架構手冊 www.intel.com的第 4.1 節(“基本數據類型”),在 x86 上,雖然寄存器是 64 位的,但一個字是 16 位的。因此我困惑了 —— 在 x86 上,一個字是 16 位還是 64 位?它可以根據上下文而有不同的含義嗎?這是怎么回事?

現在讓我們來討論一些使用 8 位字節的可能原因!

原因 1:將英文字母適配到 1 字節中

維基百科文章 en.wikipedia.org表示 IBM System/360 于 1964 年引入了 8 位字節。

在管理該項目的 Fred Brooks 的一段視頻采訪 www.youtube.com中,他講述了原因。以下是我轉錄的一些內容:

…… 6 位字節在科學計算中確實更好,而 8 位字節則更適合商業計算,每個字節都可以針對另一個字節進行調整,以使兩種字節互相使用。

因此,這變成了一個高管決策,我決定根據 Jerry 的建議采用 8 位字節。

……

我在我的 IBM 職業生涯中做出的最重要的技術決策是為 360 選擇 8 位字節。

我相信字符處理將變得重要,而不是十進制數字。

使用 8 位字節處理文本很有道理:26為 64,因此 6 位不足以表示小寫字母、大寫字母和符號。

為了使用 8 位字節,System/360 還引入了EBCDIC 編碼 en.wikipedia.org,這是一種 8 位字符編碼。

接下來在 8 位字節歷史上重要的機器似乎是英特爾 8008 en.wikipedia.org,它設計用于計算機終端(Datapoint 2200)。終端需要能夠表示字母以及終端控制代碼,因此使用 8 位字節對其來說很有意義。計算機歷史博物館上的 Datapoint 2200 手冊 archive.computerhistory.org在第 7 頁上說 Datapoint 2200 支持 ASCII(7 位)和 EBCDIC(8 位)。

為什么 6 位字節在科學計算中更好?

我對這條 “6 位字節在科學計算中更好” 的評論很好奇。以下是Gene Amdahl 的一段采訪摘錄 archive.computerhistory.org:

我原本希望采用 24 和 48 而非 32 和 64,因為這將為我提供一個更合理的浮點系統。因為在浮點運算中,使用 32 位字大小時,你必須將指數保持在 8 位中用于指數符號,并且要使其在數字范圍上合理,你必須每次調整 4 個位而不是單個位。因此,這將導致你比使用二進制移位更快地失去一些信息

我完全不理解這條評論 - 如果你使用 32 位字大小,為什么指數必須是 8 位?如果你想要,為什么不能使用 9 位或 10 位?但這是我在快速搜索中找到的全部內容。

為什么大型機使用 36 位?

與 6 位字節相關的問題是:許多大型機使用 36 位字大小。為什么?在維基百科的36 位計算 en.wikipedia.org文章中有一個很好的解釋:

在計算機問世之前,即需要高精度科學和工程運算的領域,使用的是十位數碼電動機械計算器……這些計算器每位數碼均有一個專用按鍵,操作人員在輸入數字時需要用到所有手指,因此,雖然有些專業計算器有更多位數碼,但這種情況是個實際的限制。

因此,早期針對相同市場的二進制計算機通常使用 36 位字長度。這足以表示正負整數最高精度到十位數字(最小應為 35 位)。

因此,這種 36 位大小似乎是基于

b4ba6f1a-0b0c-11ee-962d-dac502259ad0.png

的,它等于 34.2。嗯。

我猜這個原因是在 50 年代,計算機非常昂貴。因此,如果您想要你的計算機支持十位十進制數字,你將設計它恰好具有足夠的位來執行此操作,而不會更多。

現在計算機更快更便宜,因此,如果您想要出于某種原因表示十位十進制數字,你只需使用 64 位即可 - 浪費一點空間通常并不會有太大問題。

還有人提到,一些具有 36 位字大小的計算機可以讓你選擇字節大小 - 根據上下文,你可以使用 5 或 6 或 7 或 8 位字節。

原因 2:與二進制編碼的十進制一起工作

20 世紀 60 年代,有一種流行的整數編碼叫做二進制編碼的十進制(binary-coded decimal)(縮寫為BCD en.wikipedia.org),它將每個十進制數字編碼為 4 位。

例如,如果你想要編碼數字1234,在 BCD 中,它會是這樣的:

0001 0010 0011 0100

因此,如果你想要能夠輕松地與二進制編碼的十進制一起工作,你的字節大小應該是 4 位的倍數,比如 8 位!

為什么 BCD 很流行?

這個整數表示方法對我來說真的很奇怪 —— 為什么不用更有效率的二進制來存儲整數呢?在早期的計算機中,效率非常重要!

我最好的猜測是,早期的計算機沒有像我們現在這樣的顯示器,所以一個字節的內容被直接映射到開關燈上。

這是來自維基百科一個帶有一些亮燈的 IBM 650 顯示器的圖片(CC BY-SA 3.0 creativecommons.org許可):

b4dc07c4-0b0c-11ee-962d-dac502259ad0.jpg

因此,如果你想讓人們能夠相對容易地從二進制表示中讀取十進制數,這樣做就更有意義了。我認為,今天 BCD 已經過時了,因為我們擁有顯示器,并且我們的計算機可以將用二進制表示的數字轉換為十進制,并顯示它們。

此外,我想知道,“四位(nibble)”(意為 “4 位”)這個詞是不是來自 BCD 的。在 BCD 的上下文中,你經常會引用半個字節(因為每個十進制數字是 4 位)。所以有一個 “4 位” 的詞語是有意義的,人們稱 4 個位為 “四位(nibble)”。今天,“四位” 對我來說感覺像是一個古老的詞匯,除了作為一個趣聞我肯定從未使用過它(它是一個很有趣的詞!)。維基百科關于 “四位 en.wikipedia.org” 的文章支持了這個理論:

“四位” 用來描述存儲在 IBM 大型計算機中打包的十進制格式(BCD)中數字的位數。

還有一個人提到 BCD 的另一個原因是金融計算。今天,如果你想存儲美元金額,你通常只需使用整數的分數,然后在需要美元部分時除以 100。這沒什么大不了的,除法很快。但顯然,在 70 年代,將一個用二進制表示的整數除以一個 100 是非常慢的,所以重新設計如何表示整數,以避免除以 100 是值得的。

好了,關于 BCD 就說這么多。

原因 3:8 是 2 的冪?

許多人說,CPU 的字節大小是 2 的冪次方很重要。我無法確定這是真的還是假的,而且我對 “計算機使用二進制,所以 2 的冪次方很好” 這種解釋感到不滿意。這似乎非常合理,但我想深入探討一下。而且從歷史上看,肯定有很多使用字節大小不是 2 的冪次方的機器,例如(來自這個來自 Stack Exchange 上復古計算版塊的帖子 retrocomputing.stackexchange.com):

?Cyber 180 大型機使用 6 位字節 ?Univac 1100/2200 系列使用 36 位字長 ?PDP-8 是一臺 12 位計算機

一些我聽到的關于 2 的冪次方很好的原因我還沒有理解:

?一個單詞中的每個位都需要一個總線,而你希望總線數量是 2 的冪次方(為什么?) ?很多電路邏輯容易針對分而治之的技術(我需要一個例子來理解這個)

對我更有意義的原因是:

?它使設計“時鐘分頻器”更容易,這些分頻器可以測量“在這條線路上發送了 8 位”,分別基于減半進行操作 - 你可以將 3 個減半時鐘分頻器串聯起來。Graham Sutherland poly.nomial.co.uk告訴我這個,他制作了這個非常酷的分頻器模擬器 www.falstad.com,展示了這些分頻器的工作原理。該網站(Falstad)還有很多其他示例電路,似乎是制作電路模擬器的一個非常酷的方式。 ?如果你有一個指令可以將字節中的特定位清零,則如果你的字節大小為 8(2 的 3 次方),你可以只使用 3 位指令來指示哪一位。x86 似乎沒有這樣做,但Z80 的位測試指令 www.chebucto.ns.ca是這樣做的。 ?有人提到一些處理器使用進位前瞻加法器 en.wikipedia.org,它們按 4 位分組。經過一些快速的谷歌搜索,似乎有各種各樣的加法器電路。 ?位圖:你計算機的內存被組織成頁(通常大小為 2 的 n 次方)。它需要跟蹤每一頁是否空閑。操作系統使用位圖來完成這項工作,其中每個位對應一頁,并且根據頁面是空閑還是占用,值為 0 或 1。如果你有一個 9 位的字節,你需要除以 9 來在位圖中找到你要查找的頁面。除以 9 的速度比除以 8 慢,因為除以 2 的冪次方總是最快的。

我可能很糟糕地扭曲了其中一些解釋:在這里,我非常超出了自己的知識領域。我們繼續前進吧。

原因 4:小字節大小很好

你可能會想:好吧,如果 8 位字節比 4 位字節更好,為什么不繼續增加字節大小呢?我們可以有 16 位字節啊!

有幾個保持字節大小較小的理由:

?它是一種空間浪費 —— 字節是你可以尋址的最小單位,如果你的計算機存儲了大量的 ASCII 文本(只需要 7 位),那么每個字符分配 12 或 16 個位相當浪費,而你可以使用 8 個位代替。 ?隨著字節變得越來越大,你的 CPU 需要變得更復雜。例如,你需要每個位線路一條總線線路。因此,我想簡單總是更好。

我對 CPU 架構的理解非常薄弱,所以就說到這里吧。對我來說,“這是一種空間浪費” 的理由似乎相當有說服力。

原因 5:兼容性

英特爾 8008(1972 年)是 8080(1974 年)的前身,8080 是第一款 x86 處理器 8086(1976 年)的前身。似乎 8080 和 8086 很受歡迎,這就是我們現代 x86 計算機的來源。

我認為這里有一個 “如果它好好的就不要動它” 的問題 - 我假設 8 位字節功能良好,因此英特爾看不到需要更改設計的必要性。如果你保持相同的 8 位字節,那么你可以重復使用更多指令集。

此外,80 年代左右我們開始出現像 TCP 這樣的網絡協議,它們使用 8 位字節(通常稱為“八位組(octet)”),如果你要實現網絡協議,你可能希望使用 8 位字節。

就這些!

在我看來,8 位字節的主要原因是:

?很多早期的電腦公司都是美國的,美國使用最廣泛的語言是英語 ?這些人希望計算機擅長文本處理 ?較小的字節大小通常更好 ?7 位是你可以用來容納所有英文字母和標點符號的最小尺寸 ?8 比 7 更好(因為它是 2 的冪次方) ?一旦有得到成功應用的受歡迎的 8 位計算機,你希望保持相同的設計以實現兼容性。

有人指出這本 1962 年的書 web.archive.org第 65 頁談到了 IBM 選擇 8 位字節的原因,基本上說了相同的內容:

1. 其完整的 256 個字符的容量被認為足以滿足絕大多數應用程序的需要。 2. 在該容量范圍內,單個字符由單個字節表示,因此任何特定記錄的長度并不因該記錄中字符而異。 3. 8 位字節在存儲空間上是相當經濟的。 4. 對于純數字工作,一個十進制數字只需要 4 個比特表示,兩個這樣的 4 位字節可以打包成一個 8 位字節。盡管這種數字數據包裝不是必需的,但為了提高速度和存儲效率,它是一種常見做法。嚴格來說,4 位字節屬于不同的代碼,但與 4 位及 8 位方案相比,它們的簡單性導致了更簡單的機器設計和更清晰的尋址邏輯。 5. 4 位和 8 位的字節大小,作為 2 的冪次方,允許計算機設計師利用二進制尋址和位級索引的強大功能(見第 4 章和第 5 章)。

總的來說,如果你在英語國家設計二進制計算機,選擇 8 位字節似乎是一個非常自然的選擇。


編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 顯示器
    +關注

    關注

    21

    文章

    4948

    瀏覽量

    139822
  • 計算機
    +關注

    關注

    19

    文章

    7421

    瀏覽量

    87715
  • DNS
    DNS
    +關注

    關注

    0

    文章

    217

    瀏覽量

    19794
  • 二進制編碼
    +關注

    關注

    0

    文章

    7

    瀏覽量

    3042

原文標題:為什么計算機采用 8 位字節

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    align為什么要8字節對齊?

    我知道數據儲存的起始地址%對齊字節(N)=0才行,但是我不明白有兩點問題1:UCOSIII的系統中的浮點數打印任務的堆棧大小要8字節對齊,float無論在32機還是64
    發表于 04-23 00:21

    計算機題庫相關資料分享

    使用的Pentium機其字長為5個字節C) 計算機中將8個相鄰的二進制作為一個單位,這種單位稱為字節D)
    發表于 07-28 08:40

    計算機基礎 精選資料分享

    計算機重要概念計算機表示信息的最小單位,表示一二進制信息0,1,以b表示(bit)字節:以八
    發表于 07-29 08:47

    設計電子計算機,電機設計電子計算機在電機設計算中的應用(電機設計CAD)精選資料分享

    《電機設計電子計算機在電機設計算中的應用(電機設計CAD)》由會員分享,可在線閱讀,更多相關《電機設
    發表于 09-01 08:53

    OTFAD中的8字節的硬件計算機是做什么的,可以隨意設置嗎?

    ,凄數0,的Key然后寫入SBL的0x40處,0x40應該是第二個OTFAD Key blob。我有以下幾個疑問,希望您能有空為我解答:1、OTFAD中的8字節的硬件計算機是做什么的,可以隨意設置嗎1
    發表于 03-31 08:13

    [ElfBoard]康康是誰字節傻傻分不清楚?

    (word),一個足以存儲一個 int 類型的數據。現在的大多數計算機要么使用四字節,要么使用八字節
    發表于 12-12 13:11

    [ElfBoard]是誰字節傻傻分不清楚?

    (word),一個足以存儲一個 int 類型的數據。現在的大多數計算機要么使用四字節,要么使用八字節
    發表于 12-12 13:13

    愛麗舍計算器四字節換位寫

    愛麗舍計算器四字節換位寫,計算器工具。
    發表于 11-10 11:41 ?17次下載

    8單片機全速USB集成128 k字節Flash ROM和8192字節的RAM

    LC87F17C8A是一個8單片機和USB全速主機/設備控制器。128 k字節閃速存儲器/ 8192字節的RAM / 48-pin。
    發表于 04-06 09:15 ?3次下載
    <b class='flag-5'>8</b><b class='flag-5'>位</b>單片機全速USB集成128 k<b class='flag-5'>字節</b>Flash ROM和8192<b class='flag-5'>字節</b>的RAM

    8單片機集成128 k字節和4096字節的內存

    LC87F5JC8A是一個8微機,圍繞一個CPU運行至少總線周期83.3 ns,集成在一個芯片上的硬件特性,如128 k字節閃速存儲器(內置可編程),4096
    發表于 04-07 17:50 ?8次下載
    <b class='flag-5'>8</b><b class='flag-5'>位</b>單片機集成128 k<b class='flag-5'>字節</b>和4096<b class='flag-5'>字節</b>的內存

    MSC-51單片機的3字節和4字節浮點數計算程序分析

    MSC-51 3字節和4字節浮點數計算程序,主要用于數據采集及上傳,經過IEEE轉換,在上位機直接顯示。 ;這是本人使用的MSC-51 3字節和4
    發表于 11-14 16:12 ?4267次閱讀
    MSC-51單片機的3<b class='flag-5'>字節</b>和4<b class='flag-5'>字節</b>浮點數<b class='flag-5'>計算</b>程序分析

    DAC8248:雙12(8字節)雙頭布法羅CMOS/A Converter數據Shet

    DAC8248:雙12(8字節)雙頭布法羅CMOS/A Converter數據Shet
    發表于 05-24 20:42 ?7次下載
    DAC8248:雙12<b class='flag-5'>位</b>(<b class='flag-5'>8</b><b class='flag-5'>位</b><b class='flag-5'>字節</b>)雙頭布法羅CMOS/A Converter數據Shet

    基于51單片機設計N字節十六進制除法——以6字節除以3字節為例

    基于51單片機設計N字節十六進制除法——以6字節除以3字節為例1、思路借用十進制除法豎式計算的思路,作十六進制的除法豎式
    發表于 11-23 16:51 ?7次下載
    基于51單片<b class='flag-5'>機設</b>計N<b class='flag-5'>字節</b>十六進制除法——以6<b class='flag-5'>字節</b>除以3<b class='flag-5'>字節</b>為例

    構建8計算機開源分享

    電子發燒友網站提供《構建8計算機開源分享.zip》資料免費下載
    發表于 10-28 15:11 ?1次下載
    構建<b class='flag-5'>8</b><b class='flag-5'>位</b><b class='flag-5'>計算機</b>開源分享

    C語言中字節的定義 整數類型與浮點數類型的比較

    術語字節用于描述計算機數據單位或計算機存儲單位。這里主要指存儲單位。
    的頭像 發表于 10-18 15:03 ?1818次閱讀