assembly - vmovdqa 无法在 virtualbox 中工作?

标签 assembly virtualbox x86-64 avx

我使用的是支持 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 之前的要求。

关于assembly - vmovdqa 无法在 virtualbox 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48614808/

相关文章:

assembly - 8086微处理器的堆栈溢出

c++ - 移动文本模式光标不起作用

assembly - 英特尔架构和 IEEE 754 合规性(minNum 和 maxNum)?

assembly - 学习低级计算机的好书

macos - 由于 MacOS Catalina beta 更新,Vagrant 无法安装 NFS

windows - 无法从 Windows 10 上的主机访问 vagrant box

virtual-machine - 虚拟盒子错误 "Non existent network interface"

c - x86_64 上的原子 16 字节操作

c++ - GCC 代码生成器:pthread_create_key() 与 std::shared_ptr 复制有什么关系?

linker - R_X86_64_IRELATIV 是什么意思?