Programowanie w języku Assembler

Instrukcje procesorów rodziny 80x86 (C)


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


Autorzy:
Dryobates
LKS
Vogel
Wirek