使用当前序言偏移为指定 XMM 寄存器和偏移生成 UWOP_SAVE_XMM128 或 UWOP_SAVE_XMM128_FAR 展开代码条目。 Microsoft汇编程序(MASM)选择最有效的编码。
语法
.SAVEXMM128xmmreg , 偏移量
注解
用于.SAVEXMM128ml64.exe指定帧函数展开的方式。 只能在序幕中使用,该序幕从 PROCFRAME 声明扩展到 .ENDPROLOG 指令。 这些指令生成展开元数据(.xdata 和 .pdata 节),但不生成可执行代码。 先 .SAVEXMM128 于实际实现要撤消的操作的说明。 为了确保协议,请包装展开指令及其要在宏中展开的代码。
偏移量必须是 16 的倍数。
展开版本 3 行为
Important
展开版本 3 支持是实验性的,可能会更改。 使用 ml64.exe /unwindv3.
在展开版本 3 中, .SAVEXMM128 发出一个 WOD_SAVE_XMM128 或一个 WOD_SAVE_XMM128_FAR 展开代码条目。 Microsoft汇编程序(MASM)根据
| 展开代码 | 条件 |
|---|---|
WOD_SAVE_XMM128 |
偏移 量可以编码为缩放的 16 位值 |
WOD_SAVE_XMM128_FAR |
偏移 需要完整的 32 位值 |
注释
在展开版本 1 中,指令位于指令之后。 在展开版本 3 中,指令位于指令之前。
.SAVEXMM128 必须显示在它描述的说明 之前 。 此要求与版本 1 相反,其中指令遵循指令。
展开 v3 的示例
; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
.allocstack 030h
sub rsp, 030h
.savexmm128 xmm6, 0
movdqa [rsp], xmm6
.savexmm128 xmm7, 010h
movdqa [rsp+010h], xmm7
.endprolog
; rest of function ...
movdqa xmm7, [rsp+010h]
movdqa xmm6, [rsp]
add rsp, 030h
ret
Example1 ENDP
_text ENDS
END
尾声对应项 。RESTOREXMM128。