此代码在Intel 4770K(支持AVX2和XSAVE设置)上运行。环境是MASM(在VS 2017中)。
and rsp,-40H ; aligns stack to 64 byte
sub rsp,2000H ; creates enough space to write out the XSAVE
mov qword ptr xsave_space_ptr, rsp
xor rcx,rcx ; XCR(0)
xgetbv ; returns RAX:7,RDX:0
mov rax,7
mov rdx,0
xsave qword ptr xsave_space_ptr ; this is where the VS 2017 crashes.
欢迎任何关于此用法不正确的建议。如果EDX:EAX中的所有位都设置为1,它也会失败。
答案 0 :(得分:6)
xsave qword ptr xsave_space_ptr
与xsave_space_ptr
中包含的值无关,您xsave
所在的位置是xsave_space_ptr
本身。 xsave
(就像写入内存的任何典型指令一样)写入给定的地址,它不会从给定的地址读取指针,然后写入指针指向的任何地方,这段代码似乎是假设。因此,它写入此处的地址可能不会是64对齐的(为什么会这样,除了巧合)会导致异常。看起来你打算这样做:
xsave [rsp]