sse2指令集1移动指令:1. Movapsmovaps XMM,XMM/m128 movaps XMM/128,XMM把源存储器内容值送入目的寄存器,当有m128时,必须对齐内存16字节,也就是内存地址低4位为0.2. Movupsmovups XMM,XMM/m128 movaps XMM/128,XMM把源存储器内容值送入目的寄存器,但不必对齐内存16字节3. Movlpsmovlps XMM,m64把源存储器64位内容送入目的寄存器低64位,高64位不变,内存变量不必对齐内存16字节4. Movhpsmovhps XMM,m64把源存储器64位内容送入目的寄存器高64位,低64位不变,内存变量不必对齐内存16字节.5. Movhlpsmovhlps XMM,XMM把源寄存器高64位送入目的寄存器低64位,高64位不变.6. Movlhpsmovlhps XMM,XMM把源寄存器低64位送入目的寄存器高64位,低64位不变.7. movssmovss XMM,m32/XMM原操作数为m32时:dest[31-00] <== m32 dest[127-32] <== 0原操作数为XMM时: dest[31-00] <== src[31-00] dest[127-32]不变8. movmskpdmovmskpd r32,XMM取64位操作数符号位r32[0] <== XMM[63] r32[1] <== XMM[127] r32[31-2] <== 09. movmskpsmovmskps r32,XMM取32位操作数符号位r32[0] <== XMM[31] r32[1] <== XMM[63] r32[2] <== XMM[95] r32[3] <== XMM[127] r32[31-4] <== 010. pmovmskbpmovmskb r32,XMM取16位操作数符号位具体操作同前r[0] <== XMM[7] r[1] <== XMM[15] r[2] <== XMM[23] r[3] <== XMM[31]r[4] <== XMM[39] r[5] <== XMM[47] r[6] <== XMM[55] r[7] <== XMM[63]r[8] <== XMM[71] r[9] <== XMM[79] r[10] <== XMM[87] r[11] <== XMM[95]r[12] <== XMM[103] r[13] <== XMM[111] r[14] <== XMM[119] r[15] <== XMM[127] r[31-16] <== 011. movntpsmovntps m128,XMMm128 <== XMM 直接把XMM中的值送入m128,不经过cache,必须对齐16字节.12. Movntpdmovntpd m128,XMMm128 <== XMM 直接把XMM中的值送入m128,不经过cache,必须对齐16字节.13. Movntimovnti m32,r32m32 <== r32 把32寄存器的值送入m32,不经过cache.14. Movapdmovapd XMM,XMM/m128 movapd XMM/m128,XMM把源存储器内容值送入目的寄存器,当有m128时,必须对齐内存16字节15. Movupdmovupd XMM,XMM/m128 movapd XMM/m128,XMM把源存储器内容值送入目的寄存器,但不必对齐内存16字节.我感觉这两条指令同movaps 和movups 指令一样,不过又不确定.16. Movlpdmovlpd XMM,m64 movlpd m64,XMM把源存储器64位内容送入目的寄存器低64位,高64位不变,内存变量不必对齐内存16字节17. Movhpdmovhpd XMM,m64 movhpd m64,XMM把源存储器64位内容送入目的寄存器高64位,低64位不变,内存变量不必对齐内存16字节.18. Movdqamovdqa XMM,XMM/m128 movdqa XMM/m128,XMM把源存储器内容值送入目的寄存器,当有m128时,必须对齐内存16字节.19. Movdqumovdqu XMM,XMM/m128 movdqu XMM/m128,XMM把源存储器内容值送入目的寄存器,但不必对齐内存16字节.20. movq2dqmovq2dq XMM,MM把源寄存器内容送入目的寄存器的低64位,高64位清零.21. movdq2qmovdq2q MM,XMM把源寄存器低64位内容送入目的寄存器.22. Movdmovd XMM,r32/m32 movd MM,r32/m32把源存储器32位内容送入目的寄存器的低32位,高96位清零.movd r32/m32,XMM movd r32/m32,MM把源寄存器的低32位内容送入目的存储器32位.23. Movqmovq XMM,XMM/m64 movq MM,MM/m64把源存储器低64位内容送入目的寄存器的低64位,高64位清零.movq m64,XMM把源寄存器的低64位内容送入目的存储器.2 加法操作1. addpsaddps XMM,XMM/m128源存储器内容按双字对齐,共4个单精度浮点数与目的寄存器相加,结果送入目的寄存器,内存变量必须对齐内存16字节2. addsaddss XMM,XMM/m32源存储器的低32位1个单精度浮点数与目的寄存器的低32位1个单精度浮点数相加,结果送入目的寄存器的低32位高96位不变,内存变量不必对齐内存16字节3. addpdaddpd XMM,XMM/m128源存储器内容按四字对齐,共两个双精度浮点数与目的寄存器相加,结果送入目的寄存器,内存变量必须对齐内存16字节.4. addsdaddsd XMM,XMM/m64源存储器的低64位1个双精度浮点数与目的寄存器的低64位1个双精度浮点数相加,结果送入目的寄存器的低64位,高64位不变,内存变量不必对齐内存16字节5. padddpaddd XMM,XMM/m128把源存储器与目的寄存器按双字对齐无符号整数普通相加,结果送入目的寄存器,内存变量必须对齐内存16字节.6. Paddqpaddq XMM,XMM/m128把源存储器与目的寄存器按四字对齐无符号整数普通相加,结果送入目的寄存器,内存变量必须对齐内存16字节.7. Paddqpaddq MM,MM/m64把源存储器与目的寄存器四字无符号整数普通相加,结果送入目的寄存器.8. Pmaddwdpmaddwd XMM,XMM/m128把源存储器与目的寄存器分4组进行向量点乘(有符号补码操作),内存变量必须对齐内存16字节..高64位| 低64位目的寄存器: a0 | a1 | a2 | a3 | a4 | a5 | a6 | a7源存储器: b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7目的寄存器结果: a0*b0+a1*b1 | a2*b2+a3*b3 | a4*b4+a5*b5 | a6*b6+a7*b79. Paddsbpaddsb XMM,XMM/m128 paddsb MM,MM/m64源存储器与目的寄存器按字节对齐有符号补码饱和相加,内存变量必须对齐内存16字节.10. paddswpaddsw XMM,XMM/m128源存储器与目的寄存器按字对齐有符号补码饱和相加,内存变量必须对齐内存16字节.11. paddusbpaddusb XMM,XMM/m128源存储器与目的寄存器按字节对齐无符号饱和相加,内存变量必须对齐内存16字节.12. Padduswpaddusw XMM,XMM/m128源存储器与目的寄存器按字对齐无符号饱和相加,内存变量必须对齐内存16字节.13. Paddbpaddb XMM,XMM/m128源存储器与目的寄存器按字节对齐无符号普通相加,内存变量必须对齐内存16字节.14. Paddwpaddw XMM,XMM/m128源存储器与目的寄存器按字对齐无符号普通相加,内存变量必须对齐内存16字节.15. Padddpaddd XMM,XMM/m128源存储器与目的寄存器按双字对齐无符号普通相加,内存变量必须对齐内存16字节.16. Paddqpaddq XMM,XMM/m128源存储器与目的寄存器按四字对齐无符号普通相加,内存变量必须对齐内存16字节.17.3 减法操作1. subpssubps XMM,XMM/m128源存储器内容按双字对齐,共4个单精度浮点数与目的寄存器相减(目的减去源),结果送入目的寄存器, 内存变量必须对齐内存16字节.2. Subsssubss XMM,XMM/m32源存储器的低32位1个单精度浮点数与目的寄存器的低32位1个单精度浮点数相减(目的减去源), 结果送入目的寄存器的低32位,高96位不变,内存变量不必对齐内存16字节3. Subpdsubpd XMM,XMM/m128把目的寄存器内容按四字对齐,两个双精度浮点数,减去源存储器两个双精度浮点数, 结果送入目的寄存器,内存变量必须对齐内存16字节.4. subsdsubsd XMM,XMM/m128把目的寄存器的低64位1个双精度浮点数,减去源存储器低64位1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变,内存变量不必对齐内存16字节5. Psubdpsubd XMM,XMM/m128把目的寄存器与源存储器按双字对齐无符号整数普通相减,结果送入目的寄存器, 内存变量必须对齐内存16字节.(目的减去源)6. Psubqpsubq XMM,XMM/m128把目的寄存器与源存储器按四字对齐无符号整数普通相减,结果送入目的寄存器, 内存变量必须对齐内存16字节.(目的减去源)7. Psubqpsubq MM,MM/m64把目的寄存器与源存储器四字无符号整数普通相减,结果送入目的寄存器.(目的减去源)8. psubsbpsubsb XMM,XMM/m128源存储器与目的寄存器按字节对齐有符号补码饱和相减(目的减去源),内存变量必须对齐内存16字节.9. Psubswpsubsw XMM,XMM/m128源存储器与目的寄存器按字对齐有符号补码饱和相减(目的减去源),内存变量必须对齐内存16字节.10. Psubusbpsubusb XMM,XMM/m128源存储器与目的寄存器按字节对齐无符号饱和相减(目的减去源),内存变量必须对齐内存16字节.11. Psubuswpsubusw XMM,XMM/m128源存储器与目的寄存器按字对齐无符号饱和相减(目的减去源),内存变量必须对齐内存16字节.12. psubbpsubb XMM,XMM/m128源存储器与目的寄存器按字节对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.13. Psubwpsubw XMM,XMM/m128源存储器与目的寄存器按字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.14. Psubdpsubd XMM,XMM/m128源存储器与目的寄存器按双字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.15. Psubqpsubq XMM,XMM/m128源存储器与目的寄存器按四字对齐无符号普通相减(目的减去源),内存变量必须对齐内存16字节.16.4 比较操作1. Maxpsmaxps XMM,XMM/m128源存储器4个单精度浮点数与目的寄存器4个单精度浮点数比较,较大数放入对应目的寄存器,内存变量必须对齐内存16字节.2. Maxssmaxss XMM,XMM/m32源存储器低32位1个单精度浮点数与目的寄存器低32位1个单精度浮点数比较,较大数放入目的寄存器低32位,高96位不变内存变量不必对齐内存16字节3. Minpsminps XMM,XMM/m128源存储器4个单精度浮点数与目的寄存器4个单精度浮点数比较,较小数放入对应目的寄存器,内存变量必须对齐内存16字节.4. minssminss XMM,XMM/m32源存储器低32位1个单精度浮点数与目的寄存器低32位1个单精度浮点数比较,较小数放入目的寄存器低32位,高96位不变内存变量不必对齐内存16字节5. cmppscmpps XMM0,XMM1,imm8 imm8是立即数范围是0~7根据imm8的值进行4对单精度浮点数的比较,符合imm8的就置目的寄存器对应的32位全1,否则全0当imm8 = 0时,目的寄存器等于原寄存器数时,置目的寄存器对应的32位全1,否则全0imm8 = 1 时,目的寄存器小于原寄存器数时,置目的寄存器对应的32位全1,否则全0imm8 = 2 时,目的寄存器小于等于原寄存器数时,置目的寄存器对应的32位全1,否则全0 imm8 = 4 时,目的寄存器不等于原寄存器数时,置目的寄存器对应的32位全1,否则全0 imm8 = 5 时,目的寄存器大于等于原寄存器数时,置目的寄存器对应的32位全1,否则全0 imm8 = 6 时,目的寄存器大于原寄存器数时,置目的寄存器对应的32位全1,否则全06. pcmpeqbpcmpeqb XMM,XMM/m128目的寄存器与源存储器按字节比较,如果对应字节相等,就置目的寄存器对应字节为0ffh,否则为00h内存变量必须对齐内存16字节.7. Pcmpeqwpcmpeqw XMM,XMM/m128目的寄存器与源存储器按字比较,如果对应字相等,就置目的寄存器对应字为0ffffh,否则为0000h, 内存变量必须对齐内存16字节8. Pcmpeqdpcmpeqd XMM,XMM/m128目的寄存器与源存储器按双字比较,如果对应双字相等,就置目的寄存器对应双字为0ffffffffh,否则为00000000h内存变量必须对齐内存16字节9. Pcmpgtbpcmpgtb XMM,XMM/m128目的寄存器与源存储器按字节(有符号补码)比较,如果目的寄存器对应字节大于源存储器,就置目的寄存器对应字节为0ffh, 否则为00h,内存变量必须对齐内存16字节10. Pcmpgtwpcmpgtw XMM,XMM/m128目的寄存器与源存储器按字(有符号补码)比较,如果目的寄存器对应字大于源存储器,就置目的寄存器对应字为0ffffh, 否则为0000h,内存变量必须对齐内存16字节.11. Pcmpgtdpcmpgtd XMM,XMM/m128目的寄存器与源存储器按双字(有符号补码)比较,如果目的寄存器对应双字大于源存储器, 就置目的寄存器对应双字为0ffffffffh,否则为00000000h,内存变量必须对齐内存16字节.5 计算操作1. rcppsrcpps XMM,XMM/m128源存储器4个单精度浮点数的倒数放入对应目的寄存器,内存变量必须对齐内存16字节注:比如2.0E0的倒数为1÷2.0E0 = 5.0E-1, 这操作只有12bit的精度2. rcpssrcpss XMM,XMM/32源存储器低32位1个单精度浮点数的倒数放入目的寄存器低32位,高96位不变3. rsqrtpsrsqrtps XMM,XMM/m128源存储器4个单精度浮点数的开方的倒数放入对应目的寄存器,内存变量必须对齐内存16字节. 比如2.0E0的开方的倒数为1÷√2.0E0≈ 7.0711E-1, 这操作只有12bit的精度. 4. Rsqrtssrsqrtss XMM,XMM/32源存储器低32位1个单精度浮点数的开方的倒数放入目的寄存器低32位,高96位不变,内存变量不必对齐内存16字节.5. Pavgbpavgb MM,MM/m64 pavgb XMM,XMM/m128把源存储器与目的寄存器按字节无符号整数相加,再除以2,结果四舍五入为整数放入目的寄存器, 源存储器为m128时,内存变量必须对齐内存16字节. 注:此运算不会产生溢出.6. Pavgwpavgw MM,MM/m64 pavgw XMM,XMM/m128把源存储器与目的寄存器按字无符号整数相加,再除以2,结果四舍五入为整数放入目的寄存器, 源存储器为m128时,内存变量必须对齐内存16字节.7. Sqrtpdsqrtpd XMM,XMM/m128源存储器两个双精度浮点数的开方放入对应目的寄存器,内存变量必须对齐内存16字节.8. Sqrtsdsqrtsd XMM,XMM/m128源存储器低64位1个双精度浮点数的开方放入目的寄存器低64位,高64位不变,内存变量不必对齐内存16字节6 乘法操作1. Mulpsmulps XMM,XMM/m128源存储器内容按双字对齐,共4个单精度浮点数与目的寄存器相乘,结果送入目的寄存器,内存变量必须对齐内存16字节.2. Mulssmulss XMM,XMM/32源存储器的低32位1个单精度浮点数与目的寄存器的低32位1个单精度浮点数相乘,结果送入目的寄存器的低32位,高96位不变,内存变量不必对齐内存16字节3. Mulpdmulpd XMM,XMM/m128源存储器内容按四字对齐,共两个双精度浮点数与目的寄存器相乘,结果送入目的寄存器,内存变量必须对齐内存16字节4. Mulsdmulsd XMM,XMM/m128源存储器的低64位1个双精度浮点数与目的寄存器的低64位1个双精度浮点数相乘,结果送入目的寄存器的低64位,高64位不变,内存变量不必对齐内存16字节5. Pmuludqpmuludq XMM,XMM/m128把源存储器与目的寄存器的低32位无符号整数相乘,结果变为64位,送入目的寄存器低64位, 把源存储器与目的寄存器的高64位的低32位无符号整数相乘,结果变为64位,送入目的寄存器高64位内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0 | a1 | a2 | a3源存储器: b0 | b1 | b2 | b3目的寄存器结果: b1*a1 | b3*a36. Pmuludqpmuludq MM,MM/m64把源存储器与目的寄存器的低32位无符号整数相乘,结果变为64位,送入目的寄存器.7. pmulhwpmulhw XMM,XMM/m128源存储器与目的寄存器按字对齐有符号补码饱和相乘,取结果的高16位放入目的寄存器对应字中. 内存变量必须对齐内存16字节8. pmullwpmullw XMM,XMM/m128源存储器与目的寄存器按字对齐有符号补码饱和相乘,取结果的低16位放入目的寄存器对应字中. 内存变量必须对齐内存16字节.9.7 除法操作1. Divpsdivps XMM,XMM/m128目的寄存器共4个单精度浮点数除以源存储器4个单精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节.2. Divssdivss XMM,XMM/32目的寄存器低32位1个单精度浮点数除以源存储器低32位1个单精度浮点数,结果送入目的寄存器的低32位,高96位不变,内存变量不必对齐内存16字节3. Divpddivpd XMM,XMM/m128目的寄存器共两个双精度浮点数除以源存储器两个双精度浮点数,结果送入目的寄存器,内存变量必须对齐内存16字节4. Divsddivsd XMM,XMM/m128目的寄存器低64位1个双精度浮点数除以源存储器低64位1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变,内存变量不必对齐内存16字节.8 位操作1. Andpsandps XMM,XMM/m128源存储器128个二进制位'与'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.2. Orpsorps XMM,XMM/m128源存储器128个二进制位'或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.3. Xorpsxorps XMM,XMM/m128源存储器128个二进制位'异或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.4. Unpckhpsunpckhps XMM,XMM/m128源存储器与目的寄存器高64位按双字交错排列,结果送入目的寄存器,内存变量必须对齐内存16字节.高64位| 低64位 目的寄存器: a0 | a1 | a2 | a3 源存储器: b0 | b1 | b2 | b3 目的寄存器结果: b0 | a0 | b1 | a15. Unpcklpsunpcklps XMM,XMM/m128源存储器与目的寄存器低64位按双字交错排列,结果送入目的寄存器,内存变量必须对齐内存16字节高64位| 低64位目的寄存器: a0 | a1 | a2 | a3 源存储器: b0 | b1 | b2 | b3 目的寄存器结果: b2 | a2 | b3 | a36. Pextrwpextrw r32,MM,imm8 pextrw r32,XMM,imm8 imm8为8位立即数(无符号)从源寄存器中选第imm8(0~3 或0~7)个字送入目的寄存器的低16位,高16位清零.注:imm8范围为0~255,当源寄存器为'MM'时,有效值= imm8 mod 4,当目的寄存器为'XMM'时,有效值= imm8 mod 87. Pinsrwpinsrw MM,r32/m32,imm8 pinsrw XMM,r32/m32,imm8把源存储器的低16位内容送入目的寄存器第imm8(0~3 或0~7)个字,其余字不变注:imm8范围为0~255,当目的寄存器为'MM'时,有效值= imm8 mod 4,当目的寄存器为'XMM'时,有效值= imm8 mod 88. Pmaxswpmaxsw MM,MM/m64 pmaxsw XMM,XMM/m128把源存储器与目的寄存器按字有符号(补码)整数比较,大数放入目的寄存器对应字, 源存储器为m128时,内存变量必须对齐内存16字节9. Pmaxubpmaxub MM,MM/m64 pmaxsw XMM,XMM/m128把源存储器与目的寄存器按字节无符号整数比较,大数放入目的寄存器对应字节, 源存储器为m128时,内存变量必须对齐内存16字节.10. pminswpminsw MM,MM/m64 pmaxsw XMM,XMM/m128把源存储器与目的寄存器按字有符号(补码)整数比较,较小数放入目的寄存器对应字, 源存储器为m128时,内存变量必须对齐内存16字节.11. Pminubpminub MM,MM/m64 pmaxsw XMM,XMM/m128把源存储器与目的寄存器按字节无符号整数比较,较小数放入目的寄存器对应字节, 源存储器为m128时,内存变量必须对齐内存16字节12. Maxpdmaxpd XMM,XMM/m128源存储器两个双精度浮点数与目的寄存器两个双精度浮点数比较,较大数放入对应目的寄存器,内存变量必须对齐内存16字节.13. Maxsdmaxsd XMM,XMM/m128源存储器低64位1个双精度浮点数与目的寄存器低64位1个双精度浮点数比较,较大数放入目的寄存器低64位,高64位不变内存变量不必对齐内存16字节.14. Minpdminpd XMM,XMM/m128源存储器两个双精度浮点数与目的寄存器两个双精度浮点数比较,较小数放入对应目的寄存器,内存变量必须对齐内存16字节.15. Minsdminsd XMM,XMM/m128源存储器低64位1个双精度浮点数与目的寄存器低64位1个双精度浮点数比较,较小数放入目的寄存器低64位,高64位不变内存变量不必对齐内存16字节.16. Andpdandpd XMM,XMM/m128源存储器128个二进制位'与'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.17. Andnpdandnpd XMM,XMM/m128目的寄存器128个二进制位先取'非',再'与'源存储器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节18. Orpdorpd XMM,XMM/m128源存储器128个二进制位'或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.19. Xorpdxorpd XMM,XMM/m128源存储器128个二进制位'异或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.20. Pslldqpslldq XMM,imm8把目的寄存器128位按imm8(立即数)指定字节数逻辑左移,移出的字节丢失.imm8 == 1时,代表左移8位,imm8 == 2时,代表左移16位.21. Psrldqpsrldq XMM,imm8把目的寄存器128位按imm8(立即数)指定字节数逻辑右移,移出的字节丢失.imm8 == 1时,代表右移8位,imm8 == 2时,代表右移16位.22. Psllwpsllw XMM,XMM/m128 psllw XMM,imm8把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失. 低字移出的位不会移入高字,内存变量必须对齐内存16字节.23. Psrlwpsrlw XMM,XMM/m128 psrlw XMM,imm8把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.高字移出的位不会移入低字,内存变量必须对齐内存16字节.24. Pslldpslld XMM,XMM/m128 pslld XMM,XMM imm8把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失. 低双字移出的位不会移入高双字,内存变量必须对齐内存16字节.25. Psrldpsrld XMM,XMM/m128 psrld XMM,imm8把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.高双字移出的位不会移入低双字,内存变量必须对齐内存16字节.pandpand XMM,XMM/m128源存储器128个二进制位'与'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节. 我发现与andpd功能差不多,就不知其它特性是否一样26. Pandnpandn XMM,XMM/m128目的寄存器128个二进制位先取'非',再'与'源存储器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节27. Porpor XMM,XMM/m128源存储器128个二进制位'或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.28. Pxorpxor XMM,XMM/m128源存储器128个二进制位'异或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节.29. packuswbpackuswb XMM,XMM/m128 packuswb MM,MM/m64把目的寄存器按字有符号数压缩为字节无符号数放入目的寄存器低64位把源寄存器按字有符号数压缩为字节无符号数放入目的寄存器高64位压缩时负数变为00h,大于255的正数变为0ffh,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0 | a1 | a2 | a3 | a4 | a5 | a6 | a7源寄存器: b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7目的寄存器压缩结果: b0|b1| b2| b3| b4|b5| b6|b7| a0|a1| a2|a3| a4|a5| a6| a730. packsswbpacksswb XMM,XMM/m128 packsswb MM,MM/m64把目的寄存器按字有符号数压缩为字节有符号数放入目的寄存器低64位把源寄存器按字有符号数压缩为字节有符号数放入目的寄存器高64位压缩时小于-128负数变为80h,大于127的正数变为7fh,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0 | a1 | a2 | a3 | a4 | a5 | a6 | a7源寄存器: b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7目的寄存器压缩结果: b0|b1| b2| b3| b4|b5| b6|b7| a0|a1| a2|a3| a4|a5| a6| a731. packssdwpackssdw XMM,XMM/m128把目的寄存器按双字有符号数压缩为字有符号数放入目的寄存器低64位把源寄存器按双字有符号数压缩为字有符号数放入目的寄存器高64位压缩时小于-32768负数变为8000h,大于32767的正数变为7fffh,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0 | a1 | a2 | a3源寄存器: b0 | b1 | b2 | b3目的寄存器压缩结果: b0 | b1 | b2 | b3 | a0 | a1 | a2 | a332. punpckldqpunpckldq XMM,XMM/m128把源存储器与目的寄存器低64位按双字交错排列,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0 | a1 | a2 | a3源寄存器: b0 | b1 | b2 | b3目的寄存器排列结果: b2 | a2 | b3 | a333. punpckhdq把源存储器与目的寄存器高64位按双字交错排列,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0 | a1 | a2 | a3源寄存器: b0 | b1 | b2 | b3目的寄存器排列结果: b0 | a0 | b1 | a134. punpcklwd把源存储器与目的寄存器低64位按字交错排列,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0 | a1 | a2 | a3 | a4 | a5 | a6 | a7源寄存器: b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7目的寄存器排列结果: b4 | a4 | b5 | a5 | b6 | a6 | b7 | a735. punpckhwdpunpckhwd XMM,XMM/m128把源存储器与目的寄存器高64位按字交错排列,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0 | a1 | a2 | a3 | a4 | a5 | a6 | a7源寄存器: b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7目的寄存器排列结果: b0 | a0 | b1 | a1 | b2 | a2 | b3 | a336. punpcklbwpunpcklbw XMM,XMM/m128把源存储器与目的寄存器低64位按字节交错排列,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0|a1| a2| a3| a4|a5| a6|a7| a8|a9| aA|aB| aC|aD| aE| aF源寄存器: b0|b1| b2| b3| b4|b5| b6|b7| b8|b9| bA|bB| bC|bD| bE| bF目的寄存器排列结果: b8|a8| b9| a9| bA|aA| bB|aB| bC|aC| bD|aD| bE|aE| bF| aF37. punpckhbw把源存储器与目的寄存器高64位按字节交错排列,内存变量必须对齐内存16字节.高64位| 低64位目的寄存器: a0|a1| a2| a3| a4|a5| a6|a7| a8|a9| aA|aB| aC|aD| aE| aF源寄存器: b0|b1| b2| b3| b4|b5| b6|b7| b8|b9| bA|bB| bC|bD| bE| bF目的寄存器排列结果: b0|a0| b1| a1| b2|a2| b3|a3| b4|a4| b5|a5| b6|a6| b7| a738. shufpsshufps XMM,XMM/m128,imm8把源存储器与目的寄存器按双字划分,由imm8(立即数)八个二进制位(00~11,00^11,00~11,00~11)指定排列, 内存变量必须对齐内存16字节.目的寄存器高64位放源存储器被指定数,目的寄存器低64位放目的寄存器被指定数. '( )'中的都是二进制数目的寄存器: a(11) | a(10) | a(01) | a(00)源寄存器: b(11) | b(10) | b(01) | b(00)目的寄存器排列结果: b(00~11) | b(00~11) | a(00~11) | a(00~11)目的寄存器压缩结果'( )'中的值由imm8对应的两位二进制位指定.例: ( 11 ) ( 10 ) ( 01 ) ( 00 ) ( 11 ) ( 10 ) ( 01 ) ( 00 )当XMM0 = 090a0b0c 0d0e0f11 01020304 05060708 h,XMM1 = 0aabbccdd eeff1234 22334455 66778899 h, imm8 ══> (XMM1 10) (XMM1 01) (XMM0 11) (XMM0 00)执行shufps XMM0,XMM1,10 01 11 00 b(二进制),则XMM0 = 0eeff1234 22334455 090a0b0c 05060708 h39. shufpdshufpd XMM,XMM/m128,imm8(0~255) imm8(操作值) = imm8(输入值) mod 4把源存储器与目的寄存器按四字划分,由imm8(立即数)4个二进制位(0~1,0^1,0~1,0~1)指定排列, 内存变量必须对齐内存16字节.目的寄存器高64位放源存储器被指定数,目的寄存器低64位放目的寄存器被指定数.当XMM0 = 1111111122222222 3333333344444444 hXMM1 = 5555555566666666 aaaaaaaacccccccc h,执行shufpd XMM0,XMM1,101001 1 0 b则XMM0 = 5555555566666666 3333333344444444 h40. pshuflwpshuflw XMM,XMM/m128,imm8(0~255)先把源存储器的高64位内容送入目的寄存器的高64位,然后用imm8将源存储器的低64位4个字选入目的寄存器的低64位,内存变量必须对齐内存16字节.源寄存器低64位: b(11) | b(10) | b(01) | b(00)目的寄存器低64位排列结果: b(00~11) | b(00~11) | b(00~11) | b(00~11)当XMM0 = 1111111122222222 3333 4444 5555 6666 hXMM1 = 5555555566666666 7777 8888 9999 cccc h,执行pshuflw XMM0,XMM1,10 10 01 10 b 则XMM0 = 5555555566666666 8888 8888 9999 8888 h41. pshufhwpshufhw XMM,XMM/m128,imm8(0~255)先把源存储器的低64位内容送入目的寄存器的低64位,然后用imm8将源存储器的高64位4个字选入目的寄存器的高64位,内存变量必须对齐内存16字节.源寄存器高64位: b(11) | b(10) | b(01) | b(00)目的寄存器高64位排列结果: b(00~11) | b(00~11) | b(00~11) | b(00~11)当XMM0 = 3333 4444 5555 6666 1111111122222222 hXMM1 = 7777 8888 9999 cccc 5555555566666666 h,执行pshufhw XMM0,XMM1,10 10 01 10 b 则XMM0 = 8888 8888 9999 8888 5555555566666666 h42. pshufdpshufd XMM,XMM/m128,imm8(0~255)将源存储器的4个双字由imm8指定选入目的寄存器,内存变量必须对齐内存16字节.源寄存器: b(11) | b(10) | b(01) | b(00)目的寄存器排列结果: b(00~11) | b(00~11) | b(00~11) | b(00~11)当XMM1 = 11111111 22222222 33333333 44444444 h,执行pshufd XMM0,XMM1,11 01 01 10b 则XMM0 = 11111111 33333333 33333333 22222222 h9 数据类型操作43. cvtpi2pscvtpi2ps XMM,MM/m64源存储器64位两个32位有符号(补码)整数转为两个单精度浮点数,放入目的寄存器低64中,高64位不变.44. cvtsi2sscvtsi2ss XMM,r32/m32源存储器1个32位有符号(补码)整数转为1个单精度浮点数,放入目的寄存器低32中,高96位不变.45. cvtps2picvtps2pi MM,XMM/m64把源存储器低64位两个32位单精度浮点数转为两个32位有符号(补码)整数,放入目的寄存器46. cvttps2picvttps2pi MM,XMM/m64类似于cvtps2pi,截断取整.47. cvtss2sicvtss2si r32,XMM/m32把源存储器低32位1个单精度浮点数转为1个32位有符号(补码)整数,放入目的寄存器. 48. cvttss2sicvttss2si r32,XMM/m32类似cvtss2si,截断取整.49. cvtps2pdcvtps2pd XMM,XMM/m64把源存储器低64位两个单精度浮点数变成两个双精度浮点数,结果送入目的寄存器.50. cvtss2sdcvtss2sd XMM,XMM/m32把源存储器低32位1个单精度浮点数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变.51. cvtpd2ps把源存储器两个双精度浮点数变成两个单精度浮点数,结果送入目的寄存器的低64位,高64位清零, 内存变量必须对齐内存16字节.^特殊状态^3.14E5 (表示负无穷大)52. cvtsd2sscvtsd2ss XMM,XMM/m64把源存储器低64位1个双精度浮点数变成1个单精度浮点数,结果送入目的寄存器的低32位,高96位不变.53. cvtpd2picvtpd2pi MM,XMM/m128把源存储器两个双精度浮点数变成两个双字有符号整数,结果送入目的寄存器,内存变量必须对齐内存16字节. 如果结果大于所能表示的范围,那么转化为80000000h(正数也转为此值).。