此代码在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.
Run Code Online (Sandbox Code Playgroud)
欢迎任何有关此用法不正确的建议.如果EDX:EAX中的所有位都设置为1,它也会失败.
xsave qword ptr xsave_space_ptr
Run Code Online (Sandbox Code Playgroud)
与包含的价值无关xsave_space_ptr
,您在xsave
这里所处的位置xsave_space_ptr
本身就是这样.xsave
(就像写入存储器的任何典型指令一样)写入给定的地址,它不会从给定的地址读取指针,然后写入指针指向的任何地方,这段代码似乎假设.因此,它写入此处的地址可能不会是64对齐的(为什么会这样,除了巧合)会导致异常.看起来你打算这样做:
xsave [rsp]
Run Code Online (Sandbox Code Playgroud)