"word" 是多少位?

How many bits is a "word"?

这来自 Assembly Language Step By Step 一书,Jeff Duntemann:

Here’s the quick tour: A bit is a single binary digit, 0 or 1. A byte is 8 bits side by side. A word is 2 bytes side by side. A double word is 2 words side by side. A quad word is 2 double words side by side.

这来自 计算机组织和汇编语言原理:使用 Java 虚拟机,Patrick Juola:

For convenience, 8 bits are usually grouped into a single block, conventionally called a byte. The next-largest named block of bits is a word. The definition and size of a word are not absolute, but vary from computer to computer. A word is the size of the most convenient block of data for the computer to deal with.

那么一个字是2个字节(16位),还是最方便计算机处理的数据块? (我也不知道这是什么意思..)

第二个引用是正确的,一个字的大小因电脑而异。 ARM NEON 架构是具有 32 位字的架构示例,其中 64 位数量称为 "doublewords",128 位数量称为 "quadwords":

A NEON operand can be a vector or a scalar. A NEON vector can be a 64-bit doubleword vector or a 128-bit quadword vector.

一般来说,16位字只能在16位系统上找到,比如Amiga 500。

这两本书我都不熟悉,但第二本更接近现实。第一个可能是讨论特定的处理器。

处理器的字长多种多样,并不总是 8 的倍数。

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

较新的处理器通常使用 32 或 64 位字。

在50年代和60年代,出现了我们现在看起来很奇怪的字长的机器,例如4、9和36。大约从70年代开始,字长通常是2的幂和8的倍数.

这出自史蒂文·利维 Hackers: Heroes of the Computer Revolution 的书。

.. the memory had been reduced to 4096 "words" of eighteen bits each. (A "bit" is a binary digit, either a 1 or 0. A series of binary numbers is called a "word").

正如其他答案所暗示的那样,"word" 似乎没有固定长度。

除了其他答案之外,Aleph One 的论文 Smashing The Stack For Fun And Profit 中还有一个字长可变性(从一个系统到下一个系统)的例子:

We must remember that memory can only be addressed in multiples of the word size. A word in our case is 4 bytes, or 32 bits. So our 5 byte buffer is really going to take 8 bytes (2 words) of memory, and our 10 byte buffer is going to take 12 bytes (3 words) of memory.

在 x86/x64 处理器上,一个字节是 8 位,8 位中有 256 种可能的二进制状态,0 到 255。这就是 OS 将键盘击键转换为字母的方式屏幕上。当你按下'A​​'键时,键盘向计算机发送一个等于数字97的二进制信号,计算机打印出一个小写的'a' 在屏幕上。您可以在任何 Windows 文本编辑软件中通过按住 ALT 键,在数字键盘上键入 97,然后释放 ALT 键来确认这一点。如果将“97”替换为 0 到 255 之间的任何数字,您将在屏幕上打印的系统字符代码页上看到与该数字关联的字符。

如果一个字符是 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是字节)。

"most convenient block of data" 可能指的是 WORD 的宽度(以位为单位),与系统总线宽度相对应,或者任何底层 "bandwidth" 可用。在 16 位系统上,WORD 被定义为 16 位宽,以 WORD 大小的块移动数据将是最有效的方法。 (在硬件或 "system" 级别。)

由于 Java 或多或少与平台无关,它只是将 "WORD" 定义为 "BYTE" 的下一个尺寸,即 "full bandwidth"。我想任何能够 运行 Java 的平台都将使用 32 位的 WORD。

引用可变长度单词的另一本书实例是 操作系统概念 Sileberschatz、Galvin、Gagne,作者在第 1 章第 6 页状态:

A less common term is "word", which is a given computer architecture's native storage unit. A word is generally made up of one or more bytes. For example, a computer may have instructions to move 64-bit (8-byte) words.