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