我目前正在学习英特尔x86处理器上的汇编语言编程。
有人能给我解释一下,MMX和XMM寄存器有什么区别吗?我对它们的功能以及它们之间的区别和相似之处感到非常困惑。
发布于 2017-06-01 14:07:37
MM寄存器是MMX指令集使用的寄存器,它是向x86添加(仅限整数) SIMD的首批尝试之一。它们是64位宽的,它们实际上是x87寄存器的尾数部分的别名(但它们不受堆栈位置顶部的浮点处理器的影响);这样做是为了保持与现有操作系统的兼容性(在上下文切换时已经保存了浮点堆栈),但将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寄存器,这与对通用寄存器的e
和r
扩展没什么不同(rax
extended eax
扩展了可以作为ahal
访问的ax
)。
在支持AVX的处理器中,XMM寄存器文件中的每个寄存器扩展为256位。整个256位寄存器称为YMMx (x从0到15),可供新的AVX指令使用,下半部分为XMMx,仍可供较旧的SSE指令使用。
类似地,AVX-512将上面的寄存器扩展到512位;整个寄存器是ZMMx (可用于AVX-512指令),低256位是YMMx (也可用于AVX指令),低128位仍是XMMx (也可用于SSE)。此外,寄存器计数增加到32,因此这些寄存器都更大,数量也增加了一倍。
https://stackoverflow.com/questions/44299401
复制相似问题