Instrukcje procesorów rodziny 80x86 (C)
Dryobates
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 |