MMX和XMM注册之间的区别?

时间:2017-06-01 05:49:40

标签: assembly x86 x86-64 sse mmx

我目前正在学习英特尔x86处理器上的汇编编程。

有人可以向我解释一下,MMX和XMM注册有什么区别?我们在服务的功能以及它们之间的差异和相似性方面非常困惑?

1 个答案:

答案 0 :(得分:17)

MM寄存器是MMX指令集使用的寄存器,是首次尝试将(仅整数)SIMD添加到x86的尝试之一。它们是64位宽,它们实际上是x87寄存器的尾数部分的别名(但它们不受堆栈位置的FPU顶部的影响);这样做是为了保持与现有操作系统(已经在上下文切换中保存FPU堆栈)的兼容性,但是使用MMX和浮点作为一项非常重要的工作。

现在它们只是一个历史性的奇怪,我认为任何人都不再使用MMX,因为它已被各种SSE扩展完全取代。 编辑:正如Peter Cordes在评论中指出的那样,仍有相当多的MMX代码。

相反,XMM寄存器是一个完全独立的寄存器集,与SSE一起引入,至今仍广泛使用。它们是128位宽,具有可以将它们视为64,32(整数和浮点),16或8位(仅整数)值的数组的指令。你有8个在32位模式下,16个在64位模式下。事实上,所有浮点数学都是在64位模式下在SSE(以及XMM寄存器)中完成的,因此,与MMX寄存器不同,它们仍然非常相关。

现在您也可能会遇到YMM和ZMM寄存器;它们分别与AVX(2011)和AVX-512(2015)指令集一起介绍,它们扩展了XMM寄存器,与通用寄存器的er扩展不同({ {1}}扩展rax扩展eax,可以ax访问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,因此这些寄存器更大,数量也是两倍。