Assembly XSAVE在VS 2017中导致未处理的异常

Assembly XSAVE在VS 2017中导致未处理的异常,assembly,x86,Assembly,X86,此代码在Intel 4770K(支持AVX2和XSAVE集)上运行。环境为MASM(VS 2017) 欢迎就这种用法中的错误提出任何建议。如果EDX:EAX中的所有位都设置为1,它也会失败 xsave qword ptr xsave_space_ptr 与xsave_space_ptr中包含的值无关,您在这里的xsave位置是xsave_space_ptr本身xsave(像任何写入内存的典型指令一样)写入给定的地址,它不会从给定的地址读取指针,然后写入指针指向的任何地方,这段代码似乎假设了这

此代码在Intel 4770K(支持AVX2和XSAVE集)上运行。环境为MASM(VS 2017)

欢迎就这种用法中的错误提出任何建议。如果EDX:EAX中的所有位都设置为1,它也会失败

xsave  qword ptr xsave_space_ptr
xsave_space_ptr
中包含的值无关,您在这里的
xsave
位置是
xsave_space_ptr
本身
xsave
(像任何写入内存的典型指令一样)写入给定的地址,它不会从给定的地址读取指针,然后写入指针指向的任何地方,这段代码似乎假设了这一点。因此,它在这里写入的地址可能不是64对齐的(为什么会是64对齐的,除非是巧合),这将导致异常。看起来您打算这样做:

xsave [rsp]
xsave_space_ptr
中包含的值无关,您在这里的
xsave
位置是
xsave_space_ptr
本身
xsave
(像任何写入内存的典型指令一样)写入给定的地址,它不会从给定的地址读取指针,然后写入指针指向的任何地方,这段代码似乎假设了这一点。因此,它在这里写入的地址可能不是64对齐的(为什么会是64对齐的,除非是巧合),这将导致异常。看起来您打算这样做:

xsave [rsp]

我不太明白为什么你会假设它从XSAVE位置读取指针,然后写入该指针地址——不确定你为什么会产生这种印象。是的,它只是执行xsave[rsp],但是xsave需要一个mem dest操作数,而不是reg dest操作数。var xsave_save_reg只是RSP@quasar66因为您将一些指针存储在内存中,然后给
xsave
指针的地址。但是,
xsave
不是这样工作的(据我所知,没有任何功能),它只是直接写入您给它的任何地址,即
xsave_space_ptr
,而不是保存在那里的地址。所以,为了做
xsave[rsp]
,你只需写
xsave[rsp]
[rsp]
是一个“mem操作数”,这很好。我不太明白为什么你会假设它从xsave位置读取指针,然后写入该指针地址-不确定你为什么会产生这种印象。是的,它只是执行xsave[rsp],但是xsave需要一个mem dest操作数,而不是reg dest操作数。var xsave_save_reg只是RSP@quasar66因为您将一些指针存储在内存中,然后给
xsave
指针的地址。但是,
xsave
不是这样工作的(据我所知,没有任何功能),它只是直接写入您给它的任何地址,即
xsave_space_ptr
,而不是保存在那里的地址。因此,为了执行
xsave[rsp]
,只需编写
xsave[rsp]
[rsp]
是一个“mem操作数”,这样就可以了。