rozkazy god mode, asembler


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ądź 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 Ładuje byte z DS:[SI] do AL

LODS/LODSW Ładuje word z DS:[SI] do AX

LODS/LODSD Ładuje 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 Ładuje FLAGS do AH

SAHF Pobiera FLAGS do AH

PUSHF/PUSHFD Ładuje 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 (wskaźniki)

LDS Ładuje wskaźnik do DS (w dest przesunięcie, w DS segment)

LES Ładuje wskaźnik do ES (w dest przesunięcie, w ES segment)

LFS Ładuje wskaźnik do FS (w dest przesunięcie, w FS segment)

LGS Ładuje wskaźnik do GS (w dest przesunięcie, w GS segment)

LSS Ładuje wskaźnik 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 Ładuje 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 Ładuje 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 ylog2(x)

FYL2XP1 ylog2(x+1)

2.5 Rozkazy ładujące stałe

FLD1 Ładuje +1.0

FLDZ Ładuje +0.0

FLDPI Ładuje π

FLDL2E Ładuje log2e

FLDLN2 Ładuje ln2

FLDL2T Ładuje log210

FLDLG2 Ładuje log2

2.6 Rozkazy kontroli nad FPU (koprocesorem)

FINCSTP Inkremntuje wskaźnik stosu

FDECSTP Dekremntuje wskaźnik 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 Ładuje słowo kontrolne (control word)

FSTENV Zachowuje środowisko

FNSTENV Zachowuje środowisko (bez oczekiwania)

FLDENV Ładuje ś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 Ładuj 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 Ładuje 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 Ładuje rejestr Global Descriptor Table (GDT)

SGDT Zapisuje rejestr GTD

LLDT Ładuje Local Descriptor Table Register (LDTR)

SLDT Zapisuje rejestr LDTR

LTR Ładuje aktualny rejestr task (wymaga odpowiednich uprawnień)

STR Zapisuje aktualny rejestr task

LIDT Ładuje rejestr Interrupt Descriptor Table(IDT)

SIDT Zapisuje rejestr IDT

MOV Przenosi

LMSW Ładuje 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 wskaźnik CS:IP  do późniejszego 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, FUCOMIP

M

M

M

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ę

- - Wpływ nie zdefiniowany

M - Rozkaz modyfikuje flage

1 - Rozkaz ustawia flagę

R - przywraca poprzednią wartość flagi

(puste) - Brak wpływu



Wyszukiwarka