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指令将浮点寄存器复位!

emms指令在MMX指令中的作用相关推荐

  1. EOF指令在C语言中的作用

    首先我们要了解"EOF"指令在C语言中的定义:在C语言中,或更精确地说成C标准函式库中表示文件结束符(end of file).在while循环中以EOF作为文件结束标志,这种以E ...

  2. scp命令 二进制_plc中scl指令和scp指令的作用与应用案例

    一.plc scl指令和scp指令的作用 1.RSLOGIX 500中的SCL和SCP的作用是什么? 2.这二个指令作用相同,但是可支持的SLC型号有区别. SCL是通过计算偏移来整定,就相当于一次方 ...

  3. C语言的变量和汇编中的伪指令,伪指令 尤其EQU DW DB(微机和单片机中的作用稍微不同,但是规则机制相同)微机原理中的汇编指令和伪指令是标准的,单片机的指令和伪指令是在微机标准版基础上修改的版

    微机原理中表明 变量用伪指令DW,DB 单片机中的伪指令EQU C语言中的变量来源与汇编的伪指令(微机和单片机中的作用稍微不同,但是规则机制相同)微机原理中的汇编指令和伪指令是标准的,单片机的指令和伪 ...

  4. Intel体系MMX指令指令说明

    Intel体系MMX指令&指令说明 EMMS MMX状态置空: 将FP特征字置空(全1),使后续浮点指令可以使用浮点寄存器,其他MMX指令自动置FP为全0.本指令应在所有MMX例程结束和调用可 ...

  5. HTML在计算机中指什么,计算机正在执行的指令存放在什么中

    计算机正在执行的指令存放在内存中. 在计算机中,操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中.这里存储器,就是内存. 其作用是用于暂时存放C ...

  6. Dockerfile文件中CMD指令与ENTRYPOINT指令的区别

    [Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...

  7. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(9) - 64位整型指令(MMX指令集扩展)

    SSE 64-Bit SIMD Integer Instructions SSE扩展增加了几条64位组合的整型指令,这些指令操作MMX寄存器和64位的存储器操作数,这些指令可以看作是对MMX指令集的扩 ...

  8. Linux系统学习: 进程、重定向和管道指令:xargs 指令的作用是

    进程 为了弄清楚这节课程的内容,也就是管道,我们先来讨论一下进程. 我们知道,应用的可执行文件是放在文件系统里,把可执行文件启动,就会在操作系统里(具体来说是内存中)形成一个应用的副本,这个副本就是进 ...

  9. SIMD——MMX指令的溢出处理

    MMX中的Saturation 和 WrapAround规定 1定义 2MMX处理方式 3示例 MMX中的Saturation 和 WrapAround规定 本文主要为Intel 64 and IA- ...

最新文章

  1. 【微信小程序】侧滑栏,手动侧滑出个人中心(完整代码附效果图)
  2. xcode6 AsynchronousTesting 异步任务测试
  3. 字符串函数实现(strlen,strcpy,strcmp,strcat,strrev)
  4. Opencv--CalcOpticalFlowPyrLK实现的光流法理解
  5. 使用Selenium启动火狐浏览器
  6. Aliplayer自定义组件
  7. 蜂巢输入法android,讯飞输入法“蜂巢II”输入模型 内核提速便捷实用
  8. javafx 教程_示例介绍:JavaFX 8打印
  9. Julia发布全功能调试器:4大新功能问世
  10. 虚拟机软件有哪些?分别有哪些作用?
  11. 使用字节流和字符流向浏览器输出数据
  12. java期末考试复习题_java期末考试复习题库 试题题库.doc
  13. 人参皂苷rg3多少钱?为什么人参皂苷的价格昂贵?原因在此
  14. ROS系列——ONVIF Device Test Tool测试工具获取网络摄像头的rtsp
  15. 双十一夺冠的荣耀,扛住世界的阿特拉斯
  16. 图片 标记 软件_如何设计软件功能标记
  17. 【DL】第 8 章:序列到序列模型和注意力
  18. 趣文|老舍:好读书,不求甚解
  19. 人工智能改变教学方式
  20. 升级 Node 版本教程

热门文章

  1. 利用C语言中的函数求3个数的平均值
  2. jmeter文档学习-用户session使用url重写
  3. SSH/串口软件介绍
  4. DELPHI DEV 汉化
  5. Linux安装与卸载JDK
  6. lnmp环境搭建的详细过程(ubuntu22)
  7. 详解token已过期含义及解决方 token过期是否需要重新登录
  8. Qt Quick 3D系列(一):加载3d模型
  9. JAVA并发处理注意事项
  10. 问题:wps表格用鼠标滚轮上下移动表格时,不是平滑移动,而是按单元格跳动的。已解决