文档章节

MMX指令集系列之二----移位运算和乘法指令

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:45
字数 683
阅读 7
收藏 0

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位有符号数。

 

 

本文转载自:http://www.cnblogs.com/celerychen/archive/2013/04/23/3588232.html

共有 人打赏支持
abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问
(学习心得):进程,线程,超线程,并发,并行 等概念

前言: 此陋文来自最近对阅读《深入理解计算机系统》与《微型计算机体系结构:Intel Core Duo / i 系列微处理器技术应用》两本书的学习体会, 前者从 程序员的视角来探讨计算机系统中各部件的...

shayi
2012/11/26
5.7K
28
05-ARM体系结构与常用汇编指令

一、ARM体系结构  ARM(Advanced RISC Machines) ,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。ARM 处理器是一种低功耗高性能的 32 位R...

梦想成大牛
01/05
0
0
ARM指令集详解(超详细!带实例!)

转载:https://www.cnblogs.com/liujiahi/archive/2011/03/22/2196401.html 算术和逻辑指令 ADC : 带进位的加法 (Addition with Carry) ADC{条件}{S} , , 将把两个操作数加起来,并把结果放置...

zjy900507
03/08
0
0
从奔腾I的VCD播放到AI区块链播放器——程序优化的魔法

从上个世纪本腾I电脑播放VCD,通过巧妙的算法优化,可以在损失部分效果的情况下在低性能的电脑上播放VCD。时至今日,硬件性能大幅飙升,许多算法近乎“失传”了。但对于充满好奇心的程序员,...

LiveVideoStack
04/23
0
0
实现高性能纠删码引擎 | 纠删码技术详解(下)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎。 柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统。 前言: 在上篇《如何选择纠删码编码引擎...

七仙女很忙
2017/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

不用编写程序代码,送你一个爬虫程序批量采集猫眼电影票房数据

"大数据"是一个体量特别大,数据类别特别大的数据集,并且这样的数据集无法用传统数据库工具对其内容进行抓取、管理和处理。 "大数据"首先是指数据体量(volumes)大,指代大型数据集,一般在1...

技术阿飞
12分钟前
0
0
【Flutter教程】从零构建电商应用(一)

在这个系列中,我们将学习如何使用google的移动开发框架flutter创建一个电商应用。本文是flutter框架系列教程的第一部分,将学习如何安装Flutter开发环境并创建第一个Flutter应用,并学习Flu...

笔阁
33分钟前
5
0
什么是以太坊DAO?(三)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 投票支付合约的所有费用和行动需要时间,并要求用户始终保持活跃,知情和专注。另一...

geek12345
35分钟前
2
0
一个本科学生对Linux的认知

一个本科学生对Linux的认知 我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要...

linuxCool
今天
3
0
CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部