“词”的概念有多种含义。问题中包含 3 个含义。
- 通用术语“处理器字”,在 CPU 架构的上下文中
- 软件/操作系统的“位大小”与硬件的“位大小”
- 全大写术语
WORD,表示 16 位值 - 这是 Windows“Win32”C 语言 API 的一部分
在描述 Win32 WORD 类型定义时,也会出现这种情况:
- “字”、“双字”和“四字”的 Intel/AMD 指令集概念
通用术语“处理器字”,在 CPU 架构的上下文中
在通用/通用用法中,“处理器字”是指处理器寄存器的大小。它也可以指 CPU 指令的大小,或指针的大小(取决于具体的 CPU 架构)。在简单的情况下,32 位处理器将具有 32 位“字”大小(和指针大小)。 64 位处理器将具有 64 位“字”大小(和指针大小)。
a wikipedia article on this "processor word" concept 详细介绍了该术语的所有通用用法,以及几种当前和历史 CPU 架构的大小。
软件/操作系统的“位大小”与硬件的“位大小”
为了运行“64 位”软件,需要“64 位”CPU 和“64 位”操作系统。这可能是显而易见的。
“64 位软件”使用 64 位指令(例如,将 64 位数字相加,或同时将 64 位数据从处理器寄存器复制到 RAM)。它还可以使用 64 位指针大小。这意味着它理论上可以使用大约 170 亿 GB(16 艾字节)的 RAM,而不是只能使用最多 4 GB 的 RAM(如“32 位软件”)。
“64 位”x64/x86 CPU 也可以运行“32 位”(甚至“16 位”)软件。它可以做到这一点,而无需对代码进行任何更改,也无需重新构建软件。这是因为所有旧 CPU 指令仍然存在于新 CPU 上,并且它们是向后兼容的。
这些概念与“处理器字”的通用概念并不完全相同,但密切相关。
注意:当您谈论较旧和更专业的处理器(尤其是较旧的视频游戏系统)时,这个概念开始变得稍微复杂一些,但问题并不是关于这些,所以我不会详细说明。这些往往被称为“64 位”或“8 位”系统,但事实比这要复杂一些。请参阅the "processor word" wiki article I linked above,或有关相关特定系统的文章。
问题的具体上下文 - WORD,全部大写
问题中的大小写和具体大小(WORD 为 16 位,在 32 位操作系统上)暗示与通用术语“处理器字”不同的东西。
在旧版 Windows 编程(Win32 API)中,定义了一个名为 WORD 的宏,其大小为 16 位。当处理器是 16 位时,这是有道理的。但是,即使您为 32 位或 64 位目标编译包含此宏的代码,它仍然是 16 位。 Win32 API 中的DWORD 是 32 位,QWORD 是 64 位。
这是因为微软在他们的 Win32 API 中非常努力地支持向后兼容性,而无需对代码进行任何更改。在大多数情况下,您可以编译 Windows 95 时代的 Win32 示例而无需更改,并且它们在今天仍然可以完全一样地工作。
Microsoft 很可能从 Intel(可能还有 AMD)文档中继承了这种命名方案。
“字”、“双字”等的 Intel/AMD 指令集概念
在英特尔文档中,“字”(Win32 WORD) 是 16 位。 “双字” (Win32 DWORD) 是 32 位。 “四字” (Win32 QWORD) 是 64 位。相关的汇编指令名称也反映了这种命名方案(例如 MMX Add Packed Integers PADD 指令:PADDW、PADDD、PADDQ)。
对于一些示例,您可以check this wikipedia article on the x86 instruction set 或the Intel software development manuals。
就“处理器字”的一般概念而言,这种命名方案不一定有意义,因为这些概念仅针对寄存器的一部分。然而,它们在为 x86 程序创建稳定的编程接口方面确实有意义。这就是为什么您可以在“64 位”操作系统之上使用“32 位”(和 16 位)程序的重要原因。