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)
|