【汇编】SSE

SSE

        SSE这些扩展增强了IA-32处理器的性能,可用于高级2d和3d图形、运动视频、图像处理、语音识别、音频合成、电话和视频会议。

XMM registers

        XMM数据寄存器有16个,单个128位,这些寄存器可以使用名称XMM0到XMM15直接访问,它们可以独立于x87 FPU和MMX寄存器和通用寄存器进行访问。

图1-1 XMM寄存器(实际为16个)

MXCSR Control and Status Register

        32位MXCSR寄存器包含了Intel SSE、SSE2和SSE3 SIMD浮点操作的控制和状态信息。

图1-2 MXCSR 控制/状态 寄存器​

        0-5 异常标志位:无效操作,非规范性,零除,向上溢出,向下溢出,精度

        6-12 可设置:非规范化,无效操作掩码,非规范化掩码,零除掩码,向上溢出掩码,精度掩码。(如果置位则忽略)

        13-14:舍入控制。00:舍入最近的值。01:向负无穷舍入。10:向正无穷舍入。11:向0方向舍入(截断)。

        15:归零。如果设置该位,则所有向下溢出条件将寄存器设置为0

SSE指令

        访问MXCSR寄存器:

ldmxcsr mem32   ;加载到mxcsr
stmxcsr mem32   ;加载到内存

        浮点移动指令:

movss   xmmn,mem32
movss   mem32,xmmn
movsd   xmmn,mem64
movsd   mem64,xmmn
​
movd    reg32,xmmn
movd    xmmn,reg32
movq    reg64,xmmn
movq    xmmn,reg64

        浮点算术指令:addss,addsd,subss,subsd,mulss,mulsd,divss,divsd,minss,minsd,maxss,maxsd,sqrtss,sqrtsd,rcpss,rsqrtss

        浮点数比较:cmpss,cmpsd(结果为全0或全1)

cmpss xmmn,xmmm/mem32,imm8
cmpsd xmmn,xmmm/mem64,imm8;imm8:0-7依次为==,<,<=,无序,不等于,>=,>,有序

        浮点数转换:cvtsd2si,cvtsd2ss,cvtsi2sd,cvtsi2ss,cvtss2sd,cvtss2si,cvtsd2si,cvtss2si

代码

main.cpp

#include<iostream>
​
using namespace std;
​
extern "C"{
    int cmpd(double a,double b);//a*b>a/b
}
​
int main(){
    cout<<cmpd(2.2,4.4)<<endl;
    return 0;
}

sse.asm

   option casemap:none
​
    .code
    public cmpd
cmpd proc
    movsd   xmm3,xmm0
    mulsd   xmm0,xmm1
    divsd   xmm3,xmm1
    cmpsd   xmm0,xmm3,6
    movd    eax,xmm0
    ret
cmpd endp
​
end

参考

  1. [美]兰德尔·海德.64位汇编语言的编程艺术

  2. Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4

  3. AMD64 Architecture Programmer’s Manual Volumes 1–5

相关推荐

  1. 汇编——SSE对齐(一. 未对齐情况)

    2024-07-12 13:40:01       29 阅读
  2. 一些链接汇总,for se/cs students

    2024-07-12 13:40:01       64 阅读
  3. 汇编(1)

    2024-07-12 13:40:01       53 阅读
  4. 测试:SSE VS WebSocket

    2024-07-12 13:40:01       54 阅读
  5. SSE和websocket

    2024-07-12 13:40:01       76 阅读
  6. SSE协议介绍

    2024-07-12 13:40:01       44 阅读
  7. Server-side encryption (SSE)

    2024-07-12 13:40:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 13:40:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 13:40:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 13:40:01       58 阅读
  4. Python语言-面向对象

    2024-07-12 13:40:01       69 阅读

热门阅读

  1. ES6 Class(类) 总结(九)

    2024-07-12 13:40:01       20 阅读
  2. DDD架构

    DDD架构

    2024-07-12 13:40:01      23 阅读
  3. Spring Cloud是什么

    2024-07-12 13:40:01       24 阅读
  4. Makefile--自动识别编译环境(x86还是arm)进行编译

    2024-07-12 13:40:01       19 阅读
  5. docker安装mysql8.0.23

    2024-07-12 13:40:01       23 阅读
  6. RPC与REST

    2024-07-12 13:40:01       20 阅读
  7. Opencv中的直方图

    2024-07-12 13:40:01       17 阅读
  8. python 如何处理图片 举例说明

    2024-07-12 13:40:01       16 阅读
  9. DangerWind-RPC-framework---四、SPI

    2024-07-12 13:40:01       20 阅读
  10. OpenCV:解锁计算机视觉的魔法钥匙

    2024-07-12 13:40:01       19 阅读
  11. 使用sklearn的基本流程

    2024-07-12 13:40:01       20 阅读
  12. qt udp 只创建服务端链接

    2024-07-12 13:40:01       24 阅读
  13. 开发不认可bug策略

    2024-07-12 13:40:01       22 阅读