Udostępnij za pośrednictwem


Format instrukcji MASM

Składnia

Instrukcje są zapisywane w kodzie źródłowym zgodnie z tą składnią:

prefiksmnemonicoperand-list

Aby uzyskać informacje na temat definicji instrukcji, opcji i kodowania, zobacz Podręczniki programowania producenta procesora. Niektóre instrukcje i opcje instrukcji mogą nie być obsługiwane przez program Microsoft Macro Assembler.

Prefiks

Niektóre instrukcje można prefiksować za pomocą słów kluczowych, które ustawiają opcje kodowania instrukcji. Słowa REPkluczowe , REPE, REPZ, REPNEi REPNZ są używane z instrukcjami ciągu do wykonywania memcpy operacji lub strlen rodzajów operacji w jednej instrukcji. Słowo kluczowe sprawia, LOCK że niektóre operacje na operandach pamięci są niepodzielne. Można połączyć je ze słowami XACQUIRE kluczowymi i XRELEASE , aby wykonać funkcję Hardware Lock Elision (HLE) na obsługiwanych procesorach, co umożliwia większą równoległość transakcyjną w niektórych przypadkach.

Pozostałe prefiksy kontrolują sposób kodowania instrukcji AVX. Instrukcje AVX są kodowane przy użyciu VEX prefiksu, który pojawia się przed kodem opcode. Odbywa się to zamiast niektórych prefiksów instrukcji bajtów i bajtów potencjalnych klientów kodu operacji. Wiele instrukcji AVX jest również instrukcjami AVX-512, które są kodowane przy użyciu prefiksu EVEX , który obsługuje więcej opcji. MASM próbuje kodować instrukcje tak zwarte, jak to możliwe, ale te słowa kluczowe umożliwiają większą kontrolę nad tym, które kodowanie ma być używane z określoną instrukcją. Są one również używane do wymuszania generowania formularzy instrukcji AVX, które zostały wprowadzone po odpowiedniej instrukcji AVX-512. Na przykład vex vpdpbusd określa formę VPDPBUSD AVX-VNNI instrukcji zamiast formularza AVX512-VNNI. Gdy instrukcja AVX pojawi się bez jawnego słowa kluczowego prefiksu, wybrane kodowanie zależy od bieżącego ustawienia kodowania AVX. Dyrektywa OPTION AVXENCODING umożliwia zmianę tego ustawienia.

Opcje VEX2, VEX3, VEXi EVEX są dostępne w programie Visual Studio 2019 w wersji 16.7 lub nowszej.

Słowo kluczowe Użycie
REP Powtórz operację ciągu według liczby w (E)CX.
REPE
REPZ
Powtórz operację ciągu, gdy porównanie jest równe, ograniczone przez liczbę w (E)CX.
REPNE
REPNZ
Powtórz operację ciągu, podczas gdy porównanie nie jest równe, ograniczone przez liczbę w (E)CX.
LOCK Wykonaj operację niepodzieal na operandie pamięci.
XACQUIRE Rozpocznij transakcję HLE, najczęściej używaną z prefiksem LOCK .
XRELEASE Ukończ transakcję HLE, najczęściej używaną z prefiksem LOCK .
VEX Kodowanie instrukcji AVX przy użyciu prefiksu VEX .
VEX2 Kodowanie instrukcji AVX przy użyciu prefiksu 2-bajtowego VEX .
VEX3 Kodowanie instrukcji AVX przy użyciu prefiksu 3-bajtowego VEX .
EVEX Kodowanie instrukcji AVX przy użyciu prefiksu EVEX .

Mnemoniczny

Mnemonic identyfikuje określoną instrukcję, która określa prefiksy i wzorce operandów, które są dozwolone.

Lista operandów

Większość instrukcji używa listy operandów, aby określić jawne operandy źródłowe i docelowe do instrukcji. Lista operandów może zawierać odwołania do pamięci, rejestry i wartości stałe. Każda instrukcja umożliwia wyświetlanie tylko niektórych typów operandów na każdej pozycji na liście operandów. MOVS Z wyjątkiem instrukcji iCMPS, tylko jeden z operandów może być odwołaniem do pamięci; wszystkie inne operandy muszą być rejestrowane odwołania lub stałe.

Opcje AVX-512

Niektóre instrukcje AVX-512 umożliwiają określenie większej liczby opcji. Te opcje to: maskowanie, maskowanie zerowe, emisja osadzona, osadzone zaokrąglanie i pomijanie wyjątków.

Maskowanie umożliwia zastosowanie operacji tylko do wybranych elementów wektora. Ta opcja jest kontrolowana przez umieszczenie rejestru maski z {k1} do {k7} po operand docelowy. Jeśli po {z}rejestrze maski następuje , wszystkie nie wybrane elementy miejsca docelowego są ustawione na zero. Ta alternatywa jest znana jako maskowanie zerowe.

Emisja osadzona umożliwia zastosowanie wartości skalarnej w pamięci do wszystkich elementów wektora. Ta opcja jest włączona przez dodanie rozmiaru elementu i słowa kluczowego BCST do operandu pamięci, który jest podobny do użycia PTR w przypadku odwołań do pamięci normalnej.

Osadzone zaokrąglanie steruje trybem zaokrąglania dla poszczególnych instrukcji zmiennoprzecinkowych bez konieczności ustawiania i resetowania trybu zaokrąglania globalnego. Jest on włączony, postępując zgodnie z instrukcją z trybem zaokrąglania ujętym w nawiasy klamrowe. Po włączeniu pomija również wszystkie wyjątki tylko dla tej instrukcji. Instrukcje zmiennoprzecinkowe, które nie są zaokrąglone, mogą również pomijać wszystkie wyjątki przy użyciu podobnej opcji.

  ; 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

Tryby zaokrąglania

Tryb Efekt
rn-sae Zaokrąglaj do najbliższej, wiązania do parzystych, pomijaj wszystkie wyjątki.
rz-sae Zaokrąglij w kierunku zera, pomiń wszystkie wyjątki.
rd-sae Zaokrąglaj w dół (w kierunku nieskończoności ujemnej), pomiń wszystkie wyjątki.
ru-sae Zaokrąglaj w górę (w kierunku nieskończoności dodatniej), pomiń wszystkie wyjątki.
sae Pomiń wszystkie wyjątki (nie jest wymagane zaokrąglanie).

Zobacz też

Microsoft Macro Assembler — dokumentacja
Podręczniki programowania od producenta procesora