我目前正在学习Intel x86处理器上的汇编编程。
请问有没有人能够解释一下,MMX寄存器和XMM寄存器之间的区别?我非常困惑它们各自的功能以及它们之间的异同。
MM寄存器是指MMX指令集使用的寄存器,它是向x86添加(仅整数)SIMD的第一次尝试之一。它们的宽度为64位,实际上是x87寄存器的尾数部分的别名(但不受FPU堆栈顶位置的影响)。这是为了保持与现有操作系统的兼容性(已经在上下文切换时保存FPU堆栈),但同时使用MMX和浮点运算会变得很困难。
如今它们只是历史上的一个奇怪现象,我认为没有人再使用MMX了,因为各种SSE扩展已经完全取代了它。 编辑: 正如Peter Cordes在评论中指出的那样,目前还有相当多的MMX代码存在。
XMM寄存器则是完全独立的寄存器集,由SSE引入,并且至今仍广泛使用。它们的宽度为128位,具有可以将其视为64、32(整数和浮点)、16或8位(仅限整数)值数组的指令。在32位模式下有8个,在64位模式下有16个。在64位模式下,几乎所有的浮点数学运算都是在SSE(因此XMM寄存器)中完成,因此与MMX寄存器不同,它们仍然非常重要。
如今你也可能会遇到YMM和ZMM寄存器; 它们分别是AVX(2011年)和AVX-512(2015年)指令集引入的,它们扩展了XMM寄存器,类似于通用寄存器的e
和r
扩展(rax
扩展为eax
,扩展为ax
,可以访问为ah
:al
)。
XMMWORD
/ YMMWORD
。5和6)我看不出问题…由高级语言公开的类型不受硬件限制。 - Matteo Italia