MASM 指令格式

语法

按照以下语法在源代码中编写指令:

prefix mnemonic operand-list

有关指令定义、选项和编码的信息,请参阅处理器制造商编程手册。 Microsoft 宏汇编程序可能不支持某些指令和指令选项。

前缀

可以使用设置有关如何编码指令的选项的关键字为一些指令添加前缀。 REPREPEREPZREPNEREPNZ 关键字与字符串指令一起使用,在单个指令中执行 memcpystrlen 类型的操作。 LOCK 关键字以原子方式对内存操作数执行某些操作。 你可以将其与 XACQUIREXRELEASE 关键字组合在一起,对受支持的处理器执行硬件锁省略 (HLE) 操作,这在某些情况下允许更大的事务并行度。

其余前缀控制 AVX 指令的编码方式。 使用 VEX 前缀对 AVX 指令进行编码,该前缀显示在操作码之前。 它取代某些字节指令前缀和操作码前导字节。 许多 AVX 指令也是 AVX-512 指令,我们使用支持更多选项EVEX 前缀对这些指令进行编码。 MASM 尝试尽可能紧凑地对指令进行编码,但使用这些关键字,你可以更好地控制要与特定指令一起使用的编码。 它们还用于强制生成在相应的 AVX-512 指令后引入的 AVX 指令形式。 例如,vex vpdpbusd 指定 VPDPBUSD 指令的 AVX-VNNI 形式,而不是 AVX512-VNNI 形式。 在没有显式前缀关键字的情况下出现 AVX 指令时,选择的编码取决于当前的 AVX 编码设置。 OPTION AVXENCODING 指令允许你更改此设置。

VEX2VEX3VEXEVEX 选项在 Visual Studio 2019 版本 16.7 及更高版本中可用。

关键字 使用情况
REP 按 (E)CX 中的计数重复字符串操作。
REPE
REPZ
在比较相等时重复字符串操作,它受 (E)CX 中的计数限制。
REPNE
REPNZ
在比较不相等时重复字符串操作,它受 (E)CX 中的计数限制。
LOCK 以原子方式对内存操作数执行操作。
XACQUIRE 开始 HLE 事务,它最常与 LOCK 前缀一起使用。
XRELEASE 完成 HLE 事务,它最常与 LOCK 前缀一起使用。
VEX 使用 VEX 前缀对 AVX 指令进行编码。
VEX2 使用 2 字节 VEX 前缀对 AVX 指令进行编码。
VEX3 使用 3 字节 VEX 前缀对 AVX 指令进行编码。
EVEX 使用 EVEX 前缀对 AVX 指令进行编码。

助记键

助记键标识特定指令,该指令确定允许的前缀和操作数模式。

操作数列表

大多数指令使用操作数列表来指定指令的显式源操作数和目标操作数。 操作数列表可能包含内存引用、寄存器和常量值。 每个指令只允许某些类型的操作数出现在操作数列表中的每个位置。 除 MOVSCMPS 指令外,只有一个操作数可以是内存引用;所有其他操作数都必须是寄存器引用或常量。

AVX-512 选项

某些 AVX-512 指令允许指定更多选项。 这些选项包括:掩码、零掩码、嵌入式广播、嵌入式舍入和异常抑制。

掩码允许仅将操作应用于矢量的选定元素。 通过将 {k1}{k7} 中的掩码寄存器放置在目标操作数之后来控制此选项。 如果掩码寄存器后跟 {z},则目标的所有非选定元素都设置为零。 这种替代方法称为零掩码

嵌入式广播允许将内存中的标量值应用于矢量的所有元素。 通过将元素大小和关键字 BCST 添加到内存操作数来启用此选项,这类似于对普通内存引用使用 PTR

嵌入式舍入控制单个浮点指令的舍入模式,无需设置和重置全局舍入模式。 按照指令操作,将舍入模式置于大括号中,这样就可以启用它。 启用后,它还会禁止显示所有异常(仅针对该指令)。 不舍入的浮点指令也可以使用类似的选项禁止显示所有异常。

  ; Examples of AVX-512 options
  vaddps xmm1 {k1}, xmm2, xmm3            ; merge-masking
  vsubps ymm0 {k4}{z}, ymm1, ymm2         ; zero-masking
  vmulps zmm0, zmm1, dword bcst scalar    ; embedded broadcast
  vdivps zmm0, zmm1, zmm2 {rz-sae}        ; embedded rounding
  vmaxss xmm1, xmm2, xmm3 {sae}           ; suppress all exceptions

舍入模式

模型 效果
rn-sae 舍入到最近的整数,偶数优先,禁止显示所有异常。
rz-sae 输入到零,禁止显示所有异常。
rd-sae 向下舍入(舍入到负无穷大),禁止显示所有异常。
ru-sae 向上舍入(舍入到正无穷大),禁止显示所有异常。
sae 禁止显示所有异常(不需要舍入)。

另请参阅

Microsoft 宏汇编程序参考
处理器制造商编程手册