网页功能: 加入收藏 设为首页 网站搜索  
Inter Architecture MMX
发表日期:2006-08-28作者:[转贴] 出处:  

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寄存器中.


< 注1: >
环绕模式vs饱和模式
在环绕式处理中,运算结果上溢或下溢后,溢出的高位被切断,只保留低位(最低有效位),并作为运算结果返回.即:进位位被丢掉.在饱和式处理模式中,上溢或下溢的运算结果被按照该数据类型的边界进行裁剪,超过上限被置为最大值,低于下限被置为最小值.这种模式可以使颜色处理中颜色值保持纯白色或纯黑色.

饱和方式的数据取值范围

:-)

下限

上限

有符号

十六进制

十进制

十六进制

十进制

字节(Byte)

80H

-128

7FH

127

字(Word)

8000H

-32,768

7FFFH

32,767

无符号

十六进制

十进制

十六进制

十进制

字节(Byte)

00H

0

FFH

255

字(Word)

0000H

0

FFFFH

65,535

 

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 Inter Architecture MMX
本类热点文章
  SSE 介紹
  浮点数到整数的快速转换
  基于SSE指令集的程序设计简介
  CPU 的 cache 和 latency
  关键字 对齐 内存对齐
  INTEL 体系结构 MMX™ 技术开发者..
  在非MFC程序中使用调试宏 ASSERT(),VER..
  Microsoft Visual C++ 浮点优化
  INTEL X86 体系 32 位汇编语言速成
  加速&优化技术
  加快程序运行速度的技巧
  VC代码的编写和调试
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00363