一个“字”有多少位?

Posted

技术标签:

【中文标题】一个“字”有多少位?【英文标题】:How many bits is a "word"? 【发布时间】:2015-03-19 22:16:04 【问题描述】:

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

快速浏览:位是单个二进制数字,0 或 1。一个字节 是 8 位并排。一个字是并排的 2 个字节。一个双字 是 2 个单词并排。一个四字是两个并排的双字。

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

为方便起见,通常将 8 位分组为一个块, 通常称为字节。下一个最大的命名位块是 一个字。一个词的定义和大小不是绝对的,而是因人而异的 从电脑到电脑。一个字的大小最方便 供计算机处理的数据块。

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

【问题讨论】:

【参考方案1】:

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

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

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

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

在 50 年代和 60 年代,有些机器的字长现在对我们来说似乎很陌生,例如 4、9 和 36。从大约 70 年代开始,字长通常是 2 的幂和 8 的倍数。

【讨论】:

【参考方案2】:

第二个引用是正确的,单词的大小因计算机而异。 ARM NEON 架构是具有 32 位字的架构示例,其中 64 位数量称为“双字”,128 位数量称为“四字”:

NEON 操作数可以是向量或标量。 NEON 向量可以是 64 位双字 向量或 128 位四字 向量。

通常来说,16 位字只能在 16 位系统上找到,例如 Amiga 500。

【讨论】:

【参考方案3】:

这是来自 Steven Levy 的书 Hackers: Heroes of the Computer Revolution。

.. 内存已减少到 4096 个“单词”,每个单词 18 位。 (“位”是一个二进制数字,可以是 1 或 0。一系列二进制 数字被称为“单词”)。

正如其他答案所暗示的,“单词”似乎没有固定长度。

【讨论】:

【参考方案4】:

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

我们必须记住,内存只能以 字长。在我们的例子中,一个字是 4 个字节,或 32 位。所以我们的 5 字节缓冲区 真的会占用 8 字节(2 个字)的内存,以及我们的 10 字节缓冲区 将占用 12 个字节(3 个字)的内存。

【讨论】:

链接打不开。 它对我有用。试试这个:www-inst.eecs.berkeley.edu/~cs161/fa08/papers/stack_smashing.pdf 不..这个也不起作用..This site can’t be reached The connection was reset.也许是因为我在工作,但我非常怀疑..奇怪.. 我刚刚更改了我之前评论中的链接。我认为它会起作用,但它会打开 PDF 而不是加载网页。 这是一篇好论文。我认为有关字长的详细信息可能会对想要滚动浏览该问题的答案的人有所帮助——为了清楚起见,本文的其余部分并不关注字长及其含义。【参考方案5】:

在 x86/x64 处理器上,一个字节是 8 位,在 8 位中有 256 种可能的二进制状态,从 0 到 255。这就是操作系统将您的键盘击键转换为屏幕上的字母的方式。当你按下'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 个 DWORD,与 4 个 WORD、8 个字符或 64 位相同。

注意,这些术语的功能仅限于面向开发人员的 Windows API,但可能会出现在其他情况下(例如,Linux dd 命令使用数字后缀来复合字节和块大小,其中 c 是 1 个字节,w 是字节)。

【讨论】:

【参考方案6】:

“最方便的数据块”可能是指 WORD 的宽度(以位为单位),对应于系统总线宽度,或任何可用的底层“带宽”。在 16 位系统上,WORD 被定义为 16 位宽,以 WORD 大小的块移动数据将是最有效的方式。 (在硬件或“系统”级别。)

由于 Java 或多或少独立于平台,它只是将“WORD”定义为“BYTE”的下一个大小,意思是“全带宽”。我猜任何能够运行 Java 的平台都将使用 32 位作为 WORD。

【讨论】:

【参考方案7】:

另一本书引用可变长度 Word 的例子是 操作系统概念,作者是 Sileberschatz, Galvin, Gagne,其中作者在第 1 章第 6 页中指出:

一个不太常见的术语是“单词”, 这是给定计算机体系结构的本机存储单元。一句话是 一般由一个或多个字节组成。例如,一台计算机可能有 移动 64 位(8 字节)字的指令。

【讨论】:

以上是关于一个“字”有多少位?的主要内容,如果未能解决你的问题,请参考以下文章

一个汉字等于多少个字节?

如果机器有 64 位字,则将两个 129 字数相乘需要多少位?

1KB等于多少Byte?

如何区分按字节编址与按字编址

arm中的一个地址有几个字节

两位十六进制数由多少字节组成