MASM 指令格式
語法
指示會根據下列語法以原始程式碼撰寫:
如需指令定義、選項和編碼的詳細資訊,請參閱 處理器製造商程序設計手冊。 Microsoft宏組譯工具可能不支援某些指示和指示選項。
Prefix
您可以在某些指示前面加上關鍵詞,以設定如何編碼指令的選項。 REP
、 REPE
、 REPZ
REPNE
、 和 REPNZ
關鍵詞會搭配字串指令使用,以在單一指令中執行memcpy
或strlen
種類的作業。 關鍵詞 LOCK
會讓記憶體操作數上的特定作業不可部分完成。 您可以將它與 XACQUIRE
和 XRELEASE
關鍵詞結合,在支援的處理器上執行硬體鎖定 Elision (HLE),在某些情況下允許更大的交易平行處理原則。
其餘前置詞會控制AVX指令的編碼方式。 AVX 指令會使用 VEX
前置詞進行編碼,其會出現在 opcode 之前。 它會取代特定位元組指令前置詞和opcode前置位元組。 許多AVX指令也是AVX-512指令,這些指示是使用 EVEX
支援 更多選項的前置詞進行編碼。 MASM 會嘗試盡可能精簡地編碼指令,但這些關鍵詞允許更充分地控制要搭配特定指令使用的編碼方式。 它們也會用來強制產生對應AVX-512指令之後引進的AVX指令表單。 例如, vex vpdpbusd
指定指示的 VPDPBUSD
AVX-VNNI形式,而不是AVX512-VNNI表單。 當 AVX 指令沒有明確的前置詞關鍵詞出現時,選擇的編碼取決於目前的 AVX 編碼設定。 指示 OPTION AVXENCODING
詞可讓您變更此設定。
VEX2
、VEX3
、 VEX
和 EVEX
選項可在 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 指令。 |
記憶
助記鍵會識別特定指令,該指令會決定允許的前置詞和操作數模式。
操作數清單
大部分的指令都會使用操作數清單來指定指令的明確來源和目的地操作數。 操作數清單可能包含記憶體參考、緩存器和常數值。 每個指令只允許特定類型的操作數出現在操作數清單中的每個位置。 除了 MOVS
和 CMPS
指令之外,只有其中一個操作數可能是記憶體參考;所有其他操作數都必須是緩存參考或常數。
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 |
隱藏所有例外狀況(不需要四捨五入)。 |