我们有 8 位、16 位、32 位和 64 位硬件架构和操作系统。但不是 42 位或 69 位的。
为什么?是使 2^n 位成为更好选择的基本因素,还是仅与现有系统兼容?(显然,一个 64 位寄存器可以保存两个 32 位指针,或者一个 32 位数据单元可以保存 4 个字节,这显然很方便。)
我们有 8 位、16 位、32 位和 64 位硬件架构和操作系统。但不是 42 位或 69 位的。
为什么?是使 2^n 位成为更好选择的基本因素,还是仅与现有系统兼容?(显然,一个 64 位寄存器可以保存两个 32 位指针,或者一个 32 位数据单元可以保存 4 个字节,这显然很方便。)
这主要是一个传统问题。它甚至不总是正确的。例如,处理器中的浮点单元(即使是当代的)具有 80 位寄存器。没有什么会迫使我们使用 8 位字节而不是 13 位字节。
有时这有数学推理。例如,如果您决定有一个 N 位字节并想要进行整数乘法,则您需要正好 2N 位来存储结果。然后你还想加/减/乘那些 2N 位整数,现在你需要 2N 位通用寄存器来存储加法/减法结果和 4N 位寄存器来存储乘法结果。
http://en.wikipedia.org/wiki/Word_%28computer_architecture%29#Word_size_choice
不同数量的内存用于存储具有不同精度的数据值。常用的大小通常是地址解析单位(字节或字)的 2 倍的幂。将数组中项目的索引转换为项目的地址只需要移位操作而不是乘法。在某些情况下,这种关系也可以避免使用除法运算。因此,大多数现代计算机设计的字大小(和其他操作数大小)是字节大小的 2 倍。
部分地,这是一个解决问题。拥有 N 位地址最多允许您寻址 2^N 位内存,而硬件设计人员更喜欢充分利用这种能力。因此,您可以使用 3 位来寻址 8 位总线等...
古老的PDP-10是 36 位的。
许多(大多数?)早期的前置微处理器 CPU 每个字的位数不是 2 的幂。
特别是,Seymour Cray 和他的团队构建了许多具有非二次方字大小和地址大小(12 位、48 位、60 位等)的极具影响力的机器。
数量惊人的早期计算机有 36 位字,这完全是因为人类有 10 根手指。维基百科“36 位”文章有更多关于 10 指和 36 位之间关系的详细信息,并链接到许多其他具有历史意义但不再流行的位大小的文章,其中大多数不是 2 的幂。
我推测
(a) 8 位可寻址存储器变得流行,因为它更方便地存储 7 位 ASCII和4 位 BCD,既不会笨拙地打包,也不会浪费每个字符多个位;并且没有其他内存宽度有任何很大的优势。
(b) 正如 Stephen C. Steel 所指出的,这种微小的优势被规模经济和市场力量相乘——使用了更多 8 位宽的存储器,因此规模经济使它们稍微便宜一些,从而导致更多的 8 - 新设计中使用的位宽存储器等。
(c) 理论上,更宽的总线宽度使 CPU 更快,但是将整个 CPU 放在一个芯片上使它比以前任何总线宽度的任何多部分 CPU 系统便宜得多,甚至可能略快一些。起初,4 位 CPU 的晶体管几乎不够用,然后是 8 位 CPU。后来,几乎没有足够的晶体管用于 16 位 CPU,大肆宣传和“16 位”营销活动。大约在人们期望 24 位 CPU 的时候...
(d) RISC 革命来袭。最初的两个 RISC 芯片是 32 位的,无论出于何种原因,人们已经习惯于认为“位越多越好”,所以每个制造商都加入了 32 位的潮流。此外,IEEE 754-1985 采用 32 位和 64 位浮点数进行标准化。有一些 24 位 CPU,但大多数人从未听说过它们。
(e) 出于软件兼容性的原因,即使在具有 64 位前端总线的处理器(例如 Intel Pentium 和 AMD K5 等)或具有 4 位宽的主板上,制造商也保持 32 位数据总线的假象总线(LPC 总线)。
您的内存系统想要成为字节倍数,这使得您的缓存想要成为字节倍数,这使得您的整个系统想要成为字节倍数。
作为硬件设计师,您通常希望将 CPU 设计为某种类型的字节边界,即 8 的倍数。否则,您必须在 49 位系统中添加许多笨拙的电路以使其利用 mod-8 位,或者您最终会忽略额外的位,在这种情况下这是一种浪费,除非您需要额外的位来执行指令,而在 16 位或更宽的系统上绝不会出现这种情况。
正如其他人所指出的那样,在早期,事情并不是那么明确:单词的大小各不相同。
但内存芯片技术也推动了对 8 位字节标准化的推动。在早期,许多存储芯片被组织为每个地址 1 位。用于 n 位字的存储器是通过使用 n 组的存储芯片构成的(相应的地址线连接在一起,每个芯片的单个数据位贡献于 n 位字的一位)。
随着内存芯片密度越来越高,制造商将多个芯片封装在一个封装中。因为最流行的字长是 8 位的倍数,所以 8 位内存特别受欢迎:这意味着它也是最便宜的。随着越来越多的架构加入 8 位字节的潮流,不使用 8 位字节的内存芯片的价格溢价越来越高。类似的论点解释了从 8->16、16->32、32->64 的移动。
您仍然可以设计具有 24 位内存的系统,但该内存可能会比使用 32 位内存的类似设计贵得多。除非有充分的理由坚持使用 24 位,否则大多数设计人员会选择 32 位,因为它既便宜又功能强大。
曾经,计算机字长往往是 6 位的倍数,因为计算机通常使用 6 位字符集,不支持小写字母。
IBM 为洛斯阿拉莫斯制造了一台高性能计算机 STRETCH,它有一个 64 位字。它有一个不寻常的功能,即可以直接寻址计算机内存中的各个位,这迫使字长为 2 的幂。它还有一个更扩展的字符集,允许包含数学符号(除了小写);它们被用于一种名为 COLASL 的特殊高级语言。
当 IBM 推出非常流行的 System/360 大型机时,尽管它没有位寻址,但它保留了 8 位字节,主要是为了允许有效存储 4 位到十进制数字的压缩十进制数量。因为那台机器很受欢迎,影响很大,DEC 的 PDP-11 计算机是用 16 位字和 8 位字符设计的。PDP-11 也是第一台真正意义上的小端机器,它也非常受欢迎和有影响力。
但这不仅仅是因为追随时尚。8 位字符允许使用小写文本,并且随着计算机变得更便宜,能够轻松地将它们用于文字处理受到重视。正如 STRETCH 需要一个以位为单位的 2 次幂的字以允许轻松寻址位一样,今天的计算机需要一个字是 8 的 2 的倍数(恰好是二到三次方本身)以使字符易于寻址。
如果我们仍然使用 6 位字符,计算机将倾向于使用 24、48 或 96 位字。
相关但可能不是原因,我听说一个字节中 8 位的约定是因为 IBM 是如何装配 IBM System/360 架构的。
一个常见的原因是您可以用二进制对位进行编号。这在很多情况下都很有用。例如,在位移或旋转操作中。您可以将 16 位值旋转 0 到 15 位。尝试循环超过 16 位也是微不足道的:这相当于循环超过 0 位。并且旋转超过 1027 位等于旋转超过 3 位。一般来说,宽度为 W 的寄存器在 N 位上的循环等于在 N 模 W 上的循环,并且当 W 是 2 的幂时,“模 W”运算是微不足道的。
80186、8086、8088 和 80286 及更高版本处理器上的“实模式”使用 20 位分段内存寻址系统。80286 有 24 条本机地址线,然后 386 和后来的有 32 条或 64 条。
另一个反例:PIC16C8X 系列微控制器具有 14 位宽的指令集。
字节与大多数西方世界的字符编码有关,因此是 8 位。字与编码无关,它与地址宽度有关,因此它从 4 到 80 等不等
我值得信赖的旧 HP 32S 计算器是 12 位的。
因为为地址保留的空间始终是固定位数。一旦你定义了固定地址(或指针)的大小,你就想充分利用它,所以你必须使用它的所有值,直到它可以存储的最大数字。您可以从位的倍数(0 或 1)中获得的最大数始终是 2 的幂
也许你可以在这里找到一些东西:Binary_numeral_system
ICL 1900 都是 24 位(字)。打赌没有多少人记得这些。你做 ??
我们有,看看 PIC 微控制器。