我目前正在寻找上述问题的答案。到目前为止,我发现有人说,字大小是指处理器寄存器的大小,这表明在64位机器上字长为64位,因此QWORD(4 *字)的大小为256位。
但另一方面,我发现像this这样的来源说大小是128位(32位是64位,64位是两倍),而其他人则认为大小是64位。但是,最后一个与微软有关,通过将每个字的大小定义为16位来混淆每个人,使事情变得更糟。
也许有人可以解决我的困惑,并启发我这个话题。
在x86术语/文档中,“word”是16位,因为x86是从16位8086演变而来的。在添加扩展时更改术语的含义会让人感到困惑,因为英特尔仍然需要记录16位模式和一切,以及像cwd
(sign-extend word to dword)这样的指令助记符将术语烘焙到ISA中。
大多数其他64位ISA由32位ISA(AArch64,MIPS64,PowerPC64等)演变而来,或者从开始(Alpha)开始是64位,因此“字”在该上下文中意味着32位。
daddu
是64位整数加法在我听说过的任何64位机器上,“字”并不代表64位。即使是DEC Alpha AXP,它从头开始设计为积极的64位,它使用32位指令字。 IIRC,手册调用一个32位的字。
能够使用单个指令将64位加载到整数寄存器中并不能使其成为“字大小”。比特和字大小没有特定的技术含义;大多数CPU内部有多种不同的大小。 (例如,自Haswell以来,英特尔的L2和L1d缓存之间的64字节总线,以及32字节的SIMD加载/存储。)
因此,基本上由CPU供应商的文档作者来选择“单词”(以及dword / qword)对他们的ISA意味着什么。
有趣的事实:SPARC64谈论“短字”(32位)与“长字”(64位),而不是字/双字。我不知道在没有任何限定符的情况下,只有“word”在64位SPARC文档中是否有任何意义。