文档章节

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

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:45
字数 888
阅读 0
收藏 0
点赞 0
评论 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
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
(学习心得):进程,线程,超线程,并发,并行 等概念

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

shayi
2012/11/26
5.5K
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
连载-第1章绪论 1.2嵌入式处理器

1.1 嵌入式处理器 1.1.1 哈佛结构和冯.诺依曼结构 相信学过计算机技术这门课程的读者都知道,通用CPU采用的是冯.诺依曼结构,而很多嵌入式处理器多采用哈佛结构,那么这两种结构究竟有什么区...

文艺小青年
2017/06/01
0
0
如何选择纠删码编码引擎 | 纠删码技术详解(上)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎。 柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统。 前言: 随着数据的存储呈现出集中化(以...

七仙女很忙
2017/04/13
0
0
如何选择并实现高性能纠删码编码引擎案例(上)

前言 随着数据的存储呈现出集中化(以分布式存储系统为基础的云存储系统)和移动化(互联网移动终端)的趋势,数据可靠性愈发引起大家的重视。集群所承载的数据量大大上升,但存储介质本身的...

linuxprobe16
05/26
0
0
CPU内部组成结构及指令执行过程

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

邵鸿鑫
2015/05/15
0
0
C/C++ 编译器--AsmJit

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

匿名
2009/06/27
2.5K
1
i386和x86-64区别通俗易懂版本(转)

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

easonjim
2017/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

我的成长记录(一)

今天突然精神抖擞,在我的博客下新开一项分类>成长记录,专门记录每隔一段时间我的一点感悟吧。因为今天才专门花时间新开这样一个分类,所以以前有过的一些感悟没有记录下来,现在已经想不起...

dtqq
10分钟前
0
0
机器学习管理平台 MLFlow

最近工作很忙,博客一直都没有更新。抽时间给大家介绍一下Databrick开源的机器学习管理平台-MLFlow。 谈起Databrick,相信即使是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的...

naughty
今天
0
0
idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部