Instrukcje procesorów rodziny 80x86 (I)
Dryobates
IDIV | Signed Integer Division | |||||||||||||||
Użycie | DIV src | |||||||||||||||
Modyfikowane flagi | (AF,CF,OF,PF,SF,ZF nieokreślone) | |||||||||||||||
Dzielenie liczb ze znakiem. Zawartość akumulatora jest dzielona przez src. Zależnie od rozmiaru dzielnika dzielna, iloraz i reszta znajdują się w następujących rejestrach:
| ||||||||||||||||
Liczba cykli zegara | Rozmiar | |||||||||||||||
Parametry | 808x | 286 | 386 | 486 | Bajtów | |||||||||||
reg8 | 101-112 | 17 | 19 | 19 | 2 | |||||||||||
reg16 | 165-184 | 25 | 27 | 27 | 2 | |||||||||||
reg32 | - | - | 43 | 43 | 2 | |||||||||||
mem8 | (107-118)+EA | 20 | 22 | 20 | 2-4 | |||||||||||
mem16 | (171-190)+EA | 38 | 30 | 28 | 2-4 (W88=175-194) | |||||||||||
mem32 | - | - | 46 | 44 | 2-4 | |||||||||||
IMUL | Signed Multiply | |||||||||||||||
Użycie | IMUL src IMUL dest,immed (286+) IMUL dest,src,immed8 (286+) IMUL dest,src (386+) | |||||||||||||||
Modyfikowane flagi | CF OF (AF,PF,SF,ZF nieokreślone) | |||||||||||||||
Mnożenie ze znakiem. Zawartość akumulatora mnożona przez src. Zależnie od rozmiaru czynnika iloczyn oraz drugi czynnik znajdują się w następujących rejestrach
| ||||||||||||||||
Liczba cykli zegara | Rozmiar | |||||||||||||||
Parametry | 808x | 286 | 386 | 486 | Bajtów | |||||||||||
reg8 | 80-98 | 13 | 9-14 | 13-18 | 2 | |||||||||||
reg16 | 128-154 | 21 | 9-22 | 13-26 | 2 | |||||||||||
reg32 | - | - | 9-38 | 12-42 | 2 | |||||||||||
mem8 | 86-104 | 16 | 12-17 | 13-18 | 2-4 | |||||||||||
mem16 | 134-160 | 24 | 12-25 | 13-26 | 2-4 | |||||||||||
mem32 | - | - | 12-41 | 13-42 | 2-4 | |||||||||||
reg16,reg16 | - | - | 9-22 | 13-26 | 3-5 | |||||||||||
reg32,reg32 | - | - | 9-38 | 13-42 | 3-5 | |||||||||||
reg16,mem16 | - | - | 12-25 | 13-26 | 3-5 | |||||||||||
reg32,mem32 | - | - | 12-41 | 13-42 | 3-5 | |||||||||||
reg16,immed | - | 21 | 9-22 | 13-26 | 3 | |||||||||||
reg32,immed | - | 21 | 9-38 | 13-42 | 3-6 | |||||||||||
reg16,reg16,immed | - | 2 | 9-22 | 13-26 | 3-6 | |||||||||||
reg32,reg32,immed | - | 21 | 9-38 | 13-42 | 3-6 | |||||||||||
reg16,mem16,immed | - | 24 | 12-25 | 13-26 | 3-6 | |||||||||||
reg32,mem32,immed | - | 24 | 12-41 | 13-42 | 3-6 | |||||||||||
IN | Input Byte or Word From Port | |||||
Użycie | IN accum,port | |||||
Modyfikowane flagi | Brak | |||||
Odczytuje byte, word lub dword z port i umieszcza w AL, AX lub EAX . Jeżeli nr portu zawiera się w przedziale 0-255 to może on być podany jako wartość immed, w przeciwnym wypadku nr portu musi znajdować się w DX. Prawidłowe nr portów na PC znajdują się w przedziale 0-1024. Pozostałe, aż do 65535 mogą być wykorzystywane przez innych producentów sprzętu. | ||||||
Liczba cykli zegara | Rozmiar | |||||
Parametry | 808x | 286 | 386 | 486 | Bajtów | |
accum,immed8 | 10/14 | 5 | 12 | 14 | 2 | |
accum,immed8(PM) | 6/26 | 8/28/27 | 2 | |||
accum,DX | 8/12 | 5 | 13 | 14 | 1 | |
accum,DX(PM) | 7/27 | 8/28/27 | 1 | |||
INC | Increment | ||||
Użycie | INC dest | ||||
Modyfikowane flagi | AF OF PF SF ZF | ||||
Dodaje 1 do dest (dest := dest + 1) | |||||
Liczba cykli zegara | Rozmiar | ||||
Parametry | 808x | 286 | 386 | 486 | Bajtów |
reg8 | 3 | 2 | 2 | 1 | 2 |
reg16 | 3 | 2 | 2 | 1 | 1 |
reg32 | 3 | 2 | 2 | 1 | 1 |
mem | 15+EA | 7 | 6 | 3 | 2-4 (W88=23+EA) |
INS | Input String from Port (80188+) | |||||
Użycie | INS dest,port INSB INSW INSD (386+) | |||||
Modyfikowane flagi | Brak | |||||
Ładuje dane z portu port do pamięci wyznaczanej przez ES:(E)DI (nawet jeżeli dest jest wyznaczone). (E)DI jest wyjustowane do rozmiar argumentu i zwiększa się, jeżeli DF=0, a maleje gdy DF=1. Dla INSB, INSW, INSD nie ma żadnego argumentu, a rozmiar jest wyznaczany przez mnemonik | ||||||
Liczba cykli zegara | Rozmiar | |||||
Parametry | 808x | 286 | 386 | 486 | Bajtów | |
dest,port | - | 5 | 15 | 17 | 1 | |
dest,port(PM) | - | 5 | 9/29 | 10/32/30 | 1 | |
Brak | - | 5 | 15 | 17 | 1 | |
Brak(PM) | - | 5 | 9/29 | 10/32/30 | 1 | |
INT | Interrupt | |||||
Użycie | INT num | |||||
Modyfikowane flagi | TF IF | |||||
Wywołuje przerwanie programowe o wskazanym numerze, czyści TF i IF i wrzuca na stos CS i IP oraz ładuje CS:IP znalezione w tablicy wektorów przerwań. Wykonywanie programu zaczyna się od nowych wartości CS:IP | ||||||
Liczba cykli zegara | Rozmiar | |||||
Parametry | 808x | 286 | 386 | 486 | Bajtów | |
3(constant) | 52/72 | 23+m | 33 | 26 | 2 | |
3(prot. mode, same priv.) | - | 40+m | 59 | 44 | 2 | |
3(prot. mode, more priv.) | - | 78+m | 99 | 71 | 2 | |
3(from VM86 to PL 0) | - | - | 119 | 82 | 2 | |
3(prot. mode via task gate) | - | 167+m | TS | 37+TS | 2 | |
immed8 | 51/71 | 23+m | 37 | 30 | 1 | |
immed8 (prot. mode, same priv.) | - | 40+m | 59 | 44 | 1 | |
immed8 (prot. mode, more priv.) | - | 78+m | 99 | 71 | 1 | |
immed8 (from VM86 to PL 0) | - | - | 119 | 86 | 1 | |
immed8 (prot. mode, via task gate) | - | 167+m | TS | 37+TS | 1 | |
INTO | Interrupt on Overflow | |||||
Użycie | INTO | |||||
Modyfikowane flagi | IF TF | |||||
Jeżeli OF jest ustawione to instrukcja ta powoduje wywołanie przerwania nr 4 (INT 4). | ||||||
Liczba cykli zegara | Rozmiar | |||||
Parametry | 808x | 286 | 386 | 486 | Bajtów | |
Brak: jump | 53/73 | 24+m | 35 | 28 | 1 | |
Brak: no jump | 4 | 3 | 3 | 3 | ||
(prot. mode, same priv.) | - | - | 59 | 46 | 1 | |
(prot. mode, more priv.) | - | - | 99 | 73 | 1 | |
(from VM86 to PL 0) | - | - | 119 | 84 | 1 | |
(prot. mode, via task gate) | - | TS | 39+TS | 1 | ||
INVD | Invalidate Cache (486+) | |||||
Użycie | INVD | |||||
Modyfikowane flagi | Brak | |||||
Opróżnia wewnętrzną pamięć cache procesora. Dane do zapisania, które znajdowały się w tej pamięci zostaną utracone (program musi mieć odpowiednie uprawnienia, aby użyć tej instrukcji). | ||||||
Liczba cykli zegara | Rozmiar | |||||
Parametry | 808x | 286 | 386 | 486 | Bajtów | |
Brak | - | - | - | 4 | 2 | |
INVLPG | Invalidate Translation Look-Aside Buffer Entry (486+) | |||||
Użycie | INVLPG | |||||
Modyfikowane flagi | Brak | |||||
Opróżnia pojedynczą stronę w Translation Look-Aside Buffer (program musi mieć odpowiednie uprawnienia) | ||||||
Liczba cykli zegara | Rozmiar | |||||
Parametry | 808x | 286 | 386 | 486 | Bajtów | |
Brak | - | - | - | 12 | 2 | |
IRET/IRETD | Interrupt Return | ||||
Użycie | IRET IRETD (386+) | ||||
Modyfikowane flagi | AF CF DF IF PF SF TF ZF | ||||
Zwraca kontrolę do miejsca w którym zostało wywołane przerwanie zdejmując ze stosu IP i CS oraz Flags i kontynuując wykonanie programu. Przerwania CPU wrócą do tej instrukcji, która spowodowała przerwanie ponieważ CS:IP zostało umieszczone na stosie w przed instrukcją powodującą przerwanie | |||||
Liczba cykli zegara | Rozmiar | ||||
Parametry | 808x | 286 | 386 | 486 | Bajtów |
Iret | 32/44 | 17+m | 22 | 15 | 1 |
Iret(prot. mode) | - | 31+m | 38 | 15 | 1 |
Iret(to less privilege) | - | 55+m | 82 | 36 | 1 |
Iret(different task, NT=1) | - | 169+m | TS | TS+32 | 1 |
Iretd | - | - | 22/38 | 15 | 1 |
Iretd(to less privilege) | - | - | 82 | 36 | 1 |
Iretd(to VM86 mode) | - | - | 60 | 15 | 1 |
Iretd(different task, NT=1) | - | - | TS | TS+32 | 1 |
Instrukcje procesorów rodziny 80x86 (I)
bullet force