Intel体系MMX指令&指令说明

EMMS MMX状态置空:
将FP特征字置空(全1),使后续浮点指令可以使用浮点寄存器,其他MMX指令自动置FP为全0.本指令应在所有MMX例程结束和调用可含有FP指令的例程时使用,以清除MMX状态.
MOVD mm,r/m32
MOVD r/m32,mm
转移32位数据:
将32位数据从整型寄存器/内存移到MMX寄存器,和反向移动.MOVD不能在MMX寄存器之间,内存之间及整型寄存器之间移动数据.目标操作数为MMX寄存器时,32位源操作数写入目标寄存器的低32位.目标寄存器"0扩展"为64位.源操作数为MMX寄存器时,该寄存器的低32位被写入目标操作数.
MOVQ mm,r/m64
MOVQ r.m64,mm
转移64位数据:
将64位数据从整型寄存器/内存移到MMX寄存器,和反向移动.目标操作数和源操作数可为MMX寄存器,64位内存操作数.但MOVQ不能在内存和内存之间进行数据转移.

PACKSSWB mm,mm/m64
PACKSSDW mm,mm/m64

有符号饱和方式数据成组:
将MMX寄存器和MMX寄存器/内存单元中的有符号字组变成MMX寄存器的有符号字节组.和将MMX寄存器和MMX寄存器/内存单元中的有符号双字组变成MMX寄存器的有符号字组.(注1)
PACKUSWB mm,mm/m64 无符号饱和方式数据成组
将MMX寄存器和MMX寄存器/内存单元中的有符号字组变成MMX寄存器的无符号字节组.(注1)

PADDB mm,mm/m64
PADDW mm,mm/m64
PADDD mm,mm/m64

环绕方式数据组相加:
按环绕方式将MMX寄存器/内存单元中的字节组(字组,双字组)相加到MMX寄存器中(注1)

PADDSB mm,mm/m64
PADDSW mm,mm/m64

饱和方式有符号数据组相加:
按饱和方式将MMX寄存器/内存单元中的有符号字节组(字组)相加到MMX寄存器中的有符号字节组(字组)数据.(注1)

PADDUSB mm,mm/m64
PADDUSW mm,mm/m64

饱和方式无符号数据组相加:
按饱和方式将MMX寄存器/内存单元中的无符号字节组(字组)相加到MMX寄存器中的无符号字节组(字组)数据.(注1)

PAND mm,mm/m64

逐位逻辑与:
将MMX寄存器/内存单元中的64位数据进行与操作,结果存于MMX寄存器中.

PANDN mm,mm/m64

逐位逻辑与非:
将MMX寄存器中的64位值取反,再将取反后的MMX寄存器与MMX寄存器/内存单元中的64位数据进行与操作,结果存于MMX寄存器中.

PCMPEQB mm,mm/m64
PCMPEQW mm,mm/m64
PCMPEQD mm,mm/m64

成组数据的相等比较:
将MMX寄存器与MMX寄存器/内存单元中的字节组(字组,双字组)数据进行相等比较.
该指令将目标操作数和源操作数的相应数据元素进行比较,相等则目标寄存器的对应数据元素被置为全1,否则置为全0.
eg:PCMPEQE mm,mm/m64

mm ? ? 00000000000000111 0111000111000111
mm/m64 ? ? 11111110000001100 0111000111000111
结果mm ? ? 00000000000000000 1111111111111111

PCMPGTB mm,mm/m64
PCMPGTW mm,mm/m64
PCMPGTD mm,mm/m64

成组数据的相等比较:
将MMX寄存器与MMX寄存器/内存单元中的字节组(字组,双字组)数据进行大于比较.
该指令将目标操作数和源操作数的相应数据元素进行比较,大于则目标寄存器的对应数据元素被置为全1,否则置为全0.(参考上一条)
PMADDWD mm,mm/m64 数据组(字组)的乘加:
将MMX寄存器与MMX寄存器/内存单元中的字组数据相乘,然后将32位结果逐对相加并作为双字存于MMX寄存器中.
eg:PMADDWD mm,mm/m64

mm ? ? 0111000111000111 0111000111000111
操作 * * * *
mm,mm/m64 ? ? 1000000000000000 0000010000000000
操作 /_____+____/ /______+_____/
mm ? ? 1100100011100011 1001110000000000

PMULHW mm,mm/m64

成组数据(字组)的乘后取高位:
将MMX寄存器与MMX寄存器/内存单元中的有符号字组数据相乘,然后将结果的高16位存入MMX寄存器.
eg:PMULHW mm,mm/m64

mm ? ? 0111000111000111 0111000111000111
操作 * * * *
mm/m64 ? ? 1000000000000000 0000010000000000
操作 High Order High Order High Order High Order
mm ? ? 1100011100011100 0000000111000111

PMULLW mm,mm/m64

成组数据(字组)的乘后取低位:
将MMX寄存器与MMX寄存器/内存单元中的有符号字组数据相乘,然后将结果的低16位存入MMX寄存器.(参考上一条)
POR mm,mm/m64 逐位逻辑或:
将MMX寄存器/内存单元中的64位数据进行或操作,结果存于MMX寄存器中.

PSLLW mm,mm/m64
PSLLD mm,mm/m64
PSLLQ mm,mm/m64
PSLLW mm,imm8
PSLLD mm,imm8
PSLLQ mm,imm8

成组数据的逻辑左移:
将MMX寄存器中的字(双字,四字)数据按MMX寄存器/内存单元指定的个数左移,低位移入0.
将MMX寄存器中的字(双字,四字)数据按8位立即数指定的个数左移,低位移入0.
PSRAW mm,mm/m64
PSRAD mm,mm/m64
PSRAW mm,imm8
PSRAD mm,imm8
成组数据的算术右移:
将MMX寄存器中的字(双字)数据按MMX寄存器/内存单元指定的个数右移,移动中保持符号位.
将MMX寄存器中的字(双字)数据按8位立即数指定的个数右移,移动中保持符号位.
PSRLW mm,mm/m64
PSRLD mm,mm/m64
PSRLQ mm,mm/m64
PSRLW mm,imm8
PSRLD mm,imm8
PSRLQ mm,imm8
成组数据的逻辑右移:
将MMX寄存器中的字(双字)数据按MMX寄存器/内存单元指定的个数右移,移出位用0填充.
将MMX寄存器中的字(双字)数据按8位立即数指定的个数右移,移出位用0填充.
PSUBB mm,mm/m64
PSUBW mm,mm/m64
PSUBD mm,mm/m64
环绕方式成组数据相减:
从MMX寄存器中按字节(字,双字)减去MMX寄存器/内存单元中的字节(字,双字)组.(注1)

PSUBSB mm,mm/m64
PSUBSW mm,mm/m64

饱和方式有符号成组数据相减:
从MMX寄存器中的有符号成组字节(字)组数据减去MMX寄存器/内存单元中的有符号字节(字)组数据.(注1)
PSUBUSB mm,mm/m64
PSUBUSW mm,mm/m64
饱和方式有符号成组数据相减:
从MMX寄存器中的无符号成组字节(字)组数据减去MMX寄存器/内存单元中的无符号字节(字)组数据.(注1)
PUNPCKHBW mm,mm/m64
PUNPCKHWD mm,mm/m64
PUNPCKHDQ mm,mm/m64
高位成组数据分解:
此指令交替取出源操作数和目标操作数的数据元素的高半部分,写入目标操作数中,数据元素的低半部分被忽略.
eg:PUNPCKHBW mm,mm/m64
PUNPCKLBW mm,mm/m64
PUNPCKLWD mm,mm/m64
PUNPCKLDQ mm,mm/m64
低位成组数据分解:
此指令交替取出源操作数和目标操作数的数据元素的低半部分,写入目标操作数中,数据元素的高半部分被忽略.(参考上一条)
PXOR mm,mm/m64 逐位逻辑异或:
将MMX寄存器/内存单元中的64位数据进行异或操作,结果存于MMX寄存器中.

Intel体系MMX指令指令说明相关推荐

  1. Intel CPU的CPUID指令(转载)

    Intel CPU的CPUID指令 Intel有一个超过100页的文档,专门介绍cpuid这条指令,可见这条指令涉及内容的丰富. 记得去年的时候,曾经有个"英布之剑"问过我这条指令 ...

  2. 突破硬件瓶颈(一):Intel体系架构的发展与瓶颈挖掘

    软件定义存储SDS正在从容量型向性能型演进,千万级IOPS和微秒级低延迟,非常具有挑战性.3节点标准x86服务器,能否有可能实现1000万IOPS与200us低延迟?这个可以有.硬件性能并不是瓶颈所在 ...

  3. 计算机指令长度是固定的,第四次作业 指令系统 设计算机A有60条指令,指令操作码6位固定长度...

    第四次作业 指令系统 设计算机A有60条指令,指令操作码6位固定长度 第四次作业: 指令系统 1, 设计算机A有60条指令,指令操作码6位固定长度编码,从000000到111011.其后 继产品B需要 ...

  4. 计算机指令长度是固定的,第四次作业 指令系统 设计算机A有60条指令,指令操作码6位固定长...

    第四次作业 指令系统 设计算机A有60条指令,指令操作码6位固定长 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 3.9 积分 第四次作业 指令系统 ...

  5. 【Optimizaition/x86】Intel CPU的CPUID指令获取的C实现

    Date: 2018.7.22 1.参考: https://www.cnblogs.com/DxSoft/articles/5053954.html https://blog.csdn.net/lis ...

  6. Intel CPU的CPUID指令

    Intel有一个超过100页的文档,专门介绍cpuid这条指令,可见这条指令涉及内容的丰富. 记得去年的时候,曾经有个"英布之剑"问过我这条指令,当时并没有给出一个满意的回答,现在 ...

  7. Intel x86_64使用cpuid指令获取CPU信息

    文章目录 前言 一.cpuid指令简介 1.1 cpuid指令功能 1.2 cpuid指令代码 二.获取处理器信息 2.1 输入参数为0H 2.2 输入参数为01H 2.3 输入参数为0x800000 ...

  8. smashing the stack for fun and profit 译文

    smashing the stack for fun and profit 译文 原文:Smashing The Stack For Fun And Profit 日期:2000.12.20 作者:A ...

  9. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - MMX技术(1) - 概述 传输指令

    MMX™ Instructions IA-32架构引入了4个指令集扩展,使得IA-32处理器可以执行单指令多数据SIMD操作.这些扩展包括MMX技术,SSE扩展,SSE2扩展,SSE3扩展. MMX指 ...

最新文章

  1. 《数据科学家养成手册》第九章信息论
  2. [转]#pragma once和#pragma comment
  3. oracle ssl发送邮件,使用javax.mail发送带有ssl的电子邮件
  4. 将图片序列转化为视频文件
  5. java定义基础变量语句_java语言基础-变量
  6. 如何让你的碎片化时间更有价值?
  7. 对话MathWorks:解读MATLAB技术生态圈与未来趋势
  8. android app应用签名生成工具,android应用签名详细步骤
  9. TensorFlow开发者会峰会:支持Swift,更好的支持JavaScript
  10. java实现单向循环链表_java实现的带头单向循环链表
  11. Unity 在windows10上资源默认下载的路径
  12. Minecraft MOD 开发记录
  13. python生成文件夹以及压缩文件夹
  14. 11个基于vue的UI框架
  15. 7z格式、LZMA压缩算法和7-Zip详细介绍
  16. python利用datetime库实现通过身份证号码判断年龄、男女,并输出生日
  17. Windows Postman中文版
  18. 打开vi编辑器出现E325: ATTENTION错误的原因和解决办法
  19. tophat2安装和问题解决
  20. Obsidian 插件(二):Advanced_Slides 的使用

热门文章

  1. python-今日头条
  2. 一个命令行整理软著代码
  3. ConvertUtils
  4. brew_install.rb 安装brew的文件
  5. 自动部署项目,全靠它了!
  6. 3D角色硬表面建模技巧与思路分享【案例解析】
  7. MCU-51:单片机DS18B20温度报警器
  8. 图片怎么加logo水印
  9. Syncthing - P2P文件同步工具 - 快速开始
  10. Windows 查看端口是否已打开