Instrukcje procesorów rodziny 80x86 (I)

Dryobates

IDIVSigned Integer Division
UżycieDIV 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:
Dzielnik (rozmiar)DzielnaIlorazReszta
ByteAXALAH
WordDX:AXAXDX
DWordEDX:EAXEAXEDX
  Liczba cykli zegaraRozmiar
Parametry808x 286386 486 Bajtów
reg8101-112 1719 192
reg16165-1842527272
reg32--43432
mem8(107-118)+EA2022202-4
mem16(171-190)+EA3830282-4 (W88=175-194)
mem32--46442-4
IMULSigned Multiply
UżycieIMUL 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
Czynnik (rozmiar)IloczynCzynnikReszta
ByteAXALAH
WordDX:AXAXDX
DWordEDX:EAXEAXEDX
Przy dwóch argumentach dest := dest*src/immed Przy trzech argumentach dest := src*immed
  Liczba cykli zegaraRozmiar
Parametry808x286386486Bajtów
reg880-98139-1413-18 2
reg16128-154219-2213-262
reg32--9-3812-422
mem886-1041612-1713-182-4
mem16134-1602412-2513-262-4
mem32--12-4113-422-4
reg16,reg16--9-2213-263-5
reg32,reg32--9-3813-423-5
reg16,mem16--12-2513-263-5
reg32,mem32--12-4113-423-5
reg16,immed-219-2213-263
reg32,immed-219-3813-423-6
reg16,reg16,immed-29-2213-263-6
reg32,reg32,immed-219-3813-423-6
reg16,mem16,immed-2412-2513-263-6
reg32,mem32,immed-2412-4113-423-6
INInput Byte or Word From Port
UżycieIN accum,port
Modyfikowane flagiBrak
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 zegaraRozmiar
Parametry808x286386486Bajtów
accum,immed810/14512 14 2
accum,immed8(PM)    6/268/28/27 2
accum,DX 8/125 13 14 1
accum,DX(PM)    7/27 8/28/271
INC Increment
Użycie INC dest
Modyfikowane flagi AF OF PF SF ZF
Dodaje 1 do dest (dest := dest + 1)
  Liczba cykli zegaraRozmiar
Parametry 808x286386486Bajtów
reg8 32212
reg1632211
reg3232211
mem15+EA7632-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 808x286386486Bajtów
dest,port-515171
dest,port(PM)-59/2910/32/301
Brak-515171
Brak(PM)-59/2910/32/301
INTInterrupt
UżycieINT num
Modyfikowane flagiTF 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 zegaraRozmiar
Parametry808x286386486Bajtów
3(constant)52/7223+m33262
3(prot. mode, same priv.)-40+m59442
3(prot. mode, more priv.)-78+m99712
3(from VM86 to PL 0)--119822
3(prot. mode via task gate)-167+mTS37+TS2
immed851/7123+m37301
immed8 (prot. mode, same priv.)-40+m5944 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 486Bajtów
Brak: jump53/73 24+m 3528 1
Brak: no jump 43 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 zegaraRozmiar
Parametry 808x286 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

Autorzy:
Dryobates
LKS
Vogel
Wirek

1 komentarz

Instrukcje procesorów rodziny 80x86 (I)
bullet force