首页 文章

将常量值添加到x86中的xmm寄存器

提问于
浏览
3

如何将 12 添加到寄存器 xmm0 (双)?

我可以这样做,但肯定必须有一个更简单的方法:

movsd xmm0, [ecx]

xor eax, eax
inc eax
cvtsi2sd xmm1, eax
addsd xmm0, xmm1

movsd [ecx], xmm0

还可以使用浮点x87指令执行此操作吗?

这对我不起作用:

fld dword ptr [ecx]
fld1
faddp
fstp dword ptr [ecx]

1 回答

  • 9

    您可以在内存或其他寄存器中保持常量:

    _1      dq      1.0
    

    addsd   xmm1,[_1]
    

    要么

    movsd   xmm0,[_1]
    addsd   xmm1,xmm0
    

    如果您使用的是x64,则可以执行以下操作:

    mov     rax,1.0
    movq    xmm0,rax
    addsd   xmm1,xmm0
    

    如果类型不匹配困扰你,请使用堆栈:

    mov     rax,1.0
    push    rax
    movsd   xmm0,[rsp]
    pop     rax
    addsd   xmm1,xmm0
    

    至于x87代码, double s是 qwords ,而不是 dwords .

相关问题