Instrukcje procesorów rodziny 80x86 (C)
| CALL | Procedure Call | |||||
| Użycie | CALL destination | |||||
| Modyfikowane flagi | Brak | |||||
| Wrzuca IP (oraz CS przy długich wywołaniach) na stos i ładuje IP adresem procedury. Wykonywanie programu rozpoczyna się od adresu wskazywanego przez CS:IP. | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| rel16(near, IP relative) | 19 | 7 | 7+m | 3 | ||
| rel32(near, IP relative) | - | - | 7+m | 3 | ||
| reg16(near, register indirect) | 16 | 7 | 7+m | 5 | ||
| reg32(near, register indirect) | - | - | 7+m | 5 | ||
| mem16(near, memory indirect) | - | 21+EA | 11 | 10+m | 5 | |
| mem32(near, memory indirect) | - | - | 10+m | 5 | ||
| ptr16:16(far, full ptr supplied) | 28 | 13 | 17+m | 18 | ||
| ptr16:32(far, full ptr supplied) | - | - | 17+m | 18 | ||
| ptr16:16(far, ptr supplied, prot. mode) | - | 26 | 34+m | 20 | ||
| ptr16:32 (far, ptr supplied, prot. mode) | - | - | 34+m | 20 | ||
| m16:16 (far, indirect) | 37+EA | 16 | 22+m | 17 | ||
| m16:32 (far, indirect) | - | - | 22+m | 17 | ||
| m16:16 (far, indirect, prot. mode) | - | 29 | 38+m | 20 | ||
| m16:32 (far, indirect, prot. mode) | - | - | 38+m | 20 | ||
| ptr16:16 (task, via TSS or task gate) | - | 177 | TS | 37+TS | ||
| m16:16 (task, via TSS or task gate) | - | 180/185 | 5+TS | 37+TS | ||
| m16:32 (task) | - | - | TS | 37+TS | ||
| m16:32 (task) | - | - | 5+TS | 37+TS | ||
| ptr16:16 (gate, same privilege) | - | 41 | 52+m | 35 | ||
| ptr16:32 (gate, same privilege) | - | - | 52+m | 35 | ||
| m16:16 (gate, same privilege) | - | 44 | 56+m | 35 | ||
| m16:32 (gate, same privilege) | - | - | 56+m | 35 | ||
| ptr16:16 (gate, more priv, no parm) | - | 82 | 86+m | 69 | ||
| ptr16:32 (gate, more priv, no parm) | - | - | 86+m | 69 | ||
| m16:16 (gate, more priv, no parm) | - | 83 | 90+m | 69 | ||
| m16:32 (gate, more priv, no parm) | - | - | 90+m | 69 | ||
| ptr16:16 (gate, more priv, x parms) | - | 86+4x | 94+4x+m | 77+4x | ||
| ptr16:32 (gate, more priv, x parms) | - | - | 94+4x+m | 77+4x | ||
| m16:16 (gate, more priv, x parms) | - | 90+4x | 98+4x+m | 77+4x | ||
| m16:32 (gate, more priv, x parms) | - | - | 98+4x+m | 77+4x | ||
| CBW | Convert Byte to Word | |||||
| Użycie | CBW | |||||
| Modyfikowane flagi | Brak | |||||
| Zamienia wartość typu bajt znajdującą się w AL na wartość typu WORD (16-bitów) znajdującą się w AX wypełniając AH wartością najbardziej znaczącego bitu w AL (czyli zachowuje znak) | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | 2 | 2 | 3 | 3 | 1 | |
| CDQ | Convert Double to Quad (386+) | |||||
| Użycie | CDQ | |||||
| Modyfikowane flagi | Brak | |||||
| Zamienia wartość typu DWORD (32-bity) zawartą w EAX na wartość QWORD (64-bity) zawartą w EDX:EAX przez wypełnienie EDX wartością najbardziej znaczącego bitu w EAX (czyli zachowuje znak liczby) | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | - | - | 2 | 3 | 1 | |
| CLC | Clear Carry | |||||
| Użycie | CLC | |||||
| Modyfikowane flagi | CF | |||||
| Zeruje Carry Flag (CF) | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | 2 | 2 | 2 | 2 | 1 | |
| CLD | Clear Direction Flag | |||||
| Użycie | CLD | |||||
| Modyfikowane flagi | DF | |||||
| Zeruje Direction Flag (DF) powodując inkrementację rejestrów SI i DI przez instrukcje łańcuchowe. | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | 2 | 2 | 2 | 2 | 1 | |
| CLI | Clear Interrupt Flag (disable) | |||||
| Użycie | CLI | |||||
| Modyfikowane flagi | IF | |||||
| Wyłącza maskowanie przerwań sprzętowych przez wyzerowanie Interrupt Flag (IF). Przerwania niemaskowalne (NMI) i programowe nie są blokowane. | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | 2 | 2 | 3 | 5 | 1 | |
| CLTS | Clear Task Switched Flag (286+ privileged) | |||||
| Użycie | CLTS | |||||
| Modyfikowane flagi | Brak | |||||
| Zeruje znacznik Task Switched Flag w Machine Status Register. To jest oparacja, którą może wykonać tylko program z uprawnieniami (np. system operacyjny). | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | - | 2 | 5 | 7 | 2 | |
| CMC | Complement Carry Flag | |||||
| Użycie | CMC | |||||
| Modyfikowane flagi | CF | |||||
| Odwraca Carry Flag (CF = not CF) | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | 2 | 2 | 2 | 2 | 1 | |
| CMP | Compare | |||||
| Użycie | CMP dest,src | |||||
| Modyfikowane flagi | AF CF OF PF SF ZF | |||||
| Odejmuje src od dest i ustawia znaczniki, ale nie zapamiętuje wyniku. (dest - src. Na podstawie ustawionych znaczników można porównać dwie liczby) | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| reg,Reg | 3 | 2 | 2 | 1 | 2 | |
| mem,Reg | 9+EA | 7 | 5 | 2 | 2-4 (W88=13+EA) | |
| reg,mem | 9+EA | 6 | 6 | 2 | 2-4 (W88=13+EA) | |
| reg,immed | 4 | 3 | 2 | 1 | 3-4 | |
| mem,immed | 10+EA | 6 | 5 | 2 | 3-6 (W88=14+EA) | |
| accum,immed | 4 | 3 | 2 | 1 | 2-3 | |
| CMPS | Compare String (Byte, Word or Doubleword) | |||||
| Użycie | CMPS dest,src CMPSB CMPSW CMPSD (386+) | |||||
| Modyfikowane flagi | AF CF OF PF SF ZF | |||||
| Działa na takiej samej zasadzie jak CMP dodatkowo zwiększa lub zmniejsza wartości rejestrów (E)SI i (E)DI zależnie od Direction Flag (DI). CMPSB zwiększa/zmniejsza rejestry indeksowe o 1, CMPSW o 2, a CMPSD o 4. Instrukcja REP może zostać użyta do przetworzenia całych łańcuchów. | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| dest,src | 22 | 8 | 10 | 8 | 1 (W88=30) | |
| CMPXCHG | Compare and Exchange | |||||
| Użycie | CMPXCHG dest,src (486+) | |||||
| Modyfikowane flagi | AF CF OF PF SF ZF | |||||
| Porównuje akumulator (AL, AX, EAX) z dest. Jeżeli są równe to dest zostaje załadowane wartością src, w przeciwnym wypadku akumulator jest ładowany przez dest. Uwaga: Dodaj 3 cykle zegara jeżeli porównanie "mem,reg" nie uda się | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Reg, reg | - | - | - | 6 | 2 | |
| Mem, reg | - | - | - | 7 | 2 | |
| CWD | Convert Word to Doubleword | |||||
| Użycie | CWD | |||||
| Modyfikowane flagi | Brak | |||||
| Zamienia wartość typu WORD zawartą w rejsetrze AX na wartość typu DWORD zawartą w rejestrzee DX:AX wypełniając DX wartością najbardziej znaczącego bitu w AX. | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | 5 | 2 | 2 | 3 | 1 | |
| CWDE | Convert Word to Extended Doubleword (386+) | |||||
| Użycie | CWDE | |||||
| Modyfikowane flagi | Brak | |||||
| Zamienia wartość typu WORD zawartą w rejsetrze AX na wartość typu DWORD zawartą w rejestrzee EAX wypełniając bardziej znaczące 16 bitów EAX wartością najbardziej znaczącego bitu w AX. | ||||||
| Liczba cykli zegara | Rozmiar | |||||
| Parametry | 808x | 286 | 386 | 486 | Bajtów | |
| Brak | - | - | 3 | 3 | 1 | |
Autorzy:
Dryobates
LKS
Vogel
Wirek


