【汇编】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

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值