Format instrukcji MASM
Składnia
Instrukcje są zapisywane w kodzie źródłowym zgodnie z tą składnią:
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 REP
kluczowe , REPE
, REPZ
, REPNE
i 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
, VEX
i 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