Inštrukčný súbor 80[2]86


<= =>


  • Inštrukcie prenosu dát
  • Inštrukcie dosadenia adresy
  • Inštrukcie aritmetických operácií
  • Inštrukcie logických operácií
  • Inštrukcie posuvov a rotácií
  • Inštrukcie volaní, skokov a návratov
  • Inštrukcie reťazcových operácií
  • Inštrukcie opakovania a preskočenia
  • Inštrukcie riadenia
  • Nedokumentované inštrukcie
  • Symboly a operátory vkladaného assembleru
  • Vysvetlivky pre tabuľku inštrukčného súboru

  •  
    Inštrukcie presunu dát
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    MOV ciel, zdr ciel:=zdr r,r
    r,m
    m,r
    m,i
    r,i
    sr,r16
    sr,m16
    r16,sr
    m16,sr
    ---------
    PUSH zdr na vrchol zásobníka ulož obsah zdroja r16
    sr
    m16
    i
    ---------
    PUSHF na vrchol zásobníka ulož obsah F   ---------
    PUSHA do zásobníka ulož AX,CX,DX,BX,SP,BP,SI,DI   ---------
    POP ciel z vrcholu zásobníku umiestni do cieľa r16
    sr
    m16
    ---------
    POPF slovom z vrcholu zásobníka vyplň F   +++++++++
    POPA zo zásobníka obnov registre uložené PUSHA   ---------
    LAHF AH:=nižšia slabika F   ---------
    SAHF nižšia slabika F:=AH   ----+++++
    XCHG ciel, zdr vzájomná výmena hodnôt zdroja a cieľa AX,r16 
    m,r
    r,r
    ---------
    XLAT AL:=BYTE PTR DS:[BX+AL]   ---------
    IN ciel, zdr do cieľa presuň hodnotu z portu zdr a,i8
    a,DX
    ---------
    OUT ciel, zdr na cieľový port presuň hodnotu zdroja i8,a
    DX,a
    ---------

     
    Inštrukcie dosadenia adresy
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    LEA ciel, zdr do adr. registru dosaď adresu offset pamäte ofr,m ---------
    LDS ciel, zdr do registrov DS a adr. reg. dosaď obsah ukazovat. ofr,m32 ---------
    LES ciel, zdr do registrov ES a adr. reg. dosaď obsah ukazovat. ofr,m32 ---------

     
    Inštrukcie aritmetických operácií
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    ADD ciel, zdr ciel:=ciel+zdr r,r
    r,m
    m,r
    r,i
    m,i
    +---+++++
    ADC ciel, zdr ciel:=ciel+zdr+CF r,r
    r,m
    m,r
    r,i
    m,i
    +---+++++
    INC ciel ciel:=ciel+1 r
    m
    +---+++++
    AAA AL7,6,5,4:=0; AL3,2,1,0:=BCD číslo z AL (+)   x---xx+x+
    DAA AL:=2 BCD číslice z AL (BCD korekcia po +)   x---+++++
    SUB ciel, zdr ciel:=ciel-zdr r,r
    r,m
    m,r
    r,i
    m,i
    +---+++++
    CMP ciel, zdr F:=ciel-zdr r,r
    r,m
    m,r
    r,i
    m,i
    +---+++++
    SBB ciel, zdr ciel:=ciel-zdr-CF r,r
    r,m
    m,r
    r,i
    m,i
    +---+++++
    DEC ciel ciel:=ciel-1 r
    m
    +---+++++
    NEG ciel ciel:=(-1)*ciel r
    m
    +---++++1
    AAS AL7,6,5,4:=0; AL3,2,1,0:=BCD číslo z AL (-)   x---xx+x+
    DAS AL:=2 BCD číslice z AL (BCD korekcia po -)   x---+++++
    MUL zdr AX:=AL*zdr (* bez znamienka) DX:AX:=AX*zdr (* bez znamienka) r8
    m8
    r16
    m16
    +---xxxx+
    IMUL zdr
    IMUL ciel,zdr
    IMUL ciel,z1,z2
    AX:=AL*zdr (* so znamienkom)
    DX:AX:=AX*zdr (* so znamienkom)
    ciel:=ciel*zdr (* so znamienkom)
    ciel:=z1*z2 (* so znamienkom)
    r8
    m8
    r16
    m16
    r16,i8
    r16,r16,i
    r16,m16,i
    +---xxxx+
    AAM AX:=2 BCD číslice z AX (BCD korekcia po *)   x---++x+x
    DIV zdr AL:=AX div zdr; AH:=AX mod zdr
    (/ bez znamienka)
    AX:=DX:AX div zdr; DX:=DX:AX mod zdr
    (/ bez znamienka)
    r8
    m8
    r16
    m16
    x---xxxxx
    IDIV zdr AL:=AX div zdr; AH:=AX mod zdr
    (/ so znamienkom)
    AX:=DX:AX div zdr; DX:=DX:AX mod zdr
    (/ so znamienkom)
    r8
    m8
    r16
    m16
    x---xxxxx
    AAD AX:=bin číslo z 2 BCD číslic v AX (pred / )   x---++x+x
    CBW AX:=AL so zachovaním znam. (slabika->slovo)   ---------
    CWD DX:AX:=AX so zachovaním znamienka (slovo->dvojslovo)   ---------

     
    Inštrukcie logických operácií
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    NOT ciel ciel:=not(ciel) r
    m
    ---------
    AND ciel, zdr ciel:=ciel and zdr (logický súčin) r,r
    r,m
    m,r
    r,i
    m,i
    0---++x+0
    TEST ciel, zdr F:=ciel and zdr (logický súčin bez zmeny operandov) r,r
    r,m
    m,r
    r,i
    m,i
    0---++x+0
    OR ciel, zdr ciel:=ciel or zdr (logický súčet) r,r
    r,m
    m,r
    r,i
    m,i
    0---++x+0
    XOR ciel, zdr ciel:=ciel xor zdr (logický vylučovací súčet) r,r
    r,m
    m,r
    r,i
    m,i
    0---++x+0

     
    Inštrukcie posuvov a rotácií
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    SAL ciel, zdr
    SHL ciel, zdr
    osembitový alebo šestnásťbitový posuv doľava r,1
    m,1
    r,CL
    m,CL
    r,i
    m,i
    +-------+
    SAR ciel, zdr osembitový alebo šestnásťbitový aritm. posuv doprava r,1
    m,1
    r,CL
    m,CL
    r,i
    m,i
    +-------+
    SHR ciel, zdr osembitový alebo šestnásťbitový posuv doprava r,1
    m,1
    r,CL
    m,CL
    r,i
    m,i
    +-------+
    ROL ciel, zdr osembitová alebo šestnásťbitová rotácia doľava r,1
    m,1
    r,CL
    m,CL
    r,i
    m,i
    +-------+
    RCL ciel, zdr osembitová alebo šestnásťbitová rotácia doľava cez CF r,1
    m,1
    r,CL
    m,CL
    r,i
    m,i
    +-------+
    ROR ciel, zdr osembitová alebo šestnásťbitová rotácia doprava r,1
    m,1
    r,CL
    m,CL
    r,i
    m,i
    +-------+
    RCR ciel, zdr osembitová alebo šestnásťbitová rotácia doprava cez CF r,1
    m,1
    r,CL
    m,CL
    r,i
    m,i
    +-------+

     
    Inštrukcie volaní, skokov a návratov
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    CALL ciel nepodm. volanie podprogramu (ciel=jm. podpgm) adresa ---------
    RET návrat z podprogramu   ---------
    JMP ciel nepodmienený skok na návestie (ciel=návestie) adresa ---------
    JE ciel
    JZ ciel
    skok na návestie pri ZF=1 (je rovno/je nula) adresa adresa
    adresa
    -----t---
    JNE ciel
    JNZ ciel
    skok na návestie pri ZF=0 (nieje rovno/nieje nula) adresa
    adresa
    -----t---
    JC ciel
    JB ciel
    JNAE ciel
    skok na návestie pri CF=1 (je prenos/je niže/nieje nad ani rovno) adresa
    adresa
    adresa
    --------t
    JNC ciel
    JAE ciel
    JNB ciel
    skok na návestie pri CF=0 (nieje prenos/je nad alebo rovno/nieje niže) adresa
    adresa
    adresa
    --------t
    JS ciel skok na návestie pri SF=1 (je -) adresa ----t----
    JNS ciel skok na návestie pri SF=0 (nieje -) adresa ----t----
    JO ciel skok na návestie pri OF=1 (je pretečenie) adresa t--------
    JNO ciel skok na návestie pri OF=0 (nieje pretečenie) adresa t--------
    JP ciel
    JPE ciel
    skok na návestie pri PF=1 (je parita/je párna parita) adresa
    adresa
    -------t-
    JNP ciel
    JPO ciel
    skok na návestie pri PF=0 (nieje parita/nepárna parita) adresa
    adresa
    -------t-
    JA ciel
    JNBE ciel
    skok na návestie pri (CF=0) AND (ZF=0) (je nad/nieje pod ani rovno) adresa
    adresa
    -----t—t
    JBE ciel
    JNA ciel
    skok na návestie pri (CF=1) OR (ZF=1) (je niže alebo rovno/nieje nad) adresa
    adresa
    -----t—t
    JG ciel
    JNLE ciel
    skok na návestie pri (ZF=0) OR (SF=OF) (je väčší/nieje menší ani rovno) adresa
    adresa
    t---tt---
    JGE ciel
    JNL ciel
    skok na návestie pri SF=OF (je väčší alebo rovno/nieje menší) adresa
    adresa
    t---t----
    JL ciel
    JNGE ciel
    skok na návestie pri SF<>OF (je menší/nieje väčší ani rovno) adresa
    adresa
    t---t----
    JLE ciel
    JNG ciel
    skok na návestie pri (ZF=1) OR (SF<>OF) (je menší alebo rovno/nieje väčší) adresa
    adresa
    t---tt---
    JCXZ ciel skok na návestie pri CX=0 (obídi slučku) adresa ---------
    LOOP ciel CX:=CX-1; skok na návestie pri CX<>0 adresa -----t---
    LOOPE ciel
    LOOPZ ciel
    CX:=CX-1; skok pri (CX<>0 AND ZF=1) (opakuj dokiaľ je zhoda/opakuj dokiaľ je 0) adresa
    adresa
    -----t---
    LOOPNE ciel
    LOOPNZ ciel
    CX:=CX-1; skok pri (CX<>0 AND ZF=0) (opakuj dokiaľ nieje zhoda/ 0) adresa
    adresa
    -----t---
    INT číslo volej obsluhu prerušenia číslo (0..255) i8 ---------
    INTO volej INT 4 (obsluha pretečenia)   t--------
    IRET návrat z obsluhy prerušenia   +++++++++

     
    Inštrukcie reťazcových operácií
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    MOVSB ES:[DI]:=BYTE PTR DS:[SI]; SI:=SI+(-)1; DI:=DI+(-)1   ---------
    MOVSW ES:[DI]:=WORD PTR DS:[SI]; SI:=SI+(-)2; DI:=DI+(-)2   ---------
    CMPSB F:=BYTE PTR DS:[SI]-ES:[DI]; SI,DI:=SI,DI+(-)1   +---+++++
    CMPSW F:=WORD PTR DS:[SI]-ES:[DI]; SI,DI:=SI,DI+(-)2   +---+++++
    SCASB F:=AL-BYTE PTR ES:[DI]; DI:=DI+(-)1   +---+++++
    SCASW F:=AX-WORD PTR ES:[DI]; DI:=DI+(-)2   +---+++++
    LODSB AL:=BYTE PTR DS:[SI]; SI:=SI+(-)1   ---------
    LODSW AX:=WORD PTR DS:[SI]; SI:=SI+(-)2   ---------
    STOSB BYTE PTR ES:[DI]:=AL; DI:=DI+(-)1   ---------
    STOSW WORD PTR ES:[DI]:=AX; DI:=DI+(-)2   ---------
    INSB BYTE PTR ES:[DI]:=port s adresou v DX; DI:=DI+(-)1   ---------
    INSW WORD PTR ES:[DI]:=port s adresou v DX; DI:=DI+(-)2   ---------
    OUTSB port s adresou v DX:=BYTE PTR DS:[SI]; SI:=SI+(-)1   ---------
    OUTSW port s adresou v DX:=WORD PTR DS:[SI]; SI:=SI+(-)2   ---------

     
    Inštrukcie opakovania a preskočenia
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    REP inštr. CX:=CX-1; opakuj dokiaľ CX<>0 (MOVS a STOS) reťaz.i. xxxxxxxxx
    REPE inštr.
    REPZ inštr.
    CX:=CX-1; opakuj dokiaľ (CX<>0 AND ZF=1) opakovanie do zhody (CMPS a SCAS) reťaz.i. xxxxxxxxx
    REPNE inštr.
    REPNZ inštr.
    CX:=CX-1; opakuj dokiaľ (CX<>0 AND ZF=0) opakovanie dokiaľ nieje zhoda (CMPS a SCAS) reťaz.i. xxxxxxxxx
    SEGCS inštr. adresa v inštrukcii sa vzťahuje k CS pam.inš. xxxxxxxxx
    SEGDS inštr. adresa v inštrukcii sa vzťahuje k DS pam.inš. xxxxxxxxx
    SEGES inštr. adresa v inštrukcii sa vzťahuje k ES pam.inš. xxxxxxxxx
    SEGSS inštr. adresa v inštrukcii sa vzťahuje k SS pam.inš. xxxxxxxxx

     
    Inštrukcie riadenia
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    CLC CF:=0   --------0
    CMC CF:=NOT(CF)   --------+
    STC CF:=1   --------1
    CLD DF:=0   -0-------
    STD DF:=1   -1-------
    CLI IF:=0   --0------
    STI IF:=1   --1------
    HLT zastaviť procesor (do res. nebo nem. preruš.)   ---------
    WAIT zastaviť procesor (do res. nebo nem. preruš.)   ---------
    ESC inšt, zdr predaj koprocesoru inštrukciu s operandom inšt,r/m ---------
    LOCK inšt po dobu vykonávania inštrukcie blokuj zbernice   ---------
    NOP tri periódy hodín čakaj   ---------

     
    Nedokumentované inštrukcie
     
    top
    InštrukcieOperácieOperandyODITSZAPC
    $D4 zdr AH:=AL div zdr; AL:=AL mod zdr i8 ?????????
    $D5 zdr AL:=(AH*zdr)+AL; AH:=0 i8 ?????????
    $D6 if CF=0 then AL:=0 else AL:=$FF   ?????????

     
    Symboly a operátory vkladaného assembleru
     
    top
    BYTEoznačenie pre slabiku
    WORDoznačenie pre slovo
    DWORDoznačenie pre dvojslovo
    QWORDoznačenie pre 8 slabík
    TBYTEoznačenie pre 10 slabík
    NEARoznačenie blízke adresy
    FARoznačenie vzdialené adresy
    OFFSETvracia adresu ofsetu z výrazu uvedeného za operátorom
    SEGvracia adresu segmentu z výrazu uvedeného za operátorom
    TYPEvracia veľkosť v slabikách výrazu za operátorom
    PTRodkaz do pamäte daný výrazom za operátorom, typ určí výraz pred operátorom

     
    Vysvetlivky pre tabuľku inštrukčného súboru
     
    top
    r (r8, r16)register(osembitový, šestnásťbitový)
    srsegmentový register (DS, ES, CS,...)
    ofrofsetový register (BX, BP, DI, SI,...)
    m (m8, m16, m32)miesto v pamäti (o danom počte bitov)
    i (i8, i16)hodnota (o danom počte bitov)
    cieloznačenie cieľového miesta (podľa povolených operandov)
    zdroznačenie zdrojového miesta (podľa povolených operandov)
    O, D, I, T, S, Z, A, P, Cbity registra príznakov
    +nastavujú sa pri inštrukcii
    -nenastavujú sa pri inštrukcii
    xnedefinovaná hodnota
    ttestujú sa pri inštrukcii
    aregister AX (nebo AH)



    <= =>