浮点数寄存器与指令

原创 2018年04月16日 17:49:05

寄存器

AVX浮点体系结构允许数据存储在16个YMM寄存器中

255 127 0
%ymm0 %xmm0 1st FP arg.返回值
%ymm1 %xmm1 2nd FP参数
%ymm2 %xmm2 3rd FP参数
%ymm3 %xmm3 4th FP参数
%ymm4 %xmm4 5th FP参数
%ymm5 %xmm5 6th FP参数
%ymm6 %xmm6 7th FP参数
%ymm7 %xmm7 8th FP参数
%ymm8 %xmm8 调用者保存
%ymm9 %xmm9 调用者保存
%ymm10 %xmm10 调用者保存
%ymm11 %xmm11 调用者保存
%ymm12 %xmm12 调用者保存
%ymm13 %xmm13 调用者保存
%ymm14 %xmm14 调用者保存
%ymm15 %xmm15 调用者保存

媒体寄存器。这些寄存器用于存放浮点数据。每个YMM寄存器保存32个字节。低16字节可以作为XMM寄存器来访问

浮点传送和转换操作

指令 目的 描述
vmovss M32 X 传送单精度数
vmovss X M32 传送单精度数
vmovsd M64 X 传送双精度数
vmovsd X M64 传送双精度数
vmovaps X X 传送对齐的封装好的单精度数
vmovapd X X 传送对齐的封装好的双精度数

浮点传送指令。这些操作在内存和寄存器之间以及一对寄存器之间传送值(X:XMM寄存器(例如%xmm3);M32:32位内存范围;M64:64位内存范围)

指令 目的 描述
vcvttss2si X/M32 R32 用截断的方法把单精度数转换成整数
vcvttsd2si X/M64 R32 用截断的方法把双精度数转换成整数
vcvttss2siq X/M32 R64 用截断的方法把单精度数转换成四字整数
vcvttsd2siq X/M64 R64 用截断的方法把双精度数转换成四字整数

双操作数浮点转换指令。这些操作将浮点数转换成整数(X:XMM寄存器(例如%xmm3); R32:32位通用寄存器(例如%eax);R64:64位通用寄存器(例如%rax);M32:32位内存范围;M64:64位内存范围)

指令 源1 源2 目的 描述
vcvtsi2ss M32/R32 X X 把整数转换成单精度数
vcvtsi2sd M32/R32 X X 把整数转换成双精度数
vcvtsi2ssq M64/R64 X X 把四字整数转换成单精度数
vcvtsi2sdq M64/R64 X X 把四字整数转换成双精度数

三操作数浮点转换指令。这些操作将第一个源的数据类型转换成目的数据类型。第二个源值对结果的低位字节没有影响(X:XMM寄存器(例如%xmm3);M32:32位内存范围;M64:64位内存范围)

gcc实现单精度与双精度的转换需要单独说明(就不具体解释了)

Conversion from single to double precision
vunpcklps %xmm0, %xmm0, %xmm0   Replicate first vector element
vcvtps2pd %xmm0, %xmm0          Convert two vector elements to double
Conversion from double to single precision
vmovddup %xmm0, %xmm0            Replicate first vector element
vcvtpd2psx %xmm0, %xmm0          Convert two vector elements to single

运算操作

标量avx2浮点指令。每条指令有一个(S1)或两个(S1,S2)源操作数,和一个目的操作数。第一个源操作数S1可以是一个XMM寄存器或一个内存位置。第二个源操作数和目的操作数都必须是XMM寄存器。每个操作都有一条针对单精度的指令和一条针对双精度的指令。结果存放在目的寄存器中。

单精度 双精度 效果 描述
vaddss vaddsd D<—S2+S1 浮点数加
vsubss vsubsd D<—S2-S1 浮点数减
vmulss vmulsd D<—S2xS1 浮点数乘
vdivss vdivsd D<—S2/S1 浮点数除
vmaxss vmaxsd D<—max(S2,S1) 浮点数最大值
vminss vminsd D<—min(S2,S1) 浮点数最小值
sqrtss sqrtsd D<—2 浮点数平方根

位级操作

单精度 双精度 效果 描述
vxorps vorpd D<—S2^S1 位级异或(EXCLUSIVE–OR)
vandps andpd D<—S2&S1 位级与(AND)

对封装数据的位级操作(这些指令对一个XMM寄存器中的所有128位进行布尔操作)

比较操作

指令 基于 描述
ucomiss S1,S2 S2-S1 比较单精度值
ucomisd S1,S2 S2-S1 比较双精度值

参数S2必须在XMM寄存器中,而S1可以在XMM寄存器中,也可以在内存中

条件码的设置如下:

顺序S2:S1 CF ZF PF(奇偶标志位)
无序的(NaN) 1 1 1
S2 < S1 1 0 0
S2 = S1 0 1 0
S2 > S1 0 0 0
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WarEric/article/details/79963930

汇编语言学习笔记(十二)-浮点指令

浮点数如何存储浮点寄存器浮点数指令浮点计算例子浮点高级运算CMOV移动指令 浮点数如何存储 浮点数的运算完全不同于整数,从寄存器到指令,都有一套独特的处理流程,浮点单元也称作x87 FPU...
  • u010229420
  • u010229420
  • 2017年02月07日 14:23
  • 4263

浮点寄存器及浮点运算

原链接:http://blog.163.com/april_dsz/blog/static/33773077200811754816660/浮点执行环境的寄存器主要是8个通用数据寄存器和几个专用寄存器...
  • look01
  • look01
  • 2010年08月18日 22:27
  • 3199

使用FPU Control Word寄存器控制计算整形与浮点型混合相加的结果以及对浮点数异常相关位Mask的处理

FPU 特殊作用寄存器中有一个控制寄存器,该寄存器的作用是控制浮点数计算结果的四舍五入以及对相关异常的静默处理 Control word寄存器含有16位,可以将其内容保存在一个WORD 大小的内存变...
  • lyx2007825
  • lyx2007825
  • 2014年02月18日 15:54
  • 1311

XMM SSE2浮点指令

SSE2 (单指令多数据流扩展)浮点指令使用128位的XMM寄存器,可以处理双精度(64位)浮点值。也有一些工作于单精度(32位)浮点值的指令。SSE2在Pentium 4 和 Xeon处理器中被提出...
  • pgj007
  • pgj007
  • 2013年05月03日 18:07
  • 948

汇编浮点数运算指令大全

对下面的指令先做一些说明:  st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响  src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示...
  • GeiZuoZuoZuo
  • GeiZuoZuoZuo
  • 2013年06月14日 13:48
  • 2013

汇编速查-FPU

x87 FPU的简介
  • giantpoplar
  • giantpoplar
  • 2016年11月22日 15:57
  • 963

arm寄存器和指令集

1、arm指令集                           arm指令集-32位指令集                   arm指令集:      thumb指令-16位指令集(代码密度更...
  • HK_5788
  • HK_5788
  • 2016年08月18日 09:42
  • 559

ARM 浮点运算

很多时候我们要处理的数据,不仅仅是整数和字符串,还有浮点数即小数。在多媒体数据处理方面表现的更多。是不是所有的CPU都支持,浮点运算呢?答案:不是。 我们常常听到赢浮点和软浮点,这些到底说的是什么呢...
  • petib_wangwei
  • petib_wangwei
  • 2014年10月17日 16:14
  • 1257

四、代码段和指令指针

1.   人为定义的代码段:        a. 按照上一节讲过的段的定义,只要是符合规则的内存地址空间的一部分都可以作为段,至于段的含义必须由人给出;        b. 通常编程时会根据人的需要会...
  • u011767511
  • u011767511
  • 2013年09月19日 14:09
  • 1108

程序计数器和指令指针寄存器

CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器,从名称上我们可以看出它们和指令的关系。 在8086PC机中,任意时...
  • hellochenlu
  • hellochenlu
  • 2016年02月22日 09:21
  • 1528
收藏助手
不良信息举报
您举报文章:浮点数寄存器与指令
举报原因:
原因补充:

(最多只允许输入30个字)