51

有人有明确的答案吗?

有人说在 32 位操作系统上 WORD 表示 16 位,对吗?

4

3 回答 3

74

“词”的概念有多种含义。问题中包含 3 个含义。

  • 通用术语“处理器字”,在 CPU 架构的上下文中
  • 软件/操作系统的“位大小”与硬件的“位大小”
  • 全大写术语WORD,表示 16 位值 - 这是 Windows“Win32”C 语言 API 的一部分

在描述 Win32WORD类型定义时,也会出现这种情况:

  • “字”、“双字”和“四字”的 Intel/AMD 指令集概念

通用术语“处理器字”,在 CPU 架构的上下文中

在通用/通用用法中,“处理器字”是指处理器寄存器的大小。它也可以指 CPU 指令的大小,或指针的大小(取决于具体的 CPU 架构)。在简单的情况下,32 位处理器将具有 32 位“字”大小(和指针大小)。64 位处理器将具有 64 位“字”大小(和指针大小)。

一篇关于“处理器词”概念的维基百科文章,详细介绍了该术语的所有通用用法,以及几种当前和历史 CPU 架构的大小。

软件/操作系统的“位大小”与硬件的“位大小”

为了运行“64 位”软件,需要“64 位”CPU 和“64 位”操作系统。这可能是显而易见的。

“64 位软件”使用 64 位指令(例如将 64 位数字相加,或同时将 64 位数据从处理器寄存器复制到 RAM)。它还可以使用 64 位指针大小。这意味着它不仅可以使用最多 4 GB 的 RAM(如“32 位软件”),而且理论上可以使用大约 170 亿 GB 的 RAM(16 艾字节)。

“64 位”x64/x86 CPU 也可以运行“32 位”(甚至“16 位”)软件。它可以做到这一点,而无需对代码进行任何更改,也无需重新构建软件。这是因为所有旧 CPU 指令仍然存在于新 CPU 上,并且它们是向后兼容的。

这些概念与“处理器字”的通用概念并不完全相同,但密切相关。

注意:当您谈论较旧和更专业的处理器(尤其是较旧的视频游戏系统)时,这个概念开始变得稍微复杂一些,但问题并不是关于那些,所以我不会详细说明。这些往往被称为“64 位”或“8 位”系统,但事实比这要复杂一些。请参阅我上面链接的“处理器词”维基文章,或有关相关特定系统的文章。

问题的具体上下文 - WORD,全部大写

问题中的大小写和特定大小(WORD在 32 位操作系统上为 16 位)暗示与通用术语“处理器字”不同的东西。

在旧版 Windows 编程(Win32 API)中,定义了一个名为 的宏WORD,其大小为 16 位。当处理器是 16 位时,这是有道理的。但是,即使您为 32 位或 64 位目标编译包含此宏的代码,它仍然是 16 位。Win32 API中的aDWORD是32位,aQWORD是64位。

这是因为微软在他们的 Win32 API 中非常努力地支持向后兼容性,而无需对代码进行任何更改。在大多数情况下,您可以编译 Windows 95 时代的 Win32 示例而无需更改,并且它们今天仍然可以完全相同的方式工作。

微软很可能从英特尔(可能还有 AMD)文档中继承了这种命名方案。

“字”、“双字”等的 Intel/AMD 指令集概念

在英特尔文档中,“字”(Win32 WORD)是 16 位。“双字”(Win32 DWORD)是 32 位。“四字” (Win32 QWORD) 是 64 位。相关的汇编指令名称也反映了这种命名方案(例如 MMX Add Packed IntegersPADD指令:PADDW、、、PADDDPADDQ

对于一些示例,您可以查看有关 x86 指令集的这篇维基百科文章,或英特尔软件开发手册

就“处理器字”的一般概念而言,这种命名方案不一定有意义,因为这些概念仅涉及寄存器的一部分。然而,它们在为 x86 程序创建稳定的编程接口方面确实有意义。这就是为什么您可以在“64 位”操作系统之上使用“32 位”(和 16 位)程序的重要部分。

于 2011-03-14T07:47:09.133 回答
3

没有确定的答案。

传统上,术语“字”是指处理器寄存器和主数据路径的大小。根据该定义,“单词”在 32 位系统上是 32 位,在 64 位系统上是 64 位。

然而,当处理器系列被扩展以添加更广泛的寄存器/操作模式时,这些处理器的制造商和用户有时会继续使用“字”来指代原始处理器的字长。当软件从一个处理器系列移植到另一个处理器系列时,也会发生同样的情况。

英特尔 x86 文档使用术语“字”¹来指代 16 位数量。这种用法渗透到最初为 x86 开发的软件环境中,例如 windows API 和 Borland 风格的 pascal。

另一方面,arm 文档使用术语“word”² 来指代 32 位数量。

¹ 请参阅https://software.intel.com/sites/default/files/managed/a4/60/253665-sdm-vol-1.pdf中的第 4.1 节

² 参见https://static.docs.arm.com/ddi0487/db/DDI0487D_b_armv8_arm.pdf中的 A1.4 节

于 2019-06-15T09:48:36.237 回答
1

一个 Word 是 16 位 DWord(双字)的大小在编程中使用时是 32 位字大小的两倍,但是......

操作系统中的名称 Word 是操作系统旁边显示的数字,所以如果它说 64 位,那么在这种情况下,一个字(存储的地址)是 64 位的

因此,这取决于您从编程或操作系统编号的角度看待它

于 2015-12-11T11:10:33.333 回答