是将值移入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
?
答案 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