MASM-Anweisungsformat
Syntax
Anweisungen werden gemäß dieser Syntax im Quellcode geschrieben:
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üsselwörter voranstellen, die Optionen für die Codierung der Anweisung festlegen. Die REP
Schlüsselwörter , REPE
, , REPZ
und REPNZ
REPNE
Schlüsselwörter werden mit Zeichenfolgenanweisungen verwendet, um memcpy
Vorgänge in einer einzigen Anweisung auszuführen oder strlen
zu verwenden. Das LOCK
Schlüsselwort macht bestimmte Vorgänge für Speicheropernden atomar. Sie können es mit den XACQUIRE
Schlüsselwörtern XRELEASE
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 übrigen 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üsselwörter 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 ein explizites Präfixschlüsselwort 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 VEX2
Optionen und Optionen VEX3
VEX
EVEX
sind in Visual Studio 2019, Version 16.7 und höher, verfügbar.
Schlüsselwort | Verbrauch |
---|---|
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. |
Mnemonisch
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üsselworts 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