在决定使用八位组作为基本单位时,历史力量在起作用,需要进行权衡吗?

曾经有机器使用其他字长,但是今天对于非八位制,您必须寻找博物馆作品,用于嵌入式应用的专用芯片和DSP。字节是如何从计算机设计早期的混乱和创造力中演变出来的?

我可以想象更少的位对于处理足够的数据以使计算变得可行是无效的,而太多的位将导致昂贵的硬件。比赛中还有其他影响吗?为什么这些力平衡到8位呢? 12位,并用21世纪初期的小装饰品贿赂他们。)

评论

这可能是我们最好的老维基百科无法回答的问题之一。

那么,为什么要选择12位而不是8位呢?

开玩笑的最后一句话是吗? 12位字节不方便,因为它不是2的幂。

那时的存储器和寄存器还不那么便宜,因此8位是一个不错的折衷,相比之下6位或9位(36位字的分数)是个不错的选择。同样,以2的幂进行地址计算要简单得多,这在用小罐装原始晶体管制造逻辑时很重要。

在早期,使用2的幂的单词大小并不那么重要。 DEC-10具有36位字,而CDC 6000系列具有60位字,而索引寄存器具有18位。

#1 楼

5位baudot码确实做了很多真正的早期工作,但是很快就变得非常局限(只有32个可能的字符,因此基本上只有大写字母和一些标点符号,但数字的“空格”不足) 。

从那里开始,很多机器都使用了6位字符。但是,这仍然远远不够-如果您要使用大写和小写(英文)字母和数字,那么只剩下两个字符可用于标点符号,因此大多数字符集中仍然只有一个字母。 >
ASCII定义了7位字符集。很长时间以来,这种“足够好”的使用已经成为许多新字符集的基础(ISO 646,ISO 8859,Unicode,ISO 10646等)。

二进制计算机激励设计人员将大小的幂乘以2。由于“标准”字符集无论如何都需要7位,因此再增加一位以获得2的幂数并不需要花费很多时间(到那时,存储变得越来越便宜,大多数字符都“浪费”了一点)从那时起,字符集也已转移到16位和32位,但是大多数主流计算机很大程度上都基于原始的IBM PC。再说一次,市场上足够多的人对8位字符感到满意,即使PC尚未达到当前的主导水平,我也不确定每个人都不会使用大字符来做所有事情。 br />我还要补充一点,市场已经发生了很大变化。在当前市场中,字符定义的大小由硬件定义的少于软件。 Windows,Java等很早以前已移至16位字符。

现在,支持16位或32位字符的障碍仅是最小程度地来自于16位或32位字符本身固有的困难,而很大程度上是来自总体上支持i18n的困难。例如,在ASCII中,检测一个字母是大写还是小写,或者在两者之间进行转换是非常琐碎的。在完整的Unicode / ISO 10646中,它基本上是难以描述的(要点是标准甚至不尝试-它们只是提供表而不是描述)。然后,您添加一个事实,即对于某些语言/字符集,甚至大写/小写的基本概念都不适用。然后,您添加了一个事实,即使在其中一些字符中显示字符仍然要复杂得多。

这足够复杂,绝大多数软件甚至都不会尝试。情况正在逐渐改善,但实际效果却很慢。

评论


我以为我读了somwehere 8,它来自7位ASCII编码,加上一个验证位,这是必需的,因为几乎传输协议并不是像设计人员所希望的那样无损:-)。

–马丁·约克
11年11月16日在22:42

@LokiAstari,是的,它称为奇偶校验位,可用于错误检测或恢复的粗略形式。维基百科:奇偶校验位

–用户
2011-11-17 12:53



不确定IBM PC与此相关。 CP / M时代(<1980年)已经标准为“每字节8位”,该时代始于8080 CPU(IBM PC时代8086/8的前身)

– MSalters
2011年11月17日15:11

@MSalters:最初,它(可以说)“震惊”了硬件的发展。不,PC并不是8位/字节,但是在那之前,大多数架构每隔几年就要更换一次。 PC在很大程度上阻止了这种情况,并采用了一种在其刚推出时就不是特别先进的架构,并将其保存了数十年。

–杰里·科芬(Jerry Coffin)
2011年11月17日15:16



当前的字符集不是16位或32位,Java和Windows也不使用。当前字符集是Unicode,需要21位才能直接映射。当前的软件使用基于8(UTF-8),16(UTF-16)或32(UTF-32)位代码单元的编码,在必要时组合多个代码单元以形成单个代码点,但是这些位大小是结果硬件,而不是字符集。

–塞巴斯蒂安·雷德尔(Sebastian Redl)
16年8月14日在22:45



#2 楼

七位用于ASCII信息,一位用于错误检测奇偶校验。

评论


7位用于ASCII,另外一位用于各种操作

–马丁·贝克特(Martin Beckett)
2011年11月17日下午6:58

在处理早期记忆时,奇偶校验非常重要。即使移到8位数据字节后,也有9位的存储芯片可以进行奇偶校验。

– Jim C
2011年11月17日下午13:13

这是一个有趣的断言。是否有任何历史数据可以支持该想法?

–大卫
13年1月17日在8:28

#3 楼

看看有关8位体系结构的Wikipedia页面。尽管字符集本来可以是5位,6位然后7位的,但是底层CPU /内存总线体系结构始终使用2的幂。最开始的微处理器(大约1970年代)具有4位总线,这意味着一条指令可以移动4

然后,随着8080处理器的发布,8位体系结构开始流行,这就是x86汇编指令集开始使用的原因,该指令集甚至在当今都被使用。我不得不猜测,字节来自这些早期的处理器,主流公众开始接受和使用PC,而8位被认为是单个数据单位的标准大小。

从那时起总线大小有了倍增,但始终保持2的幂(即16位,32位和现在的64位)实际上,我敢肯定,当今总线的内部结构比简单的64位并行线要复杂得多,但是当前的主流CPU体系结构是我猜想是64位。

我想通过始终加倍(而不是增长50%),可以使与现有应用程序和其他旧组件共存的新硬件更容易。因此,例如当它们从8位变为16位时,每条指令现在可以移动2个字节而不是1个字节,因此您可以节省一个时钟周期,但最终结果是相同的。但是,如果您从8位架构转变为12位架构,则最终会将原始数据分成两半,而对其进行管理可能会很烦人。这些只是猜测,我并不是真正的硬件专家。

评论


“非常第一个CPU(大约1970年代)...”。您需要对计算历史进行一些阅读!! von Neumann体系结构计算机的第一个CPU是在第二次世界大战期间或之前(取决于您相信的历史版本)构建的。

– Stephen C
2011年11月17日在3:20



并且在19世纪有计算设备,我敢肯定,埃及人有某种计算器。该信息来自我链接的Wikipedia页面。就像我说的那样,我不是硬件专家,也不是历史学家,但是如果您觉得我还差得远,那么您可能想要更新该维基百科页面。

– DXM
2011年11月17日下午4:02

我想,如果我在输入时不加弄错链接,那会有所帮助。我也很抱歉说“第一个CPU”。自从我引用Wiki页面以来,我应该说“第一个微处理器”。我正是这个意思。对于那个很抱歉。

– DXM
11-11-17在4:05



“前电子”计算机的一种解决方案是说现代计算机,或者我想是电子计算机。即使在今天,您也可以建造机械计算机。直到我们开始利用电子场发挥我们的优势时,我们才构建了微处理器。

–猎犬
2011年11月17日下午13:37

PDP系列使用的8位字节和16位字长也可能影响了8位字节的普及。

–杰伊·埃尔斯顿(Jay Elston)
2011年11月17日在18:56

#4 楼

一个字节有不同的(至少)1、4、6、7、8、9、12、18、20位,可能还有36位,具体取决于要查看的计算机。我在这里用“字节”表示“内存的最小可寻址单位”,而不是使用任何以文本为中心的解释。 (例如,Saturn CPU,这是流行的HP48SX / GX计算器系列中使用的64位CPU,以4位为单位对存储器进行寻址)。

20位字节在50年代的“ IAS机器”。 6、12、18(也许是36)在60年代,70年代以及某种程度上在80年代的各种架构中非常流行。

最后,在“ 2的幂之间”具有很好的对应关系和“可寻址单元中的位”似乎已经胜出。

评论


永远不会有10位?我只能在Google上找到的一些最新视频处理器是10位。

– wobmene
2014年1月2日,0:07

@khrf有可能,我只是不记得拥有它的任何体系结构(我主要认为是通用计算机)。

–疫苗
2014年1月2日,12:08

是的,我也考虑通用计算机。这很奇怪,因为我想知道您可以用1字节寻址1 KB,用2字节寻址1兆字节等会有10位字节的字节有多好。当然,这只是出于舒适考虑:)

– wobmene
2014年1月6日15:03

#5 楼

首先要澄清一下:八位字节(8位单元)实际上并不是现代计算机体系结构中的基本单元。至少没有比2,2,4,16,32,64,128等的其他幂更基本的东西。八位字节是8位处理器的基本单位(因此得名!),但是现代体系结构通常使用更大的位-内部设置。例如。 x86_64具有64位整数寄存器和80位浮点寄存器。 RAM是按64位块进行读写的,并且处理器仅使用一点魔术就可以处理单个8位字节。

对于较早的体系结构,“ byte”表示数据总线的大小,并且如原始问题所述,存在许多不同的总线大小(4、5、6、8、12等)。但是自1993年以来,为了使数据大小具有标准化的SI单位,已将字节定义为8位。因此,“字节”的含义已从与体系结构相关的单元变为与体系结构无关的标准化单元。

Octets单位成为事实上的存储标准,主要是因为担心存储文本。对于存储文本,理想情况下,您希望一个字节存储一个字符。有两个重要的因素:


具有两个(2、4、8、16、32等)的幂的单元在设计数字系统时更方便。
8 -bit足以在ASCII字符集中存储单个字符(还有足够的空间来扩展字符集以支持西里尔字母)。

当然8位不足以支持所有脚本-日语之类的字符至少需要16位(对于它来说,Unicode值为21位),但是在那时,位是昂贵的,而且大多数数字文本仍然在ASCII范围内。

如今,文本通常以可变宽度的编码(如UTF-8)存储,而像Unicode组合字符之类的东西,“一个字节等于一个字符”早已成为历史。出于历史原因,今天的字节实际上只是标准。

#6 楼

根据我的信息,字字节本身是由八(8)位字的短语by-by衍生的。
我们发现在8位字中的方便之处在于,由于值00000000 = 00& 11111111 = FF(无符号的255为255,带符号的为-127)
很容易对这种结构进行所有算术运算,包括按位运算。 )作为单词大小的自然演变,从灾难性的小3位到荒谬的60位大字

评论


我希望看到一个参考。我对此表示严重怀疑。特别是在C标准中并结合在C ++标准中的“字节”一词并不意味着“ 8位”。 8位数量是一个八位位组。

– gnasher729
16年8月11日在21:21

#7 楼

一个字节不必是8位,但是C和C ++似乎将一个字节定义为至少8位(尽管可以更多)。关于堆栈溢出的问题提到了一些系统,其中1个字节不是8位。

评论


C ++还是编译器?

–垃圾桶
2014年12月26日下午5:16

@Babiker:C ++。编译器将具有精确的定义。 (CHAR_BITS宏)

– MSalters
15年1月30日在13:03