我正在使用支持avx和avx2的最新型号i7 cpu,并且据说virtualbox支持avx和avx2,因此以下代码为什么会挂起?

vmovdqa    ymm0, qqword[testmem]


testmem在其他地方定义为

align 32
testmem:   rb   128


如果我用

movdqa    xmm0, dqword[testmem]


它工作正常。

FASM 1.72,Windows 10,i7-7700hq,VirtualBox 5.2.6

编辑:
这是一个UEFI应用程序(显然可以在64位模式下运行),除非出现上述说明,否则运行良好。

编辑

尝试添加

  mov     rcx, 0
  xgetbv
  or      rax, 0007h
  xsetbv


在代码开始时,但没有帮助。

最佳答案

确定找到了答案。我知道这是一个比较深奥的问题,但以防万一,这可以帮助其他人,例如如何启用AVX

mov rax, cr4
or eax, 0x40000              ; bit 18 for oxsave bit
mov cr4, rax

xor     rcx, rcx
xgetbv
or      rax, 6
xsetbv


我所缺少的是将CR4寄存器的第18位设置为启用OSXSAVE,这是启用AVX之前的要求。

08-16 10:20