assembly 对于更大的寄存器,字大小意味着什么?[已关闭]

nqwrtyyt  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(114)

已关闭,此问题为opinion-based。它目前不接受回答。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。

上个月关门了。
Improve this question
This问题已经过时,因此这不是重复问题。
我们通常指的是64位和32位计算机。传统上,它直接对应于寄存器大小(根据我的理解),并且是在一个周期内能够流过简单的非流水线处理器的数据量。
然而,随着128位和512位寄存器的普及,字长又意味着什么呢?像movq这样的指令在x86-64中移动64位,但是如果存在更大的寄存器,为什么我们不称CPU为128位?
另外,理解指针,在像C这样的语言中,可能会受到影响,但我看不出字大小和指针大小之间的相关性,因为指针应该取决于地址空间的大小。

rn0zuynd

rn0zuynd1#

其含义根据处理器的不同而变化,我在下面举了几个例子。我认为,由于向前兼容性的概念,一旦一个WORD被赋予了一个大小(比如16位),它就会在整个系列的处理器中保持这种状态。请注意,有些处理器开始时是32位,但仍然有16位的WORD(参见68000)。所以,或多或少,你必须阅读处理器的文档,以找出一个字的大小,因此,没有确切的定义,将适用于所有处理器。
正如Peter Cordes所指出的,这个词也用于其他地方,如C/C++,在那里它们可以真正意味着任何东西。在这个strlen() post中,评论说:

/* All these elucidatory comments refer to 4-byte longwords,
   but the theory applies equally well to 8-byte longwords.  */

在这种情况下,我们可以说术语“长字”指的是32或64位的架构通用寄存器大小。

Intel/AMD处理器

对于Intel family of CPUs,WORD是16位,尽管这些CPU现在支持高达512位的寄存器(对于AVX 512,请参阅ZMM寄存器)。

  • 这些指令的操作数是字节、字或双字长的压缩整数。操作数作为64或128位数据存储在MMX寄存器、XMM寄存器或存储器中。(第12.6节SSSE 3说明)*

这是8086的情况,因为当时寄存器是16位的。含义没有改变(参见 *4.1基本数据类型 *)。

  • 字节-8位
  • 字- 16位
  • 双字-- 32位(通常缩写为DWord)
  • 四字-- 64位(通常缩写为QWord)
  • 双四字-- 128位(参见 *4.1.1字、双字、四字和双四字的对齐 *)

我认为许多旧的处理器使用WORD来表示16位。如果你使用的是Intel / AMD或类似的处理器,肯定的是,一个WORD是16位的,我不认为它会改变。

68000处理器

这个过程也使用16位的WORD,尽管它也是一个32位处理器(并且没有16位版本)。

  • 字节-8位
  • 字- 16位
  • 长字- 32位

ARM处理器

下面是ARM处理器的数据类型列表,它是不同的。一个字是32位。然而,较新的处理器是64位的。
同样,我认为这是因为他们不想改变用户的术语,如果仅仅因为处理器变得更强大而改变,用户可能会感到非常困惑。

R5000(Risc)

这些较新的MIPS处理器也是64位处理器。一个字只有32位。同样,可能是为了保持与旧的32位版本的处理器的兼容性。

CUDA

CUDA处理器使用32位的WORD。我没有找到数据类型的定义,但找到了这一节,他们引用了半个字作为16位。它们也有一个字节(8位)。同样,这个CPU支持64位,并且已经有一段时间了。

安装

我在我的文档中找不到一个清晰的类型列表,但是有一个清晰的参考,它将半字定义为16位。根据注解和表5-2,定义如下:

  • 字节-- 8位
  • 半字- 16位
  • 简写-- 32位
  • 双字或长字-- 64位
  • 四字- 128位

CRAY-1

CRAY计算机从第一天起就使用64位CPU。因此,它们的字是64位。

调整部分

  • 64位字
  • 12.5纳秒时钟周期
  • 二进制补码运算
  • ...

相关问题