文档章节

MMX指令集系列之二

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:45
字数 566
阅读 9
收藏 0
点赞 0
评论 0

4. 数据移位指令

   psllw MM,MM/m64

   psllw MM,imm8

   把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失.
   低字移出的位不会移入高字.
   例:
   当MM0 = 0xffff  ffff ffff  ffff, 执行psllw MM0,1
   则MM0 = 0xfffe fffe fffe fffe

  psrlw MM,MM/m64

  psrlw MM,imm8


  把目的寄存器按字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.
  高字移出的位不会移入低字.
  例:
  当MM0 = 0xffff  ffff  ffff  ffff, 执行psrlw MM0,1
  则MM0 = 0x7fff 7fff 7fff 7fff

  pslld MM,MM/m64

  pslld MM,MM imm8

  把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑左移,移出的位丢失.
  低双字移出的位不会移入高双字.
  例:
  当MM0 = 0xffffffff  ffffffff, 执行 pslld MM0,1
  则MM0 = 0xfffffffe fffffffe

 psrld MM,MM/m64

 psrld MM,imm8
 

  把目的寄存器按双字由源存储器(或imm8 立即数)指定位数逻辑右移,移出的位丢失.
  高双字移出的位不会移入低双字.
  例:
  当 MM0 = 0xffffffff  ffffffff, 执行psrld MM0,1
  则 MM0 = 0x7fffffff 7fffffff

5. 乘法指令

    pmullw MM,MM/m64

   并行16位按字相乘, 取结果低16位, 放入目的寄存器的对应字.  

  例:
  当MM0 == 0x0000 0002 0000 acfe

    MM1 ==  0x0000 0009 0000 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 0002 0000 acfe

    MM1 ==  0x0000 0009 0000 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位进行并行移位。

  2. 移位指令分为逻辑左移和逻辑右移。

  3. 只有三种乘法指令,并行乘法的数据单位都是16位有符号数。

 

 

本文转载自:http://www.cnblogs.com/celerychen/archive/2013/03/26/2982576.html

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
C/C++ 编译器--AsmJit

AsmJit 是一个完整的 JIT(Just-In-Time,运行时刻)的针对 C++ 语言的汇编器,可以生成兼容 x86 和 x64 架构的原生代码,不仅支持整个 x86/x64 的指令集(包括传统的 MMX 和最新的 AVX2 指令集...

匿名
2009/06/27
2.5K
1
cpu指令集包括哪些?

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

音乐&编程
2012/09/14
2.1K
3
(学习心得):进程,线程,超线程,并发,并行 等概念

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

shayi
2012/11/26
5.5K
28
Flat Assembler 1.70 发布,汇编工具

Flat Assembler 是一个快速高效的80x86的汇编工具,支持DOS、Windows、Linux操作系统,支持包括 8086-80486/Pentium instructions with MMX, SSE, SSE2, SSE3, and 3DNow! extensions and x......

红薯
2012/04/19
1K
10
i386和x86-64区别通俗易懂版本(转)

x86架构首度出现在1978年推出的Intel 8086中央处理器,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的。Intel之后又推出了包括80186、80286、80386以及80486。 在设计上...

easonjim
2017/07/25
0
0
Flat Assembler

Flat Assembler 是一个快速高效的80x86的汇编工具,支持DOS、Windows、Linux操作系统,支持包括 8086-80486/Pentium instructions with MMX, SSE, SSE2, SSE3, and 3DNow! extensions and x......

匿名
2008/11/16
2.8K
0
linux /proc/cpuinfo文件分析

基于不同指令集(ISA)的CPU产生的/proc/cpuinfo文件不一样,基于X86指令集CPU的/proc/cpuinfo文件包含如下内容: processor  : 0 vendorid  :GenuineIntel cpu family  :6 model ...

wulei163
2014/01/03
0
0
进程,线程,超线程,并发,并行 等概念

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

lvzjane
2012/11/28
0
1
/proc/cpuinfo文件分析(查看CPU信息)

  在Linux系统中,提供了proc文件系统显示系统的软硬件信息。如果想了解系统中CPU的提供商和相关配置信息,则可以通过/proc/cpuinfo文件得到。本文章针对该文件进行简单的总结。   基于不...

zhiqiangw
2016/11/18
33
0
天外窗--非主流X86处理器的过去、现在

(笔者按:这是笔者当年投的第一份稿子,——当然是石沉大海了,处女作就这样没了 呜呜,,记得那时是高二2000年,呵呵,现在这里发也好纪念一下,路过的朋友请多包涵:) 跟大多数的行业一样...

sp42
2009/07/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

javascript前端AES加密解密

参考了一下网上的代码加上自已的一些想法,修改,key也可以是中文, 要引入一个aes.js的js文件。 html代码 <html> <head> <title>AES加解密</title> <meta http-equiv="Content-Type"......

oisan_
7分钟前
0
0
MacOS和Linux内核的区别

有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我们来看...

六库科技
11分钟前
0
0
Vue.js-自定义事件例子

自定义组件的 v-model 2.2.0+ 新增 一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。m...

tianyawhl
15分钟前
0
0
mybatis中获取sqlSession的源码分析

0 SqlSessionFactoryBuilder类 SqlSessionFactoryBuilder sqlSessionFacotory=SqlSessionFactoryBuilder().build(reader) public SqlSessionFactory build(Reader reader) { return build(re......

writeademo
15分钟前
0
0
RobotThread.cpp

#include "RobotThread.h"RobotThread::RobotThread(int argc, char** pArgv, const char * topic) :m_Init_argc(argc), m_pInit_argv(pArgv), m_topic(topic){/** ......

itfanr
18分钟前
0
0
防御ddos攻击的常见方法

DDoS攻击是一种特殊形式的拒绝服务攻击。它利用多台已经被攻击者所控制的机器对某一台单机发起攻击,在带宽相对的情况下,被攻击的主机很容易失去反应能力。分布式拒绝服务攻击(DDoS) 是一种...

上树的熊
18分钟前
0
0
Vue全家桶问题合集(很多eslint规范问题)

自己使用Vue全家桶问题合集(很多eslint规范问题) 遇到很多问题一一道来。 1.vue报错 Do not use built-in or reserved HTML elements as component id:header 组件,不能和html标签重复 he...

kisshua
20分钟前
0
0
Spring框架中的设计模式(四)​

Spring框架中的设计模式(四) 本文是Spring框架中使用的设计模式第四篇。本文将在此呈现出新的3种模式。一开始,我们会讨论2种结构模式:适配器和装饰器。在第三部分和最后一部分,我们将讨...

瑞查德-Jack
25分钟前
0
0
如何玩转小程序+公众号?手把手教你JeeWx小程序CMS与公众号关联

随着微信小程序新功能、新入口的不断更新,小程序的商业价值逐步增强,特别是小程序与公众号的深度融合,已经让小程序成为各行业新的营销渠道。Jeewx平台专注小程序的开发,逐步完善小程序生...

Jeecg
30分钟前
0
0
IDEA开发vue.js卡顿

由于新项目使用了vue.js。在执行cnpm install后会在node_modules这个文件下面生成vue的相关依赖文件,这个时候当执行npm run dev命令时,会导致IDEA出现卡死的问题。 解决办法:在idea中设置...

落雪飞声
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部