“字”有多少位?

40
这里有两本书的内容,一本是《Assembly Language Step By Step》(Jeff Duntemann),另一本是《Principles of Computer Organization and Assembly Language: Using the Java Virtual Machine》(Patrick Juola):
在第一本书中,“位(bit)”是单个二进制数字,0或1,“字节(byte)”是 8 个并排的位,“字(word)”是 2 个并排的字节,“双字(double word)”是 2 个并排的字,而“四字(quad word)”是 2 个并排的双字。
在第二本书中,为了方便起见,通常将 8 个位组合成一个块,称为“字节(byte)”。比字节大的下一个名称块是“字(word)”。字的定义和大小不是绝对的,而是因计算机而异。一个字是计算机处理最方便的数据块大小。
那么,“字(word)”到底是指 2 个字节(16位),还是计算机处理最方便的数据块大小呢?(我也不确定这是什么意思..)
7个回答

27

我不熟悉这两本书,但第二本更接近当前的现实情况。第一本可能在讨论特定的处理器。

处理器的字长有很多种,不一定是8的倍数。

8086和8087处理器使用16位字长,很可能这是第一位作者所写的机器。

更近期的处理器通常使用32或64位字长。

在50年代和60年代,有一些字长对我们来说似乎很奇怪,比如4、9和36。自70年代以来,字长通常是2的幂且是8的倍数。


3
在x86/x64处理器上,一个字节是8个比特位,有256种可能的二进制状态,从0到255。这就是操作系统将键盘按键转换成屏幕上字符的方式。当你按下“A”键时,键盘向计算机发送一个等于数字97的二进制信号,计算机在屏幕上打印出小写字母“a”。你可以在任何Windows文本编辑软件中通过按住ALT键,键入NUMPAD上的97,然后释放ALT键来确认这一点。如果你用0到255之间的任何数字替换“97”,你会看到与该数字相关联的字符在系统字符代码页上打印在屏幕上。
如果一个字符是8位或1字节,那么一个“WORD”必须至少是2个字符,因此为16位或2字节。传统上,你可能认为一个单词是由不同数量的字符组成的,但在计算机中,所有可计算的东西都是基于静态规则的。此外,计算机不知道字母和符号是什么,它只知道如何计数数字。因此,在计算机语言中,如果一个“WORD”等于2个字符,则双字长或“DWORD”等于2个“WORDs”,即4个字符或字节,相当于32位。此外,“QWORD”(四字长)等于2个“DWORDs”,相当于4个“WORDs”,8个字符或字节,即64位。
请注意,这些术语在功能上仅限于开发人员使用的Windows API中,但也可能出现在其他情况下(例如,Linux dd命令使用数字后缀来组合字节和块大小,其中“c”是1个字节,“w”是字节)。

2
这段文字来自Steven Levy的书《黑客:计算机革命的英雄》。
引用部分如下:
“……内存已被缩减为每个18位的4096个“字”。 (“位”是二进制数字,即1或0。一系列二进制数字称为“字”)。”
正如其他答案所建议的那样,“字”似乎没有固定的长度。

2
第二个引用是正确的,一个单词的大小因计算机而异。 ARM NEON 架构是一个具有32位字的架构示例,其中64位数量被称为“双字”,128位数量被称为“四字”:
NEON 操作数可以是向量或标量。NEON 向量可以是 64 位双字向量或 128 位四字向量。
通常来说,16位字仅在16位系统上才能找到,例如 Amiga 500。

2
除了其他答案之外,单从一个系统到另一个系统,字长的可变性可以在Aleph One的论文“Smashing The Stack For Fun And Profit”中得到进一步说明:
我们必须记住,内存只能按字长的倍数进行寻址。在我们的情况下,一个字是4个字节或32位。所以我们的5字节缓冲区实际上将占用8字节(2个字)的 memory,而我们的10字节缓冲区将占用12字节(3个字)的 memory。

链接无法打开。 - Koray Tugay
它对我有用。试试这个:www-inst.eecs.berkeley.edu/~cs161/fa08/papers/stack_smashing.pdf - Astrophe
不行,这个也不行.. 无法访问此网站 连接被重置。 可能是因为我在工作中,但我非常怀疑.. 奇怪.. - Koray Tugay
我刚刚在我的先前评论中更改了链接。我认为它会起作用,但它会打开一个PDF而不是加载网页。 - Astrophe
1
这是一篇好论文。我认为关于字长的细节可能有助于那些想要浏览此问题答案的人 - 只是明确一下,论文的其余部分并不着重于字长及其含义。 - Astrophe

0
“最方便的数据块”可能指的是WORD的宽度(以位为单位),与系统总线宽度或可用的底层“带宽”相对应。在一个16位系统中,如果WORD被定义为16位宽,则以WORD大小的块移动数据将是最有效的方式。(在硬件或“系统”级别上。)
由于Java更多地是平台无关的,它只将“WORD”定义为从“BYTE”开始的下一个大小,意味着“全带宽”。我猜任何能够运行Java的平台都会使用32位作为WORD。

0
另一个引用Word变量长度的书籍例子是《操作系统概念》(Sileberschatz, Galvin, Gagne)第1章第6页中作者所述:
“Word”是一个较少使用的术语,它是特定计算机体系结构的本地存储单元。一个Word通常由一个或多个字节组成。例如,一台计算机可能有指令来移动64位(8字节)的Word。
编辑: 我今天发现的另一个引用的书籍例子是《C Primer Plus 第6版》(Stephen Prata),在第3章第60页中他写道:
对于给定的计算机设计,Word是内存的自然单位。对于8位微型计算机,如原始的苹果电脑,一个Word只是8位。此后,个人电脑升级到16位Word、32位Word,目前是64位Word。更大的Word大小可以实现更快的数据传输,并允许访问更多的内存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接