文档章节

MMX指令集系列之一----数据加载与算术运算指令

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

MMX指令有8个64位寄存器(MM0~MM7),不过可惜都是借的FPU的, FPU原来有8个80位寄存器(st(0)~st(7)),现在用在了MMX上,所以用之后要加上一条EMMS指令,用以复位.

MMX寄存器有64位,可以同时进行8对字节或4对字或2对双字同时相同操作,还可以进行饱和运算,不会溢出,当然也可以进行普通运算.

特别要注意的一点是:在x86上,一个字,WORD的长度是16位,而在ARM上,一个WORD的长度是32位。

描述约定:

  MM表示64位MMX寄存器.
  r32表示32位通用寄存器或esi,edi
  m32表示32位内存变量
  m64表示64位内存变量
  m128表示128位内存变量
  imm8表示8位立即数
  左操作数为目的操作数,右操作数为源操作数

 

1. 数据搬移指令

  

   movd MM,r32/m32

   把 r32/m32 值赋给 MM 的低32位,高32位清零.

   movd r32/m32,MM

   把 MM 的低32位值赋给 r32/m32.
  例:
  当 MM0 == 0x12345678 87654321,eax == 0x0abc 时, 执行movd MM0,eax, 则 MM0 == 0x 0abc
  当 MM0 == 0x12345678 87654321,eax == 0x0abc 时, 执行movd eax,MM0, 则 eax  == 0x 87654321

 movq MM,MM/m64

  把源MM/m64的值送入目的MM.

  例:
     当  MM == 0x1234567887654321, MM1 == 0x3141592653时,执行movq MM0,MM1,则MM0 == 0x3141592653

 2. 饱和算数加减运算指令

    paddsb MM,MM/m64

  按字节对齐,饱和8位有符号数相加
  当结果小于-128时,结果强制转为80h,当结果大于+127时,结果强制转为7fh.
  例:
  当  MM0 == 0x 00 c0  fe 7e 11,
       MM1 == 0x 12 a6 9c 10 02, 执行 paddsb MM0,MM1,
   则     MM0 == 0x 12 80 9a 7f 13

  paddsw MM,MM/m64


  按字对齐,饱和16位有符号数相加

     结果强制到 -32768,+32767之间

 

  paddusb MM,MM/m64


  按字节对齐,饱和无符号数相加(结果= 0~255,0h~0ffh),值送入目的MM.
  当结果大于255时,结果强制转为0ffh,结果小于0时强制为0

 

  paddusw MM,MM/m64


  按字对齐,饱和无符号数相加(结果= 0~65535,0h~0ffffh),值送入目的MM.
  运算与paddusb类似,当结果大于65535时,结果强制转为0ffffh.

     注:减法指令与上述类似,总结为下表:

                  

            PADDS[B,W]      饱和有符号数加[byte, word]
            PADDUS[B,W]      饱和无符号数加[byte, word]
            PSUBS[B,W]      饱和有符号数减[byte, word]
            PSUBUS[B,W]      饱和无符号数减[byte, word]

 

 


3. 普通算数加减运算指令
 

   paddb MM,MM/m64

  按字节对齐,普通相加,与add指令类似.
  例:
  当MM0 = 12 34 56 78  ab cd ef  fe,
     MM1 = 87 69 86 54 3d ea  cb 03,执行paddb MM0,MM1,
  则MM0 = 99 9d dc  cc  e8 b7 ba 01h


  paddw MM,MM/m64
  按字对齐,普通相加,与add指令类似.

  paddd MM,MM/m64
  按双字对齐,普通相加.与add指令类似.

  paddq MM,MM/m64
  按四字对齐,普通相加.
  例:
  当MM0 == 0fffffffffffffffeh,MM1 == 3h,执行paddq MM0,MM1,则MM0 = 1h

  psubb MM,MM/m64
  按字节对齐,普通相减,与sub指令类似.

  psubw MM,MM/m64
  按字对齐,普通相减,与sub指令类似.

  psubd MM,MM/m64
  按双字对齐,普通相减.与add指令类似.

  psubq MM,MM/m64
  按四字对齐,普通相减.
  例:
  当MM0 == 1h,MM1 == 3 h,执行psubq MM0,MM1,则MM0 = 0fffffffffffffffeh

 小结

     1. 饱和算数加减运算的指令中有S标记

     2. 饱和运算只有8位和16位两种,分为无符号和有符号。

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

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

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

shayi
2012/11/26
5.7K
28
进程,线程,超线程,并发,并行 等概念

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

lvzjane
2012/11/28
0
1
Intel 45nm制程处理器上的SSE4指令集简介

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

日久不生情
2017/11/07
0
0
[JVM] 字节码指令集简介

Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(Opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(Operands)所构成。虚拟机中许多指令并不包含操作数,只...

tequliapop
2016/02/16
327
0
CPU内部组成结构及指令执行过程

计算机的基本硬件系统由运算器、控制器、存储器和输入、输出设备五大部件组成。运算器和控制器等部件被集成在一起统称为中央处理单元(Central Processing Unit,CPU)。 CPU的功能 (1)程序...

邵鸿鑫
2015/05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式

//分静态代理和动态代理,区别:是否再编译时知道被被代理的对象 //思想,被代理类将自己的处理交给代理类,代理类可以添加一些新的功能,之后有代理类和客户端交互 https://www.cnblogs.co...

南桥北木
24分钟前
1
0
Spring系列教程七: Spring 整合mybatis的四种方式

一、使用注解实现整合mybatis 项目目录如下 第一步、导入jar包 <build> <resources> <!-- mapper.xml文件在java目录下 --> <resource> ......

我叫小糖主
30分钟前
5
0
阿里P7架构师:这些技术点没搞懂,我劝你不要跳槽!

阿里P7架构师架构师:这些技术点没搞懂,我劝你不要跳槽! 哪些技术点呢? 废话不多说,技术点全在下面这6张图里面了! 1.怎么看源码? 2.分布式 3.微服务 4.性能优化 5.工程化 粉丝福利:一...

别打我会飞
48分钟前
4
0
易错题

父类必须有一个无参构造,不然会报Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor...

architect刘源源
53分钟前
1
0
使用Json4s 将带有Timestamp的对象转json时 变为所在时区

在有Timestamp属性的对象转json时 最后出来的时间会减小8小时,是因为变成了0时区,需要将隐式转换中添加设置本地时区 import org.json4s.{DefaultFormats, Formats}import org.json4s.jac...

可达鸭Go
54分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部