博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
emms指令在MMX指令中的作用
阅读量:5280 次
发布时间:2019-06-14

本文共 707 字,大约阅读时间需要 2 分钟。

 

 

转自:

    MMX和SSE都是INTEL开发的基于SIMD(单指令多数据流)的技术。所谓单指令多数据流是指可以用一条指令可以完成多个数据的操作。虽然64位系 统已经推出,但是我们大部分都是使用32位系统,所以如果要完成两个128位的相加运算,用普通32位指令很明显要执行4条相加指令,而基于64位的 MMX指令只需要执行两次即可完成,更强大的SSE能一次处理128位,故一次就可以完成操作,所以采用MMX及SSE优化能够大幅度提升程序性能。
    MMX采用处理器的80位的浮点寄存器的低64位作为MMX寄存器,一共有8个,从mm0到mm7,因为是“借用”浮点寄存器的低64位所以每次在用完 MMX指令后一定要用EMMS指令将寄存器清空,MMX主要是针对整数运算进行优化,一个64位的MMX寄存器可以同时存入8个8位或者4个16位的整 数,估计一次性就可以完成8次8位运算或者4次16位运算,要注意的MMX指令不能直接对32位数进行2次运算,但可以把32位拆分成两个16位再进行运 算。MMX技术还有一个非常有用的特性是饱和运算,比如两个8位数相加:128+129相加后很明显超过了8位的最大值256,但是进行饱和运算相加的结 果将是最大值256,饱和运算将运算结果控制在相应位数的范围内。
   最近在调试开发一个多媒体相关的程序,发现一个非常奇怪的问题,某些操作之后会导致随后的float数运算结果混乱,花了1个小时的时间才发现是因为自己在使用完MMX指令后忘记用emms指令将浮点寄存器复位!

 

转载于:https://www.cnblogs.com/jingzhishen/p/4453213.html

你可能感兴趣的文章
mysql5.5.28.tar.gz编译安装操作笔记
查看>>
神经网络图灵机(Neural Turing Machines, NTM)
查看>>
Spring AOP 关键词的理解
查看>>
java合成图片
查看>>
Java Web开发Tomcat中三种部署项目的方法
查看>>
【Linux】Linux 自己主动挂载NTFS格式移动硬盘
查看>>
LinbDesk --- 新的extjs4.2 desktop demo : 技术交流Q群:336584192
查看>>
Ubuntu14.04下安装ZendStudio10.6.1+SVN出现Failed to load JavaHL Library
查看>>
Wind River Linux 6 Security Profile
查看>>
Android_显示器本身被卸载应用程序
查看>>
怎样以学习单片机为契机,逐步成为优秀的project师
查看>>
Java中Integer类的方法
查看>>
“error : unknown filesystem”的解决的方法
查看>>
linux杂谈(十九):DNSserver的配置(二)
查看>>
《网络攻防》第二周作业
查看>>
关于Windows Live Writer博客同步
查看>>
linux下的C语言快速学习—计算机体系结构基础简单了解
查看>>
nextTick refs
查看>>
内置函数
查看>>
ucore lab1实验笔记
查看>>