MMX指令集系列之二----移位运算和乘法指令
来源:互联网 发布:建站之星源码 编辑:程序博客网 时间:2024/06/06 15:02
4. 数据移位指令
4.1 16位并行左移指令
psllw MM,MM/m64
psllw MM,imm8
把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失.
低字移出的位不会移入高字.
例:
当MM0 = 0xffff ffff ffff ffff, 执行psllw MM0,1
则MM0 = 0xfffe fffe fffe fffe
4.2 16位并行逻辑右移指令
psrlw MM,MM/m64
psrlw MM,imm8
把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.
高字移出的位不会移入低字.
例:
当MM0 = 0xffff ffff ffff ffff, 执行psrlw MM0,1
则MM0 = 0x7fff 7fff 7fff 7fff
4.3 32位并行左移指令
pslld MM,MM/m64
pslld MM,MM imm8
把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失.
低双字移出的位不会移入高双字.
例:
当MM0 = 0xffffffff ffffffff, 执行 pslld MM0,1
则MM0 = 0xfffffffe fffffffe
4.4 32位并行逻辑右移指令
psrld MM,MM/m64
psrld MM,imm8
把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.
高双字移出的位不会移入低双字.
例:
当 MM0 = 0xffffffff ffffffff, 执行psrld MM0,1
则 MM0 = 0x7fffffff 7fffffff
4.5 64位数据逻辑左移和逻辑右移
psllq MM,imm8
psrlq MM,imm8
4.6 16位并行算术右移和32位并行算术右移
psraw MM,imm8
psrad MM,imm8
5. 乘法指令
pmullw MM,MM/m64
并行16位按字相乘, 取结果低16位, 放入目的寄存器的对应字.
例:
当 MM0 == 0x0000 0000 0002 acfe
MM1 == 0x0000 0000 0009 cef3, 执行 pmullw,
则MM0 = 0x0000 0000 0012 991a
2 * 9 = 18,18 = 0000 0012h,取低16位 0012 为结果.
0x0acfe == -21250,0xcef3 == -12557,-21250*-12557 = 266836250 = 0x 0fe7 991a,取低16位 991a 为结果.
pmulhw MM,MM/m64
并行16位按字相乘, 取结果高16位, 放入目的寄存器的对应字.
例:
当MM0 == 0x0000 0000 0002 acfe
MM1 == 0x0000 0000 0009 cef3, 执行 pmulhw,
则MM0 = 0x0000 0000 0000 0fe7
2 * 9 = 18,18 = 0000 0012h,取高16位 0000 为结果.
0x0acfe == -21250,0xcef3 == -12557,-21250*-12557 = 266836250 = 0x 0fe7 991a,取高16位 0fe7 为结果.
pmaddwd MM,MM/m64
按字对齐有符号向量点乘.
高32位 | 低32位
目的寄存器: a0| a1 | a2 | a3
源寄存器: b0| b1 | b2 | b3
目的寄存器结果: a0*b0+a1*b1 | a2*b2+a3*b3
小结:
1. 移位指令按照16位或32位进行并行移位.也可以直接操作整个64位数。
2. 右移指令分为逻辑右移和算术右移。左移指令没有算术左移一说。
3. 只有三种乘法指令,并行乘法的数据单位都是16位有符号数。
- MMX指令集系列之二----移位运算和乘法指令
- SSE2指令集系列之二----整数运算相关指令
- MMX指令集系列之一----数据加载与算术运算指令
- MMX指令集系列之三----数据饱和压缩与重排指令
- MMX指令集
- MMX指令集
- MMX指令集
- MMX 指令
- MMX指令
- MMX指令
- MMX指令
- SSE指令集系列之三----整数运算指令
- MMX的数据结构 & MMX指令集
- [VC6] 检查MMX和SSE系列指令集的支持级别(最高SSE4.2)
- 逻辑运算指令和移位指令
- 逻辑运算指令和移位指令
- MMX指令集(详解)
- 【转】MMX指令集简介
- 基于AdaBoost的人脸检测
- 数字图像去雾快速算法
- 谈谈自动瘦脸和自动眼睛放大算法
- MMX指令集系列之一----数据加载与算术运算指令
- 谈谈偏微分方程在图像特效中的应用
- MMX指令集系列之二----移位运算和乘法指令
- MMX指令集系列之三----数据饱和压缩与重排指令
- SSE指令集系列之一----数据加载与浮点运算指令
- SAP密码找回(包括SAP*和DDIC)----转载
- SSE指令集系列之二----浮点与整数转换指令
- SSE指令集系列之三----整数运算指令
- SSE2指令集系列之二----整数运算相关指令
- SSE特殊指令集系列之一----各种数据重排指令
- SSE3指令集系列----数据加载与算术运算指令