如何将值从rax传递到xmm寄存器

时间:2013-06-06 23:26:35

标签: assembly sse

我想将%rax或内存中的值传递给%xmm0,这个值应该是两倍,所以我可以稍后将%xmm0乘以......

目前即时使用:

movq    $1, -72(%rbp)
movq    -72(%rbp), %rax
movsd   -72(%rbp), %xmm0  # 1 should be
movsd   -8(%rbp), %xmm1   # 5
mulss   %xmm0, %xmm1      # 5 shoud be

但是在%mm0(双倍)下我得到0,而不是1.当我乘以它时返回0 ...... :(

xmm0           {
  v4_float = {0x0, 0x0, 0x0, 0x0}, 
  v2_double = {0x0, 0x0}, 
  v16_int8 = {0x1, 0x0 <repeats 15 times>}, 
  v8_int16 = {0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, 
  v4_int32 = {0x1, 0x0, 0x0, 0x0}, 
  v2_int64 = {0x1, 0x0}, 
  uint128 = 0x00000000000000000000000000000001
}

如何将整数传递给xmm0?或者如何将xmm1乘以/除以-72(%rbp),这样返回是否正确?

AT&amp; T,linux,64b。

编辑:我读过关于PINSRW但不知道如何使用它。

1 个答案:

答案 0 :(得分:1)

(推定)问题:

movq $1, -72(%rbp)将整数值1移动到内存中,当表示为浮点数时,内存非常小。当您将'x'乘以此数字时,结果非常小,以至于它舍入为0。

潜在解决方案:

  • 将浮动点立即值1.0f移动到内存中,而不是1.我无法确切地知道如何执行此操作,因为我不知道您正在使用的汇编程序。

    < / LI>
  • 像Brett Hale所说,将整数转换为浮点数。可能有一百万种方法可以做到这一点,所以Google就像“SSE Integer to Float”,你会得到很多结果。