Instrukční soubor 80[2]86

Obsah:



Instrukce přesunů dat
Instrukce     Operace                                     Operandy ODITSZAPC
MOV 
cíl, zdr  cíl:=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íku ulož obsah zdroje       r16      ---------
                                                          sr
                                                          m16
                                                          i
PUSHF         na vrchol zásobníku ulož obsah F                     ---------
PUSHA         do zásobníku ulož AX,CX,DX,BX,SP,BP,SI,DI            ---------
POP cíl       z vrcholu zásobníku umísti do cíle          r16      ---------
                                                          sr
                                                          m16
POPF          slovem z vrcholu zásobníku vyplň F                   +++++++++
POPA          ze zásobníku obnov registry uložené PUSHA            ---------
LAHF          AH:=nižší slabika F                                  ---------
SAHF          nižší slabika F:=AH                                  ----+++++
XCHG cíl, zdr vzájemná výměna hodnot zdroje a cíle        AX,r16   ---------
                                                          m,r
                                                          r,r
XLAT          AL:=BYTE PTR DS:[BX+AL]                              ---------
IN cíl, zdr   do cíle přesuň hodnotu z portu zdr          a,i8     ---------
                                                          a,DX
OUT cíl, zdr  na cílový port přesuň hodnotu zdroje        i8,a     ---------
                                                          DX,a


Instrukce dosazení adresy
Instrukce     Operace                                     Operandy ODITSZAPC
LEA 
cíl, zdr  do adr. registru dosaď adresu offset paměti ofr,m    ---------
LDS cíl, zdr  do registrů DS a adr. reg. dosaď obsah ukaz.ofr,m32  ---------
LES cíl, zdr  do registrů ES a adr. reg. dosaď obsah ukaz.ofr,m32  ---------


Instrukce aritmetických operací
Instrukce     Operace                                     Operandy ODITSZAPC
ADD 
cíl, zdr  cíl:=cíl+zdr                                r,r      +---+++++
                                                          r,m
                                                          m,r
                                                          r,i
                                                          m,i
ADC cíl, zdr  cíl:=cíl+zdr+CF                             r,r      +---+++++
                                                          r,m
                                                          m,r
                                                          r,i
                                                          m,i
INC cíl       cíl:=cíl+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 korekce po +)            x---+++++
SUB cíl, zdr  cíl:=cíl-zdr                                r,r      +---+++++
                                                          r,m
                                                          m,r
                                                          r,i
                                                          m,i
CMP cíl, zdr  F:=cíl-zdr                                  r,r      +---+++++
                                                          r,m
                                                          m,r
                                                          r,i
                                                          m,i
SBB cíl, zdr  cíl:=cíl-zdr-CF                             r,r      +---+++++
                                                          r,m
                                                          m,r
                                                          r,i
                                                          m,i
DEC cíl       cíl:=cíl-1                                  r        +---+++++
                                                          m
NEG cíl       cíl:=(-1)*cíl                               r        +---++++1
                                                          m
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 korekce po -)            x---+++++
MUL zdr       AX:=AL*zdr (* bez znaménka)                 r8       +---xxxx+
                                                          m8
              DX:AX:=AX*zdr (* bez znaménka)              r16
                                                          m16
IMUL zdr      AX:=AL*zdr (* se znaménkem)                 r8       +---xxxx+
                                                          m8
              DX:AX:=AX*zdr (* se znaménkem)              r16
                                                          m16
IMUL cíl,zdr  cíl:=cíl*zdr (* se znaménkem)               r16,i8
IMUL cíl,z1,z2cíl:=z1*z2 (* se znaménkem)                 r16,r16,i
                                                          r16,m16,i
AAM           AX:=2 BCD číslice z AX (BCD korekce po *)            x---++x+x
DIV zdr       AL:=AX div zdr; AH:=AX mod zdr              r8       x---xxxxx
              (/ bez znaménka)                            m8
              AX:=DX:AX div zdr; DX:=DX:AX mod zdr        r16
              (/ bez znaménka)                            m16
IDIV zdr      AL:=AX div zdr; AH:=AX mod zdr              r8       x---xxxxx
              (/ se znaménkem)                            m8
              AX:=DX:AX div zdr; DX:=DX:AX mod zdr        r16
              (/ se znaménkem)                            m16
AAD           AX:=bin číslo z 2 BCD číslic v AX (před / )          x---++x+x
CBW           AX:=AL se zachováním znam (slabika->slovo)           ---------
CWD           DX:AX:=AX se zachováním znam (slovo->dvojslovo)      ---------


Instrukce logických operací
Instrukce     Operace                                     Operandy ODITSZAPC
NOT 
cíl       cíl:=not(cíl)                               r        ---------
                                                          m
AND cíl, zdr  cíl:=cíl and zdr (logický součin)           r,r      0---++x+0
                                                          r,m
                                                          m,r
                                                          r,i
                                                          m,i
TEST cíl, zdr F:=cíl and zdr                              r,r      0---++x+0
              (logický součin bez změny operandů)         r,m
                                                          m,r
                                                          r,i
                                                          m,i
OR cíl, zdr   cíl:=cíl or zdr                             r,r      0---++x+0
              (logický součet)                            r,m
                                                          m,r
                                                          r,i
                                                          m,i
XOR cíl, zdr  cíl:=cíl xor zdr                            r,r      0---++x+0
              (logický vylučovací součet)                 r,m
                                                          m,r
                                                          r,i
                                                          m,i


Instrukce posuvů a rotací
Instrukce     Operace                                     Operandy ODITSZAPC
SAL 
cíl, zdr  osmibitový nebo šestnáctibitový posuv       r,1      +-------+
SHL cíl, zdr  doleva                                      m,1
                                                          r,CL
                                                          m,CL
                                                          r,i
                                                          m,i
SAR cíl, zdr  osmibitový nebo šestnáctibitový aritm.posuv r,1      +-------+
              doprava                                     m,1
                                                          r,CL
                                                          m,CL
                                                          r,i
                                                          m,i
SHR cíl, zdr  osmibitový nebo šestnáctibitový posuv       r,1      +-------+
              doprava                                     m,1
                                                          r,CL
                                                          m,CL
                                                          r,i
                                                          m,i
ROL cíl, zdr  osmibitová nebo šestnáctibitová rotace      r,1      +-------+
              doleva                                      m,1
                                                          r,CL
                                                          m,CL
                                                          r,i
                                                          m,i
RCL cíl, zdr  osmibitová nebo šestnáctibitová rotace      r,1      +-------+
              doleva přes CF                              m,1
                                                          r,CL
                                                          m,CL
                                                          r,i
                                                          m,i
ROR cíl, zdr  osmibitová nebo šestnáctibitová rotace      r,1      +-------+
              doprava                                     m,1
                                                          r,CL
                                                          m,CL
                                                          r,i
                                                          m,i
RCR cíl, zdr  osmibitová nebo šestnáctibitová rotace      r,1      +-------+
              doprava přes CF                             m,1
                                                          r,CL
                                                          m,CL
                                                          r,i
                                                          m,i


Instrukce volánískoků a návratů
Instrukce     Operace                                     Operandy ODITSZAPC
CALL 
cíl      nepodm. volání podprogramu (cíl=jm. podpgm) adresa   ---------
RET           návrat z podprogramu                                 ---------
JMP cíl       nepodmíněný skok na návěští (cíl=návěští)   adresa   ---------
JE cíl        skok na návěští při ZF=1                    adresa   -----t---
JZ cíl        (je rovno/je nula)                          adresa
JNE cíl       skok na návěští při ZF=0                    adresa   -----t---
JNZ cíl       (není rovno/není nula)                      adresa
JC cíl        skok na návěští při CF=1                    adresa   --------t
JB cíl                                                    adresa
JNAE cíl      (je přenos/je níže/není nad ani rovno)      adresa
JNC cíl       skok na návěští při CF=0                    adresa   --------t
JAE cíl                                                   adresa
JNB cíl       (není přenos/je nad nebo rovno/není níže)   adresa
JS cíl        skok na návěští při SF=1 (je -)             adresa   ----t----
JNS cíl       skok na návěští při SF=0 (není -)           adresa   ----t----
JO cíl        skok na návěští při OF=1 (je přetečení)     adresa   t--------
JNO cíl       skok na návěští při OF=0 (není přetečení)   adresa   t--------
JP cíl        skok na návěští při PF=1                    adresa   -------t-
JPE cíl       (je parita/je sudá parita)                  adresa
JNP cíl       skok na návěští při PF=0                    adresa   -------t-
JPO cíl       (není parita/lichá parita)                  adresa
JA cíl        skok na návěští při (CF=0) AND (ZF=0)       adresa   -----t--t
JNBE cíl      (je nad/není pod ani rovno)                 adresa
JBE cíl       skok na návěští při (CF=1) OR (ZF=1)        adresa   -----t--t
JNA cíl       (je níže nebo rovno/není nad)               adresa
JG cíl        skok na návěští při (ZF=0) OR (SF=OF)       adresa   t---tt---
JNLE cíl      (je větší/není menší ani rovno)             adresa
JGE cíl       skok na návěští při SF=OF                   adresa   t---t----
JNL cíl       (je větší nebo rovno/není menší)            adresa
JL cíl        skok na návěští při SF<>OF                  adresa   t---t----
JNGE cíl      (je menší/není větší ani rovno)             adresa
JLE cíl       skok na návěští při (ZF=1) OR (SF<>OF)      adresa   t---tt---
JNG cíl       (je menší nebo rovno/není větší)            adresa
JCXZ cíl      skok na návěští při CX=0 (obejdi smyčku)    adresa   ---------
LOOP cíl      CX:=CX-1; skok na návěští při CX<>0         adresa   -----t---
LOOPE cíl     CX:=CX-1; skok při (CX<>0 AND ZF=1)         adresa   -----t---
LOOPZ cíl     (opakuj dokud je shoda/opakuj dokud je 0)   adresa
LOOPNE cíl    CX:=CX-1; skok při (CX<>0 AND ZF=0)         adresa   -----t---
LOOPNZ cíl    (opakuj dokud není shoda/ 0)                adresa
INT číslo     volej obsluhu přerušení číslo (0..255)      i8       ---------
INTO          volej INT 4 (obsluha přetečení)                      t--------
IRET          návrat z obsluhy přerušení                           +++++++++ 


Instrukce řetězcových operací
Instrukce     Operace                                     Operandy ODITSZAPC
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   --------- 


Prefixy opakování a přeskočení
Instrukce     Operace                                     Operandy ODITSZAPC
REP 
instr.    CX:=CX-1; opakuj dokud CX<>0 (MOVS a STOS)  řetěz.i. xxxxxxxxx
REPE instr.   CX:=CX-1; opakuj dokud (CX<>0 AND ZF=1)     řetěz.i. xxxxxxxxx
REPZ instr.   opakování do shody (CMPS a SCAS)
REPNE instr.  CX:=CX-1; opakuj dokud (CX<>0 AND ZF=0)     řetěz.i. xxxxxxxxx
REPNZ instr.  opakování dokud není shoda (CMPS a SCAS)
SEGCS instr.  adresa v instrukci ze vztahuje k CS         pam.ins. xxxxxxxxx
SEGDS instr.  adresa v instrukci ze vztahuje k DS         pam.ins. xxxxxxxxx
SEGES instr.  adresa v instrukci ze vztahuje k ES         pam.ins. xxxxxxxxx
SEGSS instr.  adresa v instrukci ze vztahuje k SS         pam.ins. xxxxxxxxx


Instrukce řízení
Instrukce     Operace                                     Operandy ODITSZAPC
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           zastavit procesor (do res. nebo nem. přeruš.)        ---------
WAIT          zastavit procesor (do res. nebo nem. přeruš.)        ---------
ESC inst, zdr předej koprocesoru instrukci s operandem    inst,r/m ---------
LOCK inst     po dobu vykonávání instrukce blokuj sběrnice         ---------
NOP           tři periody hodin čekej                              ---------


Nedokumentované instrukce
Instrukce     Operace                                     Operandy ODITSZAPC
$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 vkládaného assembleru
BYTE 
         označení pro slabiku
WORD          označení pro slovo
DWORD         označení pro dvojslovo
QWORD         označení pro 8 slabik
TBYTE         označení pro 10 slabik
NEAR          označení blízké adresy
FAR           označení vzdálené adresy
OFFSET        vrací adresu ofsetu z výrazu uvedeného za operátorem
SEG           vrací adresu segmentu z výrazu uvedeného za operátorem
TYPE          vrací velikost v slabikách výrazu za operátorem
PTR           odkaz do paměti daný výrazem za operátorem, 
              typ určí výraz před operátorem
@CODE         vrací adresu aktuálního segmentu programu (SEG @CODE)
@DATA         vrací adresu aktuálního datového segmentu (SEG @DATA)
@RESULT       proměnná pro návrat funkční hodnoty funkce


Vysvětlivky pro tabulku instrukčního souboru:
r (r8, r16)
- registr (osmibitový, šestnáctibitový)
sr - segmentový registr (DS, ES, CS,...)
ofr - ofsetový registr (BX, BP, DI, SI,...)
m (m8, m16, m32) - místo v paměti (o daném počtu bitů)
i (i8, i16) - hodnota (o daném počtu bitů)
cíl - označení cílového místa (podle povolených operandů)
zdr - označení zdrojového místa (podle povolených operandů)
O, D, I, T, S, Z, A, P, C - bity registru příznaků:
  + nastavují se při instrukci
  - nenastavují se při instrukci
  x nedefinovaná hodnota
  t testují se při instrukci
a - registr AX (nebo AH)

© 1996-1997 Mgr. Tomáš Papoušek

Tento text je možné používat pro studijní účely bez omezení. V případě komerčního využití kontaktujte autora.