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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值