MMX和XMM寄存器之间的差异



我目前正在学习Intel X86处理器上的汇编编程。

有人可以向我解释,MMX和XMM寄存器有什么区别?我对它们所服务的功能以及它们之间的差异和相似性感到非常困惑?

mm寄存器是MMX指令集使用的寄存器,这是将SIMD添加到x86中的首次尝试(仅Integer(。它们的宽度为64,实际上是X87寄存器的Mantissa部分的别名(但它们不受堆栈位置的FPU顶部的影响(;这样做的目的是保持与现有操作系统的兼容性(该操作系统已经保存了上下文开关上的FPU堆栈(,但使用MMX与浮点一起制造了非琐碎的工作。

如今,它们只是一个历史上的奇怪之处,我认为没有人实际使用MMX,因为它已经完全被各种SSE扩展所取代了。编辑:正如彼得·科德斯(Peter Cordes(在评论中指出的那样,周围仍然有很多MMX代码。


相反,

XMM寄存器是一个完全独立的寄存器集,它与SSE一起引入,并且至今仍被广泛使用。它们的宽度为128位,带有指令,可以将它们视为64、32(整数和浮点(,16或8位(仅整数(值的阵列。您有8个以32位模式为64位的16位。几乎所有浮点数学都是在64位模式下在SSE(以及XMM寄存器(中完成的,因此,与MMX寄存器不同,它们仍然很重要。

如今,您还可以遇到YMM和ZMM寄存器;它们分别使用AVX(2011(和AVX-512(2015(指令集进行了介绍,并且它们扩展了XMM寄存器,与er扩展不同,向通用用途寄存器(rax扩展eax扩展的CC_4(访问为ahal(。

在具有AVX功能的处理器中,XMM寄存器文件中的每个寄存器都将扩展到256位。整个256位寄存器称为YMMX(x从0到15(,可以通过新的AVX指令使用,下半部分为XMMX,并且可以通过较旧的SSE说明使用。

同样,AVX-512将寄存器扩展到512位;整个寄存器是ZMMX(可用于AVX-512说明(,较低的256位为YMMX(也可与AVX说明一起使用(,较低的128位仍然是XMMX(也可用于SSE(。同样,寄存器计数增加到32,因此这些寄存器均大量和两次。

最新更新