Assembly 什么';64位机器上Q字的大小是多少?

Assembly 什么';64位机器上Q字的大小是多少?,assembly,32bit-64bit,cpu-architecture,word,Assembly,32bit 64bit,Cpu Architecture,Word,我目前正在寻找上述问题的答案。到目前为止,我发现有人说,字的大小是指处理器寄存器的大小,这意味着在64位机器上,字的大小是64位,因此QWORD(4*字)的大小是256位 但另一方面,我发现有消息称大小为128位(32位为64位,64位为两倍),而即使是这样,也有人建议大小为64位。但最后一个问题与微软有关,微软将一个单词的大小定义为16位,这让每个人都感到困惑,从而使事情变得更糟 也许有人能解决我的困惑,并在这个话题上启发我。在x86术语/文档中,“单词”是16位的,因为x86是从16位808

我目前正在寻找上述问题的答案。到目前为止,我发现有人说,字的大小是指处理器寄存器的大小,这意味着在64位机器上,字的大小是64位,因此QWORD(4*字)的大小是256位

但另一方面,我发现有消息称大小为128位(32位为64位,64位为两倍),而即使是这样,也有人建议大小为64位。但最后一个问题与微软有关,微软将一个单词的大小定义为16位,这让每个人都感到困惑,从而使事情变得更糟


也许有人能解决我的困惑,并在这个话题上启发我。

在x86术语/文档中,“单词”是16位的,因为x86是从16位8086演变而来的。在添加扩展时更改术语的含义会让人感到困惑,因为Intel仍然必须记录16位模式和所有内容,而像
cwd
(sign extend word to dword)这样的指令助记符会将术语烘焙到ISA中

  • x86字=2字节
  • x86 dword=4字节(双字)
  • x86 qword=8字节(四字)
  • x86双四元组或xmmword=16字节,例如
    movdqa xmm0,[rdi]

    同样在oct这个词中。(符号将RAX扩展为RDX:RAX,例如在
    idiv
    之前)
然后我们有一些有趣的指令,比如:将两个qword混合到一个dqword中,或者对qword进行少进位乘法,产生一个dq完整的结果。但除此之外,SIMD助记符往往是AVX
vextract128
或AVX512(具有可选的每元素屏蔽),用于提取ZMM寄存器的高256位

更不用说“tbyte”=10字节x87扩展精度浮点;x86很奇怪,不是所有的东西都是2的幂。另外,48位seg:off 16:32远指针处于保护模式。(基本上从未使用过,仅使用32位偏移部分。)


大多数其他64位ISA是从32位ISA(AArch64、MIPS64、PowerPC64等)演变而来的,或者从一开始就是64位的(Alpha),因此“word”在该上下文中表示32位。

  • 32位字=4字节
  • dword=8字节(双字),例如MIPS
    daddu
    是64位整数相加
  • qword=16字节(四字),如果支持的话

在我听说过的任何64位机器上,“单词”并不意味着64位。即使是DEC Alpha AXP,它从一开始就被设计成64位,使用32位指令字。IIRC,手册调用一个32位的字

能够用一条指令将64位加载到整数寄存器并不意味着“字大小”比特度和字号没有明确的技术含义;大多数CPU内部都有多种不同的大小。(例如,Intel Haswell上二级和一级缓存之间的64字节总线,以及32字节SIMD加载/存储。)

因此,基本上由CPU供应商的文档作者来选择其ISA的“word”(以及dword/qword)含义



有趣的事实:SPARC64讨论的是“短字”(32位)与“长字”(64位),而不是字/双字。我不知道在64位SPARC文档中,不带任何限定符的“word”是否有任何意义。

Sun的SPARC-64文档提到“短单词”(32位)和“长单词”(64位)。因此,术语“字”可能是32位或64位字。请注意,xmmword用于x86 16字节值,至少在当前版本的MASM(如Visual Studio中的版本)中是这样。还与: