我做了一些研究。一个字节是 8 位,一个字是内存中可以寻址的最小单位。单词的确切长度各不相同。我不明白的是有一个字节有什么意义?为什么不说 8 位?
我问了一位教授这个问题,他说现在大多数机器都是字节寻址的,但那会是什么意思呢?
字节:今天,一个字节几乎总是 8 位。但是,该 wasn't always the case 并没有“标准”或规定这一点的东西。由于 8 位是一个方便使用的数字,因此它成为了事实上的标准。
Word:natural size with which a processor is handling data(寄存器大小)。今天遇到的最常见的字长是 8、16、32 和 64 位,但其他大小也是可能的。例如,有几个 36 bit machines,甚至 12 bit machines。
字节是 CPU 的最小可寻址单元。如果要设置/清除单个位,首先需要从内存中获取相应的字节,弄乱这些位,然后将字节写回内存。
相比之下,字的一个定义是处理器一次可以进行处理(如加法和减法)的最大位块——通常是整数寄存器的宽度。该定义有点模糊,因为某些处理器可能针对不同的任务(例如整数与浮点处理)具有不同的寄存器大小,或者能够访问寄存器的一部分。字大小是大多数操作使用的最大寄存器大小。
还有一些处理器具有不同的指针大小:例如,8086 是一个 16 位处理器,这意味着它的寄存器是 16 位宽。但它的指针(地址)是 20 位宽,是通过以某种方式组合两个 16 位寄存器来计算的。
在某些手册和 API 中,术语 “word” 可能会“停留”在以前的旧版大小上,并且在平台发展为支持更大的寄存器时可能与处理器的实际当前字长有所不同尺寸。例如,Intel 和 AMD x86 手册仍将 "word" to mean 16 bits 与 DWORD
(双字,32 位)和 QWORD
(四字,64 位)一起用作更大的尺寸。然后这会反映在一些 API 中,例如 Microsoft 的 WinAPI。
我不明白的是有一个字节有什么意义?为什么不说 8 位?
除了一个字节不一定是8位的技术点之外,有一个术语的原因很简单:人性:
省力(又名懒惰) - 说“字节”而不是“八位”更容易
部落主义 - 一群人喜欢使用行话/私人语言将他们与其他人区分开来。
只是顺其自然。您不会因为抱怨而改变 50 多年积累的 IT 术语和文化包袱。
FWIW - 当您的意思是“独立于硬件架构的 8 位”时使用的正确术语是“八位字节”。
字节
我试图从 C++ 的角度回答这个问题。
C++ 标准将“字节”定义为“大到足以容纳执行环境基本字符集的任何成员的可寻址数据单元”。
这意味着该字节至少包含足够的相邻位以容纳实现的基本字符集。也就是说,可能值的数量必须等于或超过不同字符的数量。在美国,基本字符集通常是 ASCII 和 EBCDIC 集,每一种可以容纳 8 位。因此,可以保证一个字节至少有 8 位。
换句话说,一个字节是存储单个字符所需的内存量。
如果要验证 C++ 实现中的“位数”,请检查文件“limits.h”。它应该有一个如下所示的条目。
#define CHAR_BIT 8 /* number of bits in a char */
单词
字定义为机器/系统可以一起处理(即一次尝试)的特定位数。或者,我们可以说 Word 定义了可以在单个操作中在 CPU 和 RAM 之间传输的数据量。
计算机中的硬件寄存器是字大小的。字大小还定义了最大可能的内存地址(每个内存地址指向一个字节大小的内存)。
注 – 在 C++ 程序中,内存地址指向内存的一个字节,而不是一个字。
为什么不说 8 位?
因为并非所有机器都有 8 位字节。由于您标记了此 C
,请在 limits.h
中查找 CHAR_BIT
。
一个字是处理器中寄存器的大小。这意味着处理器指令(如 add、mul 等)位于字大小的输入上。
但是大多数现代架构都有可寻址的 8 位块内存,因此使用“字节”一词很方便。
似乎所有答案都假设高级语言,主要是 C/C++。
但是这个问题被标记为“汇编”,并且在我知道的所有汇编程序中(对于 8 位、16 位、32 位和 64 位 CPU),定义更加清晰:
byte = 8 bits
word = 2 bytes
dword = 4 bytes = 2Words (dword means "double word")
qword = 8 bytes = 2Dwords = 4Words ("quadruple word")
int<X>_t
和 uint<X>_t
类型(加上更多),如果你想要一个特定位的变量/参数,应该使用它们尺寸。
单词的确切长度各不相同。我不明白的是有一个字节有什么意义?为什么不说 8 位?
尽管单词的长度各不相同,但在所有现代机器甚至我熟悉的所有旧架构上,单词大小仍然是字节大小的倍数。因此,相对于可变字长而言,在“8 位”上使用“字节”并没有特别的缺点。
除此之外,这里有一些在“8位”上使用字节(或八位字节)的原因:
较大的单位只是为了方便避免非常大或非常小的数字:您不妨问“可以说 0.000000003 秒,为什么要说 3 纳秒”或“可以说 1,000 克,为什么还要说 1 公斤”等。 ,字节的单位在某种程度上与 1 位一样基本,因为许多操作通常不在字节级别,而是在字节级别:寻址内存、分配动态存储、从文件或套接字读取等。即使你是采用“8 位”作为单位类型,因此您可以说“两个 8 位”而不是“两个字节”,让您的新单位以数字开头通常会很混乱。例如,如果有人说“一百个 8 位”,它很容易被解释为 108 位,而不是 100 位。
1 虽然我认为这个答案的一个字节是 8 位,但这并不是普遍正确的:在旧机器上,一个 byte 可能有不同的大小(例如6 bits。Octet 始终表示 8 位,与机器无关(因此该术语经常用于定义网络协议)。在现代用法中,字节绝大多数被用作 8 位的同义词。
无论数据表和编译器中出现什么术语,“字节”都是八位。让我们不要试图将询问者和一般性与更模糊的例外混淆,特别是因为“字节”这个词来自“八岁”这个表达。我在半导体/电子行业工作了 30 多年,从来没有人知道“字节”用于表示超过 8 位的任何内容。
参考:https://www.os-book.com/OS9/slide-dir/PPT-dir/ch1.ppt
计算机存储的基本单位是比特。一个位可以包含两个值之一,0 和 1。计算机中的所有其他存储都基于位的集合。给定足够多的位,一台计算机可以表示多少东西是惊人的:数字、字母、图像、电影、声音、文档和程序,仅举几例。一个字节是 8 位,在大多数计算机上它是最小的方便存储块。例如,大多数计算机没有移动位的指令,但有移动字节的指令。一个不太常见的术语是单词,它是给定计算机体系结构的本机数据单元。一个字由一个或多个字节组成。例如,具有 64 位寄存器和 64 位内存寻址的计算机通常具有 64 位(8 字节)字。计算机以它的本机字长而不是一次一个字节来执行许多操作。计算机存储以及大多数计算机吞吐量通常以字节和字节集合为单位进行测量和操作。千字节或 KB 是 1,024 字节 每兆字节或 MB 是 1,024 2 字节每千兆字节或 GB 是 1,024 3 字节每太字节或 TB 是 1,024 4 字节每 PB 或 PB 是 1,024 5 字节 计算机制造商经常对这些数字进行四舍五入,并说一兆字节是 100 万字节,千兆字节是 10 亿字节。网络测量是这个一般规则的一个例外。它们以位给出(因为网络一次移动一点数据)
一组 8 位称为一个字节(对于某些体系结构,它不是:) 除外)
字是一组固定大小的位,由处理器的指令集和/或硬件作为一个单元处理。这意味着通用寄存器的大小(通常超过一个字节)是一个字
在C语言中,一个词最常被称为整数=>; int
octet
被定义为明确表示 8 位序列,因为与术语字节相关的歧义。但我更喜欢 byte
的声音 :)
byte
的声音”:我强烈怀疑您并不孤单,并且对于一些小众系统来说是安全的,如今,字节可能是 8 位以外的大小不再相关。
如果一台机器是字节可寻址的,而一个字是内存中可以寻址的最小单位,那么我猜一个字就是一个字节!
word
绝对 表示 32 位,但有一个 lb
(加载字节)指令可以加载 8 位。
BYTE 和 WORD 的术语与所引用的处理器的大小有关。最常见的处理器是/曾经是 8 位、16 位、32 位或 64 位。这些是处理器的 WORD 长度。实际上,一个 WORD 的一半是一个字节,无论数字长度是多少。准备好了,半个字节是一个半字节。
事实上,在通常的用法中,word 已经成为 16 位的同义词,就像 byte 具有 8 位一样。由于 32 位 CPU 上的“字长”是 32 位,因此可能会有些混乱,但是当谈到一个数据字时,它的意思是 16 位。具有 32 位字长的微控制器已将其指令称为“长”指令(据说是为了避免字/双字混淆)。
ldrh
加载 16 位并将其零扩展为 32 位寄存器。或 ldrsh
加载和符号扩展 16 位。
不定期副业成功案例分享
word
是 16 位,即使在默认操作数大小为 32 位(dword)且整数寄存器宽度为 64 位(qword)的现代 x86 CPU 上也是如此。 xmm 寄存器为 128 位宽(movdqa
移动双四进制)。内存总线至少为 64 位宽(并且以 64 字节的突发传输 = 一个高速缓存行),执行单元到高速缓存路径的宽度至少为 128 位,或者 256 甚至 512 位宽。无论现代 x86 的本机机器字大小是多少,它都不是 16 位,但现代 x86 仍然使用 8086 术语。