MASM-Anweisungsformat

Syntax

Anweisungen werden gemäß dieser Syntax im Quellcode geschrieben:

präfixmnemonicoperand-list

Informationen zu Anleitungsdefinitionen, Optionen und Codierung finden Sie in den Programmierhandbüchern des Prozessorherstellers. Einige Anweisungen und Anleitungsoptionen werden möglicherweise nicht vom Microsoft-Makroassembler unterstützt.

Präfix

Sie können einigen Anweisungen Schlüsselwort (keyword) voranstellen, die Optionen für die Codierung der Anweisung festlegen. Die REP, REPE, REPZ, , REPNEund REPNZ Schlüsselwort (keyword)s werden mit Zeichenfolgenanweisungen verwendet, um memcpy Vorgänge in einer einzigen Anweisung oder strlen Arten von Vorgängen auszuführen. Die LOCK Schlüsselwort (keyword) macht bestimmte Vorgänge an Speicheropernden atomar. Sie können es mit den XACQUIRE und XRELEASE Schlüsselwort (keyword) kombinieren, um Hardware Lock Elision (HLE) auf unterstützten Prozessoren durchzuführen, was in bestimmten Fällen eine größere transaktionsbasierte Parallelität zulässt.

Die Standard Neu-Präfixe steuern, wie AVX-Anweisungen codiert werden. AVX-Anweisungen werden mit einem VEX Präfix codiert, das vor dem Opcode angezeigt wird. Es erfolgt an der Stelle bestimmter Byte-Anweisungspräfixe und opcode lead-in Bytes. Viele AVX-Anweisungen sind auch AVX-512-Anweisungen, die mit einem EVEX Präfix codiert werden, das weitere Optionen unterstützt. MASM versucht, Anweisungen so kompakt wie möglich zu codieren, aber diese Schlüsselwort (keyword) ermöglichen mehr Kontrolle darüber, welche Codierung mit einer bestimmten Anweisung verwendet werden soll. Sie werden auch verwendet, um die Generierung von AVX-Anweisungsformularen zu erzwingen, die nach der entsprechenden AVX-512-Anweisung eingeführt wurden. Gibt beispielsweise vex vpdpbusd die AVX-VNNI-Form der VPDPBUSD Anweisungen anstelle des AVX512-VNNI-Formulars an. Wenn eine AVX-Anweisung ohne explizites Präfix Schlüsselwort (keyword) angezeigt wird, hängt die gewählte Codierung von der aktuellen AVX-Codierungseinstellung ab. Mit OPTION AVXENCODING der Direktive können Sie diese Einstellung ändern.

Die VEX2Optionen und Optionen VEX3VEXEVEX sind in Visual Studio 2019, Version 16.7 und höher, verfügbar.

Stichwort Verwendung
REP Wiederholen Sie den Zeichenfolgenvorgang durch die Anzahl in (E)CX.
REPE
REPZ
Wiederholen Sie den Zeichenfolgenvorgang, während der Vergleich gleich ist, begrenzt durch die Anzahl in (E)CX.
REPNE
REPNZ
Wiederholen Sie den Zeichenfolgenvorgang, während der Vergleich nicht gleich ist, begrenzt durch die Anzahl in (E)CX.
LOCK Führen Sie den Vorgang atomar auf einem Speicheropernden aus.
XACQUIRE Beginnen Sie eine HLE-Transaktion, die am häufigsten mit LOCK präfix verwendet wird.
XRELEASE Abschließen einer HLE-Transaktion, die am häufigsten mit LOCK Präfix verwendet wird.
VEX Codieren Sie eine AVX-Anweisung mithilfe eines VEX Präfixes.
VEX2 Codieren Sie eine AVX-Anweisung mithilfe eines 2-Byte-Präfixes VEX .
VEX3 Codieren Sie eine AVX-Anweisung mithilfe eines 3-Byte-Präfixes VEX .
EVEX Codieren Sie eine AVX-Anweisung mithilfe eines EVEX Präfixes.

Mnemonische

Das Mnemonic identifiziert eine bestimmte Anweisung, die die zulässigen Präfixe und Operandenmuster bestimmt.

Operandenliste

Die meisten Anweisungen verwenden eine Operandenliste, um die expliziten Quell- und Zielopernden für die Anweisung anzugeben. Die Operandenliste kann Speicherverweise, Register und Konstantenwerte enthalten. Jede Anweisung ermöglicht nur bestimmte Operandentypen, die an jeder Position in der Operandenliste angezeigt werden. Mit Ausnahme der MOVS Anweisungen CMPS kann nur einer der Operanden ein Speicherverweis sein. Alle anderen Operanden müssen Verweise oder Konstanten registrieren.

AVX-512-Optionen

Einige AVX-512-Anweisungen ermöglichen die Angabe weiterer Optionen. Diese Optionen sind: Maskieren, Nullmasken, eingebettete Übertragung, eingebettete Rundung und Ausnahmeunterdrückung.

Mit der Maskierung kann ein Vorgang nur auf ausgewählte Elemente eines Vektors angewendet werden. Diese Option wird gesteuert, indem ein Maskenregister von {k1} bis nach {k7} dem Zielopernden platziert wird. Wenn auf das Maskenregister folgt {z}, werden alle nicht ausgewählten Elemente des Ziels auf Null festgelegt. Diese Alternative wird als Nullmaske bezeichnet.

Embedded Broadcast ermöglicht es, einen skalaren Wert im Arbeitsspeicher auf alle Elemente eines Vektors anzuwenden. Diese Option ist durch Hinzufügen der Elementgröße und des Schlüsselwort (keyword) BCST zum Speicheropernden aktiviert, der der Verwendung für PTR normale Speicherverweise ähnelt.

Eingebettetes Runden steuert den Rundungsmodus für eine einzelne Gleitkommaanweisung, ohne den globalen Rundungsmodus festlegen und zurücksetzen zu müssen. Sie ist aktiviert, indem Sie die Anweisung mit dem in geschweiften Klammern eingeschlossenen Rundungsmodus ausführen. Wenn diese Option aktiviert ist, werden auch alle Ausnahmen nur für diese Anweisung unterdrückt. Gleitkommaanweisungen, die nicht runden, können auch alle Ausnahmen mithilfe einer ähnlichen Option unterdrücken.

  ; 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

Rundungsmodi

Mode Effekt
rn-sae Rundet auf die nächste, Bindungen mit geraden, unterdrücken alle Ausnahmen.
rz-sae Auf Null runden, alle Ausnahmen unterdrücken.
rd-sae Aufrunden (in Richtung negativer Unendlichkeit) unterdrücken sie alle Ausnahmen.
ru-sae Aufrunden (in Richtung positiver Unendlichkeit) unterdrücken Sie alle Ausnahmen.
sae Alle Ausnahmen unterdrücken (keine Rundung erforderlich).

Siehe auch

Referenz zum Microsoft-Makroassembler
Programmierungshandbücher von Prozessorherstellern