1 Rozkazy podstawowe 1.1 Rozkazy przeniesienia MOV Przeniesienie między rejestrami CMOVE/CMOVZ Przeniesienie pod warunkiem równy/zero CMOVNE/CMOVNZ Przeniesienie pod warunkiem różny/nie zero CMOVA/CMOVNBE Przeniesienie pod warunkiem większy/nie (mniejszy lub równy) CMOVAE/CMOVNB Przeniesienie pod warunkiem większy bądz równy/nie mniejszy CMOVB/CMOVNAE Przeniesienie pod warunkiem mniejszy/nie (większy lub równy) CMOVBE/CMOVNA Przeniesienie pod warunkiem mniejszy lub równy/nie większy CMOVG/CMOVNLE Przeniesienie pod warunkiem większy/nie (mniejszy lub równy) CMOVGE/CMOVNL Przeniesienie pod warunkiem większy lub równy/nie mniejszy CMOVL/CMOVNGE Przeniesienie pod warunkiem mniejszy/nie (większy lub równy) CMOVLE/CMOVNG Przeniesienie pod warunkiem mniejszy/nie większy CMOVC Przeniesienie pod warunkiem przeniesienia CMOVNC Przeniesienie pod warunkiem braku przeniesienia CMOVO Przeniesienie pod warunkiem przeciążenia CMOVNO Przeniesienie pod warunkiem braku przeciążenia CMOVS Przeniesienie pod warunkiem ujemny CMOVNS Przeniesienie pod warunkiem nie ujemny CMOVP/CMOVPE Przeniesienie pod warunkiem parzysty/parzysty lub równy CMOVNP/CMOVPO Przeniesienie pod warunkiem nieparzystości/kontroli parzystości XCHG Zamień BSWAP Zamień ważniejsze 16 bitów rejestru ze mniej znaczącymi XADD Zamień i dodaj CMPXCHG Porównaj i zamień CMPXCHG8B Porównaj i zamień 8 bitów PUSH Dodaj na stos POP Pobierz ze stosu PUSHA/PUSHAD Dodaj na stos wszystkie rejestry POPA/POPAD Pobierz ze stosu wszystkie rejestry CWD/CDQ Zamień word na doubleword/doubleword na quadword CBW/CWDE Zamień byte na word/word na doubleword w architekturze E MOVSX Kopiuje i rozszerza przeniesienie MOVZX Kopiuje i rozszerza o zero 1.2 Rozkazy matematyczne (dwójkowe) ADD Dodaj ADC Dodaj z przeniesieniem SUB Odejmij SBB Odejmij z pożyczką IMUL Mnożenie ze znakiem MUL Mnożenie bez znaku IDIV Dzielenie ze znakiem DIV Dzielenie bez znaku INC Zwiększ o 1 DEC Zmniejsz o 1 NEG Zaneguj CMP Porównaj 1.3 Rozkazy matematyczne (dziesiętne) DAA Poprawia wynik (w AL) po dodaniu DAS Poprawia wynik (w AL) po odjęciu AAA Zmienia zawartość rejestru AL na właściwą rozpakowaną wartość dziesiętną przy dodawaniu AAS Używane przy odejmowaniu AAM Używane po mnożeniu (AL:=AL/10; AH=0; AAD Używane przed dzieleniem (AH:=10*AH+AL; AL.:=AL. Mod 10) 1.4 Rozkazy logiczne AND Operacja I + wynik w dest OR Operacja LUB + wynik w dest XOR Operacja XOR + wynik w dest (dobre do zerowania) NOT Operacja negacji + wynik w dest 1.5 Rozkazy przesunięcia i obrotu SAR Przesunięcie arytmetyczne w prawo (znak pozostaje ten sam) SHR Przesunięcie w prawo SAL/SHL Przesuń w lewo arytmetycznie/przesuń w lewo SHRD Przesuń w prawo z podwójną precyzją SHLD Przesuń w lewo z podwójną precyją ROR Obróć w prawo (najmłodszy bit leci w miejsce najstarszego) ROL Obróć w lewo (najstarszy bit leci w miejsce najmłodszego) RCR Obróć w prawo z CF (najstarszy z CF; CF z najmłodszego) RCL Obróć w lewo z CF (najmłodszy z CF; CF z najstarszego) 1.6 Rozkazy bit i bajt BT Bit leci do CF (CF=dest[src]) BTS Bit leci do CF i jest ustawiany na 1 (CF=dest[src]; dest[src]=1) BTR Bit leci do CF i jest ustawiany na 0 (CF=dest[src]; dest[src]=0) BTC Zanegowany bit leci do CF (CF=not dest[src]) BSF Szuka bitu = 1 w przód (ZF=1 jeśli znajdzie; do dest nr bitu) BSR Szuka bitu = 1 w tył (ZF=1 jeśli znajdzie; do dest nr bitu) SETE/SETZ Set jeśli równe/zerp SETNE/SETNZ Set jeśli różne SETA/SETNBE Set jeśli większy/nie (mniejszy lub równy) SETAE/SETNB/SETNC (kolejne parametry w 1.1) SETB/SETNAE/SETC (kolejne parametry w 1.1) SETBE/SETNA (kolejne parametry w 1.1) SETG/SETNLE (kolejne parametry w 1.1) SETGE/SETNL (kolejne parametry w 1.1) SETL/SETNGE (kolejne parametry w 1.1) SETLE/SETNG (kolejne parametry w 1.1) SETS (kolejne parametry w 1.1) SETNS (kolejne parametry w 1.1) SETO (kolejne parametry w 1.1) SETNO (kolejne parametry w 1.1) SETPE/SETP (kolejne parametry w 1.1) SETPO/SETNP (kolejne parametry w 1.1) TEST Działa jak AND, ale nie zapisuje wyniku 1.7 Rozkazy skoków JMP Skok bezwarunkowy JE/JZ Skok jeśli równy/zero (ZF=1) JNE/JNZ Skok jeśli różny/nie zero (ZF=0) JA/JNBE (kolejne parametry jak w 1.1) (CF=0 i ZF=0) JAE/JNB (kolejne parametry jak w 1.1) (CF=0) JB/JNAE (kolejne parametry jak w 1.1) (CF=1) JBE/JNA (kolejne parametry jak w 1.1) (CF=1 lub ZF=1) JG/JNLE (kolejne parametry jak w 1.1) (ZF=0 i SF=OF) JGE/JNL (kolejne parametry jak w 1.1) (SF=OF) JL/JNGE (kolejne parametry jak w 1.1) (SF<>OF) JLE/JNG (kolejne parametry jak w 1.1) (ZF=1 lub SF<>OF) JC (kolejne parametry jak w 1.1) (CF=1) JNC (kolejne parametry jak w 1.1) (CF=0) JO (kolejne parametry jak w 1.1) (OF=1) JNO (kolejne parametry jak w 1.1) (OF=0) JS (kolejne parametry jak w 1.1) (SF=1) JNS (kolejne parametry jak w 1.1) (SF=0) JPO/JNP (kolejne parametry jak w 1.1) (PF=0) JPE/JP (kolejne parametry jak w 1.1) (PF=1) JCXZ/JECXZ Skok jeśli CX zero/to samo, architektura E LOOP Pętla z licznikiem w (E)CX LOOPZ/LOOPE Pętla wykonywana do warunku zero/równe z licznikiem LOOPNZ/LOOPNE Pętla wykonywana do warunku nie zero/różme z licznikiem CALL Wywołanie podprogramu RET Powrót IRET Powrót z przerwania INT Przerwanie programowe INTO Przerwanie przez przepełnienie BOUND Sprawdza, czy indeks tablicy podany w src mieści się w przedziale wyznaczanym przez wartości typu (d)word ENTER Przygotowuje stos do wejścia do procedury języka wys. poziomu. LEAVE Zwalnia pamięć zarezerwowaną na stosie dla zmiennych lokalnych utworzoną przez ostatnią instrukcję ENTER 1.8 Rozkazy łańcuchów znaków MOVS/MOVSB Przenieś string/byte string MOVS/MOVSW Przenieś string/word string MOVS/MOVSD Przenieś string/doubleword string CMPS/CMPSB Porównaj string/byte string CMPS/CMPSW Porównaj string/word string CMPS/CMPSD Porównaj string/double string SCAS/SCASB Szukaj w stringu/szukaj byte (w ES:[DI] z AL) SCAS/SCASW Szukaj w stringu/szukaj word (w ES:[DI] z AX) SCAS/SCASD Szukaj w stringu/szukaj double word (w ES:[DI] z EAX) LODS/LODSB Aaduje byte z DS:[SI] do AL LODS/LODSW Aaduje word z DS:[SI] do AX LODS/LODSD Aaduje doubleword z DS:[SI] do EAX STOS/STOSB Zapisuje byte z AL do ES:[DI] STOS/STOSW Zapisuje word z AX do ES:[DI] STOS/STOSD Zapisuje doubleword z EAX do ES:[DI] REP Powtarza, póki (E)AX nie będzie równe zero REPE/REPZ Powtarza, póki równe/zero lub licznik równy zero REPNE/REPNZ Powtarza, póki różny/nie zero lub licznik równy zero 1.9 Rozkazy wejścia/wyjścia IN Pobiera byte, word, doubleword z portu do AL, AX, EAX OUT Wysyła byte, word, doubleword z AL, AX, EAX do portu INS/INSB Pobiera string/byte z portu do AL INS/INSW Pobiera string/word z portu do AX INS/INSD Pobiera string/doubleword z portu do EAX OUTS/OUTSB Wysyła string/byte do portu OUTS/OUTSW Wysyła string/word do portu OUTS/OUTSD Wysyła string/doubleword do portu 1.10 Rozkazy Enter/Leave ENTER Przygotowuje stos do wejścia do procedury języka wys. poziomu. LEAVE Zwalnia pamięć zarezerwowaną na stosie dla zmiennych lokalnych utworzoną przez ostatnią instrukcję ENTER 1.11 Rozkazy kontroli flag (E)FLAGS STC Ustawia CF=1 CLC Ustawia CF=0 CMC Neguje CF (CF=!CF) CLD Ustawia DF=0 (adresy rosnące) STD Ustawia DF=1 (adresy malejące) LAHF Aaduje FLAGS do AH SAHF Pobiera FLAGS do AH PUSHF/PUSHFD Aaduje EFLAGS na stos POPF/POPFD Pobiera EFLAGS ze stosu STI Ustawia IF=1 (włącza obsługę przerwań) CLI Ustawia IF=0 (wyłącza obsługę przerwań) 1.12 Rozkazy rejestru segmentu danych (wskazniki) LDS Aaduje wskaznik do DS (w dest przesunięcie, w DS segment) LES Aaduje wskaznik do ES (w dest przesunięcie, w ES segment) LFS Aaduje wskaznik do FS (w dest przesunięcie, w FS segment) LGS Aaduje wskaznik do GS (w dest przesunięcie, w GS segment) LSS Aaduje wskaznik do SS (w dest przesunięcie, w SS segment) 1.13 Inne rozkazy LEA Przesyła przesunięcie z pod adresu src do rejestru doceloweg NOP Nic nie robi UD2 Wywołuje wyjątek wykonania nieprawidłowej instrukcji przez procesor XLAT/XLATB Wybór z tablicy na podstawie indeksu CPUID Identyfikacja procesora MOVBE Przesuń po zamianie danych 2 Rozkazy koprocesora x87 2.1 Rozkazy przeniesienia FLD Pobierz liczbę rzeczywistą z pamięci FST Zapisz liczbę do pamięci z ST(0) FSTP Zapisz liczbę z ST(0) w pamięci i zdejmij ze stosu FILD Pobierz liczbę całkowitą z pamięci FIST Zapisz ew. obciętą liczbę do pamięci z ST(0) FISTP Zapisz ew. obciętą liczbę do pamięci z ST(0) i zdejmij ze stosu FBLD Aaduje liczbę dziesiętną upakowaną w kodzie BCD FBSTP Zapisuje liczbę dziesiętną upakowaną z ST(0) i usuwa ją ze stosu. FXCH Wymienia wskazany jako parametr rejestr ze ST(0) FCMOVE Przeniesienie pod warunkiem równy FCMOVNE (kolejne parametry w 1.1) FCMOVB (kolejne parametry w 1.1) FCMOVBE (kolejne parametry w 1.1) FCMOVNB (kolejne parametry w 1.1) FCMOVNBE (kolejne parametry w 1.1) FCMOVU Przeniesienie jeżeli nieuporządkowane (PF=1) FCMOVNU Przeniesienie jeżeli uporządkowane (PF=0) 2.2 Rozkazy matematyczne FADD Dodaje liczby zmiennoprzecinkowe FADDP Dodaje liczby zmiennoprzecinkowe i zdejmuje ze stosu ST(0) FIADD Aaduje liczbę całkowitą z pamięci do ST(0) FSUB Odejmuje dwie liczby zmiennoprzecinkowe FSUBP Odejmuje dwie liczby zm.przecinkowe i zdejmuje ze stosu ST(0) FISUB Odejmuje liczbę całkowitą z pamięci od wartości z ST(0) FSUBR Odejmuje odwrotnie dwie liczby zmiennoprzecinkowe FSUBRP Odejmuje odwr. dwie liczby zm.przecinkowe i zdejmuje ze stosu FISUBR Odejmuje wartość w ST(0) od liczby całkowitej w pamięci FMUL Mnoży dwie liczby zmiennoprzecinkowe FMULP Mnoży dwie liczby zmiennoprzecinkowe i zdejmuje ze stosu FIMUL Mnoży wartość w ST(0) przez liczbę całkowitą z pamięci FDIV Dzieli dwie liczby zmiennoprzecinkowe FDIVP Dzieli dwie liczby zmiennoprzecinkowe i zdejmuje ze stosu FIDIV Dzieli wartość w ST(0) przez liczbę całkowitą z pamięci FDIVR Dzieli odwrotnie dwie liczby zmiennoprzecinkowe FDIVRP Dzieli odwrotnie dwie liczby zm.przecinkowe i zdejmuje ze stosu FIDIVR Dzieli liczbę całkowitą w pamięci przez wartość z rejestru ST(0) FPREM Częściowa reszta FPREM1 Częściowa reszta 1 FABS Wartość bezwzględna z wartości w ST(0) FCHS Zmienia znak liczby w ST(0) FRNDINT Zaokrągla wartość w ST(0) do liczby całkowitej FSCALE Skaluje ST(0) przez ST(1), czyli wykonuje: ST(0) <-- ST(0) * 2ZaokrąglijWKierunkuZera(ST(1)). FSQRT Pierwiastek z ST(0) FXTRACT Rozdziela cechę i mantysę 2.3 Rozkazy porównań FCOM Porównuje wartość z ST(0) do danej liczby zmiennoprzecinkowej FCOMP Porównuje ST(0) z liczbą zmiennoprzecinkową i zdejmuje ST(0) ze stosu FCOMPP Porównuje ST(0) i ST(1) i zdejmuje ze stosu oba rejestry FUCOM Nieuporządkowane porównanie ST(0) do wartości zm.przecinkowej FUCOMP Nieuporządkowane porównanie ST(0) do wartości zmiennoprzecinkowej i zdjęcie ze stosu ST(0) FUCOMPP Nieuporządkowane porównanie ST(0) i ST(1) i zdjęcie ze stosu obu rejestrów FICOM Porównuje wartość w ST(0) z liczbą całkowitą FICOMP Porównuje wartość w ST(0) z liczbą całkowitą i zdejmuje ze stosu FCOMI Porównuje ST(0) z ST(i) i ustawia flagi FUCOMI Nieuporządkowane porównanie ST(0) do ST(i) i ustawienie flag CPU FCOMIP Porównuje ST(0) i ST(i), ustawia flagi i zdejmuje ze stosu ST(0) FUCOMIP Nieuporządkowane porównanie ST(0) i ST(i), ustawienie flag CPU i zdjęcie ze stosu ST(0) FTST Porównuje ST(0) do wartości +0.0 FXAM Sprawdza wartość w ST(0) 2.4 Rozkazy matematyki wyższej FSIN Sinus z wartości kąta w ST(0) (wartość w radianach, nie w stopniach) FCOS Cosinus z wartości kąta w ST(0) FSINCOS Sinus(cosinus) z wartości kąta w ST(0) (szybsze) FPTAN Częściowy tangens z wartości kąta w ST(0) FPATAN Częściowy arcus tangens z wartości ST(1)/ST(0) F2XM1 2x - 1 FYL2X y"log (x) 2 FYL2XP1 y"log (x+1) 2 2.5 Rozkazy ładujące stałe FLD1 Aaduje +1.0 FLDZ Aaduje +0.0 FLDPI Aaduje Ą FLDL2E Aaduje log e 2 FLDLN2 Aaduje ln2 FLDL2T Aaduje log 10 2 FLDLG2 Aaduje log2 2.6 Rozkazy kontroli nad FPU (koprocesorem) FINCSTP Inkremntuje wskaznik stosu FDECSTP Dekremntuje wskaznik stosu FFREE Czyści rejestr FINIT Inicjuje FPU FNINIT Inicjuje FPU (bez oczekiwania) FCLEX Zeruje znacznik wyjątków FNCLEX Zeruje znacznik wyjątków (bez oczekiwania) FSTCW Zapisuje słowo kontrolne (control word) FNSTCW Zapisuje słowo kontrolne (control word) (bez oczekiwania) FLDCW Aaduje słowo kontrolne (control word) FSTENV Zachowuje środowisko FNSTENV Zachowuje środowisko (bez oczekiwania) FLDENV Aaduje środowisko FSAVE Zachowuje stan FPU FNSAVE Zachowuje stan FPU (bez oczekiwania) FRSTOR Przywraca wszystkie rejestry FSTSW Zachowuje słowo statusu (status word) FNSTSW Zachowuje słowo statusu (status word) (bez oczekiwania) WAIT/FWAIT Czeka gdy koprocesor jest zajęty FNOP Nic nie robi 3 Rozkazy wspólne dla MMX i koprocesora x87 FXSAVE Zapisuje stan x87 i MMX FXRSTOR Przywraca stan x87 i MMX 4 Rozkazy MMX"! 4.1 Rozkazy przeniesienia MOVD Przenieś doubleword MOVQ Przenieś quadword 4.2 Rozkazy konwersji PACKSSWB Pakuje wordy do byte ze znakiem PACKSSDW Pakuje dwordy do word ze znakiem PACKUSWB Pakuje wordy do byte bez znakiem PUNPCKHBW Pobiera starsze części byte ów PUNPCKHWD Pobiera starsze części word ów PUNPCKHDQ Pobiera starsze części doubleword ów PUNPCKLBW Pobiera młodszee części byte ów PUNPCKLWD Pobiera młodsze części word ów PUNPCKLDQ Pobiera młodsze części doubleword ów 4.3 Rozkazy matematyczne PADDB Dodaje spakowane (byte) PADDW Dodaje spakowane (word) PADDD Dodaje spakowane (doubleword) PADDSB Dodawanie z nasyceniem ze znakiem (byte) PADDSW Dodawanie z nasyceniem ze znakiem (word) PADDUSB Dodawanie z nasyceniem bez znaku (byte) PADDUSW Dodawanie z nasyceniem bez znaku (word) PSUBB Odejmuje spakowane (byte) PSUBW Odejmuje spakowane (word) PSUBD Odejmuje spakowane (doubleword) PSUBSB Odejmowanie z nasyceniem ze znakiem (byte) PSUBSW Odejmowanie z nasyceniem ze znakiem (word) PSUBUSB Odejmowanie z nasyceniem bez znaku (byte) PSUBUSW Odejmowanie z nasyceniem bez znaku (word) PMULHW Mnożenie spakowanych słów bez znaku, zapisanie starszych 16 bitów PMULLW Mnożenie sp. słów bez znaku, zapisanie młodszych 16 bitów PMADDWD mnożenie i dodawanie (do młodszego dworda rejestru docelowego idzie suma iloczynów 2 najmłodszych słów ze sobą i 2 starszych (bity 16-31) słów ze sobą. Do starszego dworda - suma iloczynów 2 słów 32-47 i 2 słów 48-63) 4.4 Rozkazy porównań PCMPEQB Sprawdza czy spakowane są równe (byte) PCMPEQW Sprawdza czy spakowane są równe (word) PCMPEQD Sprawdza czy spakowane są równe (doubleword) PCMPGTB Sprawdza czy spakowane są większe (byte) PCMPGTW Sprawdza czy spakowane są większe (word) PCMPGTD Sprawdza czy spakowane są większe (doubleword) 4.5 Rozkazy logiczne PAND Bitowy AND PANDN Pierw bitowy NOT pierwszego rejestru, potem bitowy AND z drugim POR Bitowy OR PXOR Bitowy XOR 4.6 Rozkazy przesunięcia PSLLW Przesunięcie spakowanych w lewo (word) PSLLD Przesunięcie spakowanych w lewo (doubleword) PSLLQ Przesunięcie spakowanych w lewo (quadword) PSRLW Przesunięcie spakowanych w prawo (word) PSRLD Przesunięcie spakowanych w prawo (doubleword) PSRLQ Przesunięcie spakowanych w prawo (quadword) PSRAW Przesunięcie spakowanych w prawo, arytmetycznie (word) PSRAD Przesunięcie spakowanych w prawo, arytmetycznie (doubleword) 4.7 Rozkazy stanu rejestrów MMX EMMS Ustawia rejestry FPU jako wolne, umożliwiając ich użycie 5 Rozkazy SSE 5.1 Rozkazy pojedyńczej precyzji dla SIMD 5.1.1 Rozkazy przeniesienia MOVAPS przemieść ułożone (na granicy 16 bajtów) spakowane ułamki pojedynczej precyzji (4 sztuki po 32 bity) MOVUPS przemieść nieułożone MOVHPS Przesłanie 2 liczb zmiennoprzecinkowych pomiędzy rejestrem XMM i pamięcią. Działa na elementach 2 i 3 rejestru XMM. MOVHLPS Przesłanie między rejestrami 64-bitów (2 liczb zm.przecinkowych) 2 i 3 -> 0 i 1 MOVLPS Przesłanie 2 liczb zmiennoprzecinkowych pomiędzy rejestrem XMM i pamięcią. Działa na elementach 0 i 1 rejestru XMM. MOVLHPS Przesłanie między rejestrami 64-bitów (2 liczb zm.przecinkowych) 0 i 1 -> 2 i 3 MOVMSKPS Utworzenie 4-bitowej maski z najstarszych bitów każdej z liczb (tj. z bitów znaku) i zapisanie jej do rejestru ogólnego przeznaczenia MOVSS Przesłanie jednej liczby zmiennoprzecinkowej pomiędzy rejestrem XMM, a pamięcią lub innym rejestrem 5.1.2 Rozkazy matematyczne ADDPS Dodawanie ADDSS Dodawanie (skalar) SUBPS Odejmowanie SUBSS Odejmowanie (skalar) MULPS Mnożenie MULSS Mnożenie (skalar) DIVPS Dzielenie DIVSS Dzielenie (skalar) RCPPS Przybliżenie odwrotności (1/x) RCPSS Przybliżenie odwrotności (1/x) (skalar) SQRTPS Pierwiastek kwadratowy SQRTSS Pierwiastek kwadratowy (skalar) RSQRTPS Przybliżenie odwrotności pierwiastka kwadratowego RSQRTSS Przybliżenie odwrotności pierwiastka kwadratowego (skalar) MAXPS Wyznaczenie minimalnej wartości MAXSS Wyznaczenie minimalnej wartości (skalar) MINPS Wyznaczenie maksymalnej wartości MINSS Wyznaczenie maksymalnej wartości (skalar) 5.1.3 Rozkazy porównań CMPPS Porównaj wartości CMPSS Porównaj wartości (skalar) COMISS Porównaj wartości i ustaw EFLAG UCOMISS Porównaj wartości i ustaw EFLAG (skalar) 5.1.4 Rozkazy logiczne ANDPS Bitowy AND ANDNPS Bitowy AND NOT ORPS Bitowy OR XORPS Bitowy XOR 5.1.5 Rozkazy mieszania i rozpakowania SHUFPS Miesza wartości w paczce UNPCKHPS Rozkazy ustawia na przemian 2 elementy z obu wektorów. (2 i 3) UNPCKLPS Rozkazy ustawia na przemian 2 elementy z obu wektorów. (0 i 1) 5.1.6 Rozkazy konwersji CVTPI2PS Zamienia: parę liczb całkowitych na parę liczb zm.przecinkowych CVTSI2SS Zamienia: liczbę całkowitą na liczbę zmiennoprzecinkową CVTPS2PI Zamienia: parę liczb zm.przecinkowych na parę liczb całkowitych CVTTPS2PI Zamienia: parę liczb zm.przecinkowych na parę liczb całkowitych CVTSS2SI Zamienia: liczbę zmiennoprzecinkową na liczbę całkowitą CVTTSS2SI Zamienia: liczbę zmiennoprzecinkową na liczbę całkowitą 5.2 Rozkazy stanu MXCSR LDMXCSR Aaduj rejestry MXCSR STMXCSR Zapisz stan rejestrów MXCSR 5.3 64-bitowe rozkazy całkowitoliczbowe PAVGB Średnia byte ów bez znaku PAVGW Średnia word ów bez znaku PEXTRW Pobranie dowolnego wektora słowa PINSRW Wstawienie dowolnego wektora słowa PMAXUB Wybranie byte ów bez znaku o maksymalnej wartości PMAXSW Wybranie word ów ze znakiem o maksymalnej wartości PMINUB Wybranie byte ów bez znaku o minimalnej wartości PMINSW Wybranie word ów ze znakiem o minimalnej wartości PMOVMSKB Utworzenie maski bitowej z najstarszych bitów wszystkich bajtów PMULHUW Starsze słowo z wyniku mnożenia słów bez znaku PSADBW Suma modułów różnicy bajtów, czyli odległość w metryce manhattan PSHUFW Rozmieszczenie słów w wektorze 5.4 Rozkazy pamięci podręcznej MASKMOVQ Zapis wybranych bajtów z rejestru MMX MOVNTQ Zapis zawartości rejestru MMX MOVNTPS Zapis zawartości rejestru SSE (XMM) PREFETCHh Wskazówki hierarchii pamięci podręcznej (1 nabliżej, etc.) SFENCE Wymusza synchronizację zapisów 6 Rozkazy SSE2 6.1 Rozkazy dla liczb zmiennoprzecinkowych 6.1.1 Rozkazy przeniesienia MOVAPD Jak dla SSE, ale o podwójnej precyzji (5.1.1) MOVUPD Jak dla SSE, ale o podwójnej precyzji (5.1.1) MOVHPD Jak dla SSE, ale o podwójnej precyzji (5.1.1) MOVLPD Jak dla SSE, ale o podwójnej precyzji (5.1.1) MOVMSKPD Jak dla SSE, ale o podwójnej precyzji (5.1.1) MOVSD Jak dla SSE, ale o podwójnej precyzji (5.1.1) 6.1.2 Rozkazy matematyczne ADDPD Dodaje (podwójna precyzja) ADDSD Dodaje (podwójna precyzja) (skalar) SUBPD Odejmuje (podwójna precyzja) SUBSD Odejmuje (podwójna precyzja) (skalar) MULPD Mnoży (podwójna precyzja) MULSD Mnoży (podwójna precyzja) (skalar) DIVPD Dzieli (podwójna precyzja) DIVSD Dzieli (podwójna precyzja) (skalar) SQRTPD Pierwiastek z liczby (podwójna precyzja) SQRTSD Pierwiastek z liczby (podwójna precyzja) MAXPD Wyznaczenie maksymalnej wartości (podwójna precyzja) MAXSD Wyznaczenie maksymalnej wartości (podwójna precyzja) MINPD Wyznaczenie minimalnej wartości (podwójna precyzja) MINSD Wyznaczenie minimalnej wartości (podwójna precyzja) 6.1.3 Rozkazy logiczne ANDPD Bitowy AND (podwójna precyzja) ANDNPD Bitowy AND NOT (podwójna precyzja) ORPD Bitowy OR (podwójna precyzja) XORPD Bitowy XOR (podwójna precyzja) 6.1.4 Rozkazy porównań CMPPD Porównaj (podwójna precyzja) CMPSD Porównaj (podwójna precyzja) (skalar) COMISD Porównaj i ustaw EFLAG (podwójna precyzja) UCOMISD Porównaj i ustaw EFLAG (podwójna precyzja). 6.1.5 Rozkazy mieszania i rozpakowania SHUFPD Miesza wartości w paczce (podwójna precyzja) UNPCKHPD (podwójna precyzja) UNPCKLPD (podwójna precyzja) 6.1.6 Rozkazy konwersji podwójnej precyzji CVTPD2PI Liczby zmiennoprzecinkowe na 32-bitowe liczby całkowite CVTTPD2PI Liczby zmiennoprzecinkowe na 32-bitowe liczby całkowite CVTPI2PD 32-bitowe liczby całkowite na liczby zmiennoprzecinkowe CVTPD2DQ Liczby zmiennoprzecinkowe na 64-bitowe liczby całkowite CVTTPD2DQ Liczby zmiennoprzecinkowe na 64-bitowe liczby całkowite CVTDQ2PD 64-bitowe liczby całkowite na liczby zmiennoprzecinkowe CVTPS2PD Z pojedynczej na podwójną precyzję CVTPD2PS Z podwójnej na pojedynczą precyzję CVTSS2SD Z pojedynczej na podwójną precyzję (skalar) CVTSD2SS Z podwójnej na pojedynczą precyzję (skalar) CVTSD2SI Liczba zmiennoprzecinkowa na 32-bitową liczbę całkowitą (skalar) CVTTSD2SI Liczba zmiennoprzecinkowa na 32-bitową liczbę całkowitą (skalar) CVTSI2SD 32-bitowa liczba całkowita na liczbę zmiennoprzecinkową (skalar) 6.2 Rozkazy konwersji pojedyńczej precyzji CVTDQ2PS 64-bitowa liczba całkowita na liczbę zmiennoprzecinkową CVTPS2DQ Liczby zmiennoprzecinkowe na 64-bitowe liczby całkowite CVTTPS2DQ Liczby zmiennoprzecinkowe na 64-bitowe liczby całkowite 6.3 Rozkazy dla intigerów SIMD 128-bit MOVDQA Przenosi wyrównany double quadword. MOVDQU Przenosi nie wyrównany double quadword MOVQ2DQ Przenosi quadword z rejestru MMX do XMM MOVDQ2Q Przenosi quadword z rejestru XMM do MMX PMULUDQ Mnoży doubleword bez znaku PADDQ Dodaje quadword PSUBQ Odejmuje quadword PSHUFLW Miesza młodsze bity word ów PSHUFHW Miesza starsze bity word ów PSHUFD Miesza doubleword PSLLDQ Przesuwa double quadword w lewo PSRLDQ Przesuwa double quadword w prawo PUNPCKHQDQ Rozpakowuje starsze bity quadword PUNPCKLQDQ Rozpakowuje młodsze bity quadword 6.4 Rozkazy kontroli pamięci podręcznej i spójności pamięci MFENCE Szeregowanie operacji odczytu i zapisu pamięci. CLFLUSH Zapisuje i unieważnia wskazaną linijkę cache na wszystkich poziomach pamięci podręcznej LFENCE Uszeregowanie operacji odczytu pamięci MFENCE Uszeregowanie operacji odczytu i zapisu pamięci PAUSE Jest podpowiedzią (ang. hint) dla procesora, która przyspiesza wyjście z pętli aktywnego oczekiwania MASKMOVDQU Uaktualnienie wybranych bajtów z rejestru XMM MOVNTPD Zapis rejestru XMM (zmiennoprzecinkowe) MOVNTDQ Zapis rejestru XMM (całkowite) MOVNTI Zapisanie rejestru ogólnego przeznaczenia 7 Rozkazy SSE3 7.1 Rozkazy konwersji FISTTP Konwersja liczb zmiennoprzecinkowych do całkowitych 7.2 Rozkazy 128-bit ładowania danych LDDQU Aaduje 128 bitów spod adresów niewyrównanych do granicy 16 bajtów 7.3 Rozkazy ADDSUB na zmiennoprzecinkowych liczbach (SIMD) ADDSUBPS Działa na dwóch wektorach liczb zmiennoprzecinkowych pojedynczej precyzji. Wykonywane jest dodawanie elementów o nieparzystych indeksach, odejmowanie - parzystych ADDSUBPD Rozkaz analogiczny do ADDSUBPS, działa na dwóch wektorach liczb zmiennoprzecinkowych podwójnej precyzji 7.4 Rozkazy ADDSUB (zor) na zmiennoprzecinkowych liczbach (SIMD) HADDPS Dodaje sąsiednie elementy wektorów HSUBPS Odejmuje sąsiednie elementy wektorów HADDPD Dodaje do siebie sąsiednie elementy wektorów HSUBPD Odejmuje od siebie sąsiednie elementy wektorów 7.5 Rozkazy LOAD/MOVE/DUPLICATE na qwordach MOVSHDUP Powiela elementy o parzystych indeksach MOVSLDUP Powiela elementy o nieparzystych indeksach MOVDDUP Argumentem rozkazu jest liczba zmiennoprzecinkowa podwójnej precyzji, która w rejestrze XMM jest powielana 7.6 Rozkazy synchronizacji MONITOR ustala początkowy adres zakresu pamięci , który następnie jest automatycznie monitorowany przez procesor; w przypadku wystąpienia zapisu gdziekolwiek w obserwowanym zakresie ustawiana jest wewnętrzna flaga, którą odczytuje MWAIT powoduje wejście w zoptymalizowaną sprzętową pętlę, która jest przerywana dopiero, gdy flaga zostanie ustawiona, a więc gdy nastąpi zapis pod obserwowany adres 8 Rozkazy systemowe LGDT Aaduje rejestr Global Descriptor Table (GDT) SGDT Zapisuje rejestr GTD LLDT Aaduje Local Descriptor Table Register (LDTR) SLDT Zapisuje rejestr LDTR LTR Aaduje aktualny rejestr task (wymaga odpowiednich uprawnień) STR Zapisuje aktualny rejestr task LIDT Aaduje rejestr Interrupt Descriptor Table(IDT) SIDT Zapisuje rejestr IDT MOV Przenosi LMSW Aaduje Machine Status Word (MSW) SMSW Zapisuje MSW CLTS Zeruje znacznik Task Switched Flag w Machine Status Register ARPL Porównuje bity RPL z dest i src. Jeżeli bity RPL z dest są mniejsze niż te z src, bity RPL są ustawiane na takie jak w src i ZF = 1. Else ZF=0 LAR Ważniejszy bajt docelowego rejestru jest nadpisywany wartością bajtu praw dostępu, a mniej ważny bajt jest zerowany w zależności od zaznaczenia w src. ZF = 1 jeżeli operacja powiedzie się LSL Laduje segment limit zaznaczenia do rejestru dest, jeżeli zaznaczenie jest poprawne i widoczne w aktualnym poziomie uprawnień VERR Sprawdza możliwość odczytu VERW Sprawdza możliwość zapisu INVD Uniemożliwia zablokowanie danych WBINVD Ponowny zapis i unieważnienie zablokowania danych INVLPG Instrukcja likwiduje TLP pod danym adresem LOCK Ta instrukcja jest prefiksem, który powoduje, że CPU wstawia na szynę sygnał lock w trakcie wykonywania następnej instrukcji HLT Zatrzymuje procesor do momentu, aż linia RESET zostawnie aktywowana lub zostanie otrzymane przerwanie (NMI lub maskowalne, ale nie zablokowane przerwanie). CPU pozostaje niewykorzystany, ale zachowuje aktualny wskaznik CS:IP do pózniejszego restartu RSM Powrót z system management mode (SMM) RDMSR Czytaj rejestr (zależny od modelu) WRMSR Zapisz rejestr (zależny od modelu) RDPMC Read performance monitoring counters RDTSC Read time stamp counter RDTSCP Read time stamp counter and processor ID SYSENTER Fast System Call, transfers to a flat protected mode kernel at CPL = 0 SYSEXIT Fast System Call, transfers to a flat protected mode kernel at CPL = 3 XSAVE Save processor extended states to memory XRSTOR Restore processor extended states from memory XGETBV Reads the state of an extended control register XSETBV Writes the state of an extended control register Rozkaz OF SF ZF AF PF CF TF IF DF NT RF AAA TM M AAD M M M AAM M M M AAS TM M ADC M M M M M TM ADD M M M M M M AND 0 M M M 0 ARPL M BOUND BSF/BSR M BSWAP BT/BTS/BTR/BTC M CALL CBW CLC 0 CLD 0 CLI 0 CLTS CMC M CMOVcc T T T T T CMP M M M M M M CMPS M M M M M M T CMPXCHG M M M M M M CMPXCHG8B M COMSID 0 0 M 0 M M COMISS 0 0 M 0 M M CPUID CWD DAA M M TM M TM DAS M M TM M TM DEC M M M M M DIV ENTER ESC FCMOVcc T T T FCOMI, FCOMIP, FUCOMI, M M M FUCOMIP HLT IDIV IMUL M M IN INC M M M M M INS T INT 0 0 INTO T 0 0 INVD IIWLPG UCOMSID 0 0 M 0 M M UCOMISS 0 0 M 0 M M IRET R R R R R R R R R T Jcc T T T T T JMP LAHF LAR M LDS/LES/LSS/LFS/LGS LEA LEAVE LGDT/LIDT/LLDT/LMSW LOCK LODS T LOOP Rozkaz OF SF ZF AF PF CF TF IF DF NT RF LOOPE/LOOPNE T LSL M LT R MONITOR MWAIT MOV MOV control, debug, test MOVS T MOVSX/MOVZX MUL M M NEG M M M M M M NOP NOT OR 0 M M M 0 OUT OUTS T POP/POPA POPF R R R R R R R R R R PUSH/PUSHA/PUSHF RCL/RCR 1 M TM RCL/RCR count TM RDMSR RDPMC RDTSC REP/REPE/REPNE RET ROL/ROR 1 M M ROL/ROR count M RSM M M M M M M M M M M M SAHF R R R R R SAL/SAR/S H L/S HR 1 M M M M M SAL/SAR/S H L/S HR count M M M M SBB M M M M M TM SCAS M M M M M M T SETcc T T T T T SGDT/SIDT/SLDT/SMSW SHLD/SHRD M M M M STC 1 STD 1 STI 1 STOS T STR SUB M M M M M M TEST 0 M M - M 0 UD2 VERR/VERRW M WAIT WBINVD WRMSR XADD M M M M M M XCHG XLAT XOR 0 M M - M 0 T Rozkaz testuje flagę. 0 Rozkaz resetuje flagę M Rozkaz modyfikuje flage - Wpływ nie zdefiniowany 1 Rozkaz ustawia flagę R przywraca poprzednią wartość flagi (puste) - Brak wpływu