如何将浮点常量值移动到xmm寄存器中?

时间:2017-12-22 19:21:47

标签: assembly x86 sse

是将值移入xmm寄存器的唯一方法是首先将值移入整数寄存器,不知道它们被称为什么,然后进入xmm寄存器,例如。

mov   [eax], (float)1000   ; store to memory
movss xmm1,[eax]           ; reload

mov        eax,  1000       ; move-immediate integer
cvtsi2ss   xmm1,eax         ; and convert

还是有另一种方式?有没有办法直接将值移动到xmm寄存器中,类似于:movss xmm1,(float)1000

2 个答案:

答案 0 :(得分:4)

没有指令用立即加载SSE寄存器。常用的习惯用法是从全局常量中加载所需的值:

const   dd 1000.0

...

        movss xmm0,[const]

答案 1 :(得分:1)

这取决于汇编程序。

UASM:

LOADSS xmm1,1000.0

ASMC、FASM、POASM、JWasm:

mov eax,1000.0
movd xmm1,eax

NASM:

mov eax,__?float32?__(1000.0)
movd xmm1,eax

MASM、YASM、Sol_Asm:

mov eax,447A0000h
movd xmm1,eax

您还可以使用在数据部分创建常量的宏。 UASM 已经有一个内置宏 FP4:

movss xmm1,FP4(1000.0)

如果你使用 ASMC、POASM、JWasm 或 MASM,你可以定义这个宏:

FP4 MACRO value
 LOCAL vname
 .const
 align 4
 vname REAL4 value
 .code
 EXITM <vname>
ENDM