首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MMX和XMM寄存器之间的区别?

MMX和XMM寄存器之间的区别?
EN

Stack Overflow用户
提问于 2017-06-01 13:49:40
回答 1查看 20.2K关注 0票数 27

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

有人能给我解释一下,MMX和XMM寄存器有什么区别吗?我对它们的功能以及它们之间的区别和相似之处感到非常困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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寄存器,这与对通用寄存器的er扩展没什么不同(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,因此这些寄存器都更大,数量也增加了一倍。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44299401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档