Učebnice Assembleru 86
Obsah:

             Instrukce přesunů dat
             Instrukce dosazení adresy
             Instrukce aritmetických operací 
             Instrukce logických operací 
             Instrukce posuvů a rotací
             Instrukce volání, skoků a návratů
             Instrukce řetězcových operací 
             Prefixy opakování a přeskočení 
             Instrukce řízení
             Nedokumentované instrukce
             Symboly a operátory vkládaného assembleru
             Vysvětlivky pro tabulku instrukčního souboru 

             Učebnice Assembleru 86 


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)

Směr

© Mgr. Tomáš Papoušek