Programowanie w języku Assembler

Instrukcje procesorów rodziny 80x86 (I)


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