文档章节

SSE2指令集系列之二----整数运算相关指令

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:46
字数 1595
阅读 29
收藏 0

本小节描述的是SSE2整数运算指令。

5. 数据搬移指令

  movdqa XMM,XMM/m128

        movdqa XMM/m128,XMM
  把源存储器内容值送入目的寄存器,当有m128时,内存地址必须16字节对齐.

  movdqu XMM,XMM/m128

        movdqu XMM/m128,XMM
  把源存储器内容值送入目的寄存器,内存地址不必16字节对齐.

  

  movq2dq XMM,MM
  把源寄存器内容送入目的寄存器的低64位,高64位清零.

  movdq2q MM,XMM
  把源寄存器低64位内容送入目的寄存器.

6. 算数运算指令

              


     要点:

     1. SSE2的算数运算指令和MMX指令在指令助记符上完全相同。

     2. SSE2的算数运算指令操作的是128位的XMM寄存器,而MMX指令操作的是64位的MM寄存器。

     3. SSE2指令中如涉及存储器变量,需要变量地址按照16字节对齐。

  

 

7.  数据打包与数据重排指令


7.1  packuswb XMM,XMM/m128 

     此指令与前面的MMX指令packuswb MM,MM/m64操作相同,只是变成了128位。
     把目的寄存器按字有符号数压缩为字节无符号数放入目的寄存器低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| a7

7.2   packsswb XMM,XMM/m128

    此指令与前面的MMX指令packsswb MM,MM/m64操作相同,只是变成了128位
    把目的寄存器按字有符号数压缩为字节有符号数放入目的寄存器低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| a7


7.3 packssdw XMM,XMM/m128

    此指令与前面的MMX指令packsswb MM,MM/m64操作相同,只是变成了128位
    把目的寄存器按双字有符号数压缩为字有符号数放入目的寄存器低64位
    把源寄存器按双字有符号数压缩为字有符号数放入目的寄存器高64位
    压缩时小于-32768负数变为8000h,大于32767的正数变为7fffh,内存变量必须对齐内存16字节.

                                     高64位          |           低64位
        目的寄存器:                a0      |      a1     |      a2     |      a3
        源寄存器:                  b0      |      b1     |      b2     |      b3
        目的寄存器压缩结果:    b0  |   b1  |  b2  |  b3  |  a0  |  a1  |  a2  |  a3


7.4  punpckldq XMM,XMM/m128

      此指令与前面的MMX指令punpckldq MM,MM/m64操作相同,只是变成了128位
        把源存储器与目的寄存器低64位按双字交错排列,内存变量必须对齐内存16字节.
                                         高64位          |           低64位
        目的寄存器:                a0      |      a1     |      a2     |      a3
        源寄存器:                  b0      |      b1     |      b2     |      b3
        目的寄存器排列结果:        b2      |      a2     |      b3     |      a3


7.5  punpckhdq XMM,XMM/m128

       此指令与前面的MMX指令punpckhdq MM,MM/m64操作相同,只是变成了128位
        把源存储器与目的寄存器高64位按双字交错排列,内存变量必须对齐内存16字节.
                                         高64位          |           低64位
        目的寄存器:                a0      |      a1     |      a2     |      a3
        源寄存器:                  b0      |      b1     |      b2     |      b3
        目的寄存器排列结果:        b0      |      a0     |      b1     |      a1

7.6   punpcklwd XMM,XMM/m128

              此指令与前面的MMX指令punpcklwd MM,MM/m64操作相同,只是变成了128位
       把源存储器与目的寄存器低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  |  a7


7.7  punpckhwd XMM,XMM/m128

              此指令与前面的MMX指令punpckhwd MM,MM/m64操作相同,只是变成了128位
       把源存储器与目的寄存器高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  |  a3


7.8 punpcklbw XMM,XMM/m128

       此指令与前面的MMX指令punpcklbw MM,MM/m64操作相同,只是变成了128位
        把源存储器与目的寄存器低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| aF


7.9 punpckhbw XMM,XMM/m128

       此指令与前面的MMX指令punpckhbw MM,MM/m64操作相同,只是变成了128位
        把源存储器与目的寄存器高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| a7
        


  要点:

     1. SSE2的数据打包、重排指令和MMX数据打包、重排指令在指令助记符上完全相同。

     2. SSE2的算数运算指令操作的是128位的XMM寄存器,而MMX指令操作的是64位的MM寄存器。

     3. SSE2指令中如涉及存储器变量,需要变量地址按照16字节对齐。

    4. SSE2指令一般如果操作低64位,而MMX指令就会操作低32位。


 

 

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

abcijkxyz
粉丝 64
博文 6421
码字总数 1876
作品 0
深圳
项目经理
私信 提问
Intel 45nm制程处理器上的SSE4指令集简介

Intel 45nm制程处理器上的SSE4指令集简介 Intel的SSE(Streaming SIMD Extensions, 流式单指令多数据扩展)技术有效增强了CPU的向量运算能力。支持该指令集的处理器有8个128位xmm寄存器,每一...

日久不生情
2017/11/07
0
0
(学习心得):进程,线程,超线程,并发,并行 等概念

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

shayi
2012/11/26
6K
28
cpu指令集包括哪些?

如题!我知道有mmx,sse等等.可是mmx指令集是在96年才有的, 而之前386,486,586等那些呢,包含哪些指令,相关资料在哪下载? 是不是sse1包含mmx,,,,,,,sse2包含sse1,,,,,,,sse3包含sse2 我知道去英...

音乐&编程
2012/09/14
2.2K
3
Pyhton连接wwwhj8828com199O8836661SQL Server数据库解决方案

S32K14x系列使用之硬件FPU特性介绍和使用详解 Cortex M4F CPU内核的FPU特性介绍 1.1. Cortex M4F CPU内核FPU的寄存器组以及控制状态寄存器功能介绍 1.2 Cortex M4F CPU内核FPU的汇编指令集介...

1325440472159712
2018/12/30
0
0
进程,线程,超线程,并发,并行 等概念

进程是操作系统对一个正在运行的程序的抽象,即操作系统为该进程虚拟了独自的处理器资源,内存空间(又称虚拟地址空间)与磁盘空间 线程是进程中多个可以派遣的工作单位(或称执行单元,以C...

lvzjane
2012/11/28
971
1

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部