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

    文章

    4915

    浏览量

    139703
  • 计算机
    +关注

    关注

    19

    文章

    7325

    浏览量

    87602
  • DNS
    DNS
    +关注

    关注

    0

    文章

    215

    浏览量

    19761
  • 二进制编码
    +关注

    关注

    0

    文章

    7

    浏览量

    3031

原文标题:为什么计算机采用 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 4241次阅读
    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 1689次阅读