fpu,mmx以及sse寄存器的少量简介

标签: fpu mmx
1765人阅读 评论(0) 收藏 举报
分类:

FPU: 8个80位浮点寄存器(数据),16位状态寄存器,16位控制寄存器,16为标识寄存器。
     使用FPU指令对这些寄存器进行操作,这些寄存器构成一个循环栈,st7栈底,st0栈顶,
     当一个值被压入时,被存入st0,原来st0中的值被存入st7
MMX: 将8个FPU寄存器重命名为8个64位MMX寄存器,即mm0到mm7。[号称多媒体处理技术]
     57条MMX指令,加快了整形浮点运算,但是对于复杂浮点运算无帮助

SSE: 8个128位寄存器(从xmm0到xmm7),MXSCR寄存器,EFLAGS寄存器,专有指令(复杂浮点运算)
SSE2: 寄存器和SSE相同,增加了5种数据类型(都是128位),专有指令
SSE3: 进增加了几个新的指令

由于MMX使用的寄存器影射到FPU寄存器上,所以MMX指令执行前,需要保存FPU堆栈。

示例1,FPU寄存器及指令使用(下面所有程序都使用at&t风格汇编):
data1:
        .byte 0x34, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
data2:
        .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.section .text
.globl _start
_start:
        nop
        fbld  data1     压入st0
        fimul data2     st0中的值和data2相乘,保存在st0中
        fbstp data1     st0弹出到内存44


示例2, SSE寄存器及指令使用
.lcomm data 16
value1:
        .float 12.34, 2345.543, -3493.2, 0.44901
value2:
        .float -54439.234, 23231.4, 1.0098, 0.000003
.section .text
.globl _start
_start:
        movups value1, %xmm0
        movups value2, %xmm1
        movups %xmm0, %xmm2
        movups %xmm0, data

由于MMX技术处理的是由几个并行紧缩型数据组合成的一个64位数,因此在MMX运算中,例如算术运算,比较运算,逻辑运算和移位运算等,都是对应的紧缩型数据独立于其他的数据并行进行运算,互相不能影响,也不能简单的当成一个整体的连续的64位数来对待。所以在运算过程中就要注意解决紧缩型数据之间的边界越界问题,因此产生了绕转及饱和这新的MMX运算原则。
  绕转运算:例如带绕转的无符号紧缩型字相加,虽然是64位的紧缩数相加,但是每个紧缩数是由4个独立的16位小整型紧缩型字组成,所以其中每个对应的16位紧缩型字的加法都要独立于其他的加法并行进行。紧缩型字的边界之间不能产生进位或借位,其中每个字边界之间的进位或借位被丢掉,称之为绕转。这样就保证了64位数内4个独立的16位字数据之间的正常并行运算。
  饱和运算:例如带饱和的无符号紧缩型字相加减,当产生一个越界的结果时,边界之间的进位或借位被丢掉,且上溢时本紧缩型字取最大的可表示值为FFFFH,下溢时本紧缩型字取最小的可表示值为0000H,即其值被饱和了。饱和运算对像素运算来说很重要,避免了绕转运算带来的使一个黑(白)像素突然变成白(黑)像素的可能。而对带符号的16位字而言,最大和最小的饱和值为7FFFH和8000H。
  MMX指令中还特别增加了脱胎于DSP的关键的乘和累加指令,能够一次处理4个16位字的4次乘法和2次加法(A3B3+A2B2+A1B1+A0B0)。对许多信号处理算法来说,如向量点积,矩阵相乘,FIR和IIR滤波,FFT,DCT等,该指令十分重要而有效。
  可见,利用MMX技术进行多媒体应用的并行计算比不用MMX技术要节省不少指令和运行时间。

转载自:http://wordpad.blog.sohu.com/43301264.html

查看评论

FPU , MMX SSE

为什么要需要FPU和MMX/SSE? 提供了SIMD环境(single instruction multi data),即单指令多数据。 内嵌浮点运算单元,64及128位寄存器等。甚至sin/co...
  • shybrian
  • shybrian
  • 2012-07-03 15:56:43
  • 1010

SIMD(MMX/SSE/AVX)变量命名规范心得

【转载】:SIMD(MMX/SSE/AVX)变量命名规范心得 当使用Intrinsics函数来操作SIMD指令集(MMX/SSE/AVX等)时,会面对不同长度的SIMD数据类型,其中又分为多...
  • Real_Myth
  • Real_Myth
  • 2016-03-08 16:41:40
  • 1900

MMX和SSE的运用

源地址:http://falloutmx.blog.163.com/blog/static/3923602020101024914425/
  • u010550883
  • u010550883
  • 2014-11-21 20:26:37
  • 786

SSE指令学习笔记

学习的动力来自哪里?学习一样新东西是需要动力的,这个动力有的来自兴趣,即对这个新东西感兴趣,也就特别愿意去学习,比如学车;有的动力来自对职业发展的恐惧,怕过早出现职场瓶颈,于是通过学习新东西、新技能来...
  • u013085897
  • u013085897
  • 2014-02-26 21:37:11
  • 3320

MMX和SSE

MMX MMX: 是MultiMedia eXtensions(多媒体扩展)的缩写,是第六代CPU芯片的重要特点。MMX技术是在CPU中加入了特地为视频信号(Video Signal),音频信号(A...
  • qingkong8832
  • qingkong8832
  • 2011-09-21 15:29:13
  • 5888

MMX, SSE, SSE2

指令集基本概念CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。指令集是存储在CP...
  • wang010366
  • wang010366
  • 2016-08-28 11:12:19
  • 591

MMX Intrinsics各函数介绍

MMX Intrinsics各函数介绍。
  • fengbingchun
  • fengbingchun
  • 2014-03-01 18:48:26
  • 4719

<em>MMX</em>_<em>SSE</em>

2013-10-15 上传大小:20KB <em>SSESSE</em>2<em>MMX</em> 大神的<em>学习</em>笔记,个人也是很受益,所以拿出来分享一下!综合评分:0 收藏评论举报 所需: 3积分/C币 下载个数: 4 开通VIP...
  • 2018年04月09日 00:00

SSE入门

http://blog.csdn.net/bendanban/article/details/42299863 此文主要内容来自这篇文章,本文翻译只求能理解,不求逐句翻译。 正...
  • Taily_Duan
  • Taily_Duan
  • 2016-11-29 14:13:35
  • 470

RISC、CISC、 SIMD、FPU、MMX、SSE、SSEX、AVX、3D Now以及DSP、ARM的Neon简介

CPU的指令集从主流的体系结构上分为精简指令集和复杂指令集,而在普通的计算机处理器基本上是使用的复杂指令集。在计算机早期的发展过程中,CPU中的指令集是没有划分类型的,而是都将各种程序需要相配合的指令...
  • feixiang_john
  • feixiang_john
  • 2012-08-30 15:29:28
  • 7564
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 23万+
    积分: 3830
    排名: 1万+
    欢迎关注『高性能服务器开发』公众号
    欢迎关注『高性能服务器开发』公众号
    博客专栏
    最新评论