Instrukce presunu 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 uloz obsah zdroje r16 --------- sr m16 i PUSHF na vrchol z sobn¡ku uloz obsah F --------- PUSHA do z sobn¡ku uloz 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 ulozen‚ PUSHA --------- LAHF AH:=nizs¡ slabika F --------- SAHF nizs¡ slabika F:=AH ----+++++ XCHG c¡l, zdr vz jemn  vymˆ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 presu¤ hodnotu z portu zdr a,i8 --------- a,DX OUT c¡l, zdr na c¡lov˜ port presu¤ hodnotu zdroje i8,a --------- DX,a ------------------------------------ Instrukce dosazen¡ adresy Instrukce Operace Operandy ODITSZAPC LEA c¡l, zdr do adr. registru dosad adresu offset pamˆti ofr,m --------- LDS c¡l, zdr do registr– DS a adr. reg. dosad obsah ukaz. ofr,m32 --------- LES c¡l, zdr do registr– ES a adr. reg. dosad obsah ukaz. ofr,m32 --------- ------------------------------------ Instrukce aritmetickych 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 c¡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 c¡slo z 2 BCD c¡slic v AX (pred / ) 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 logickych 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 (logicky soucin) 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 (logicky vylu‡ovac¡ soucet) r,m m,r r,i m,i ------------------------------------ Instrukce posuvu a rotac¡ Instrukce Operace Operandy ODITSZAPC SAL c¡l, zdr osmibitovy nebo sestn ctibitovy posuv r,1 +-------+ SHL c¡l, zdr doleva m,1 r,CL m,CL r,i m,i SAR c¡l, zdr osmibitovy nebo sestn ctibitovy aritm.posuv r,1 +-------+ doprava m,1 r,CL m,CL r,i m,i SHR c¡l, zdr osmibitovy nebo sestn ctibitovy posuv r,1 +-------+ doprava m,1 r,CL m,CL r,i m,i ROL c¡l, zdr osmibitov  nebo sestn ctibitov  rotace r,1 +-------+ doleva m,1 r,CL m,CL r,i m,i RCL c¡l, zdr osmibitov  nebo sestn ctibitov  rotace r,1 +-------+ doleva pres CF m,1 r,CL m,CL r,i m,i ROR c¡l, zdr osmibitov  nebo sestn ctibitov  rotace r,1 +-------+ doprava m,1 r,CL m,CL r,i m,i RCR c¡l, zdr osmibitov  nebo sestn ctibitov  rotace r,1 +-------+ doprava pres CF m,1 r,CL m,CL r,i m,i ------------------------------------ Instrukce vol n¡, skoku a n vratu 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¡neny skok na n vest¡ (c¡l=n vest¡) adresa --------- JE c¡l skok na n vˆst¡ pri ZF=1 adresa -----t--- JZ c¡l (je rovno/je nula) adresa JNE c¡l skok na n vˆst¡ pri ZF=0 adresa -----t--- JNZ c¡l (nen¡ rovno/nen¡ nula) adresa JC c¡l skok na n vˆst¡ pri CF=1 adresa --------t JB c¡l adresa JNAE c¡l (je prenos/je n¡ze/nen¡ nad ani rovno) adresa JNC c¡l skok na n vˆst¡ pri CF=0 adresa --------t JAE c¡l adresa JNB c¡l (nen¡ prenos/je nad nebo rovno/nen¡ n¡ze) adresa JS c¡l skok na n vˆst¡ pri SF=1 je- adresa ----t---- JNS c¡l skok na n vˆst¡ pri SF=0 (nen¡ -) adresa ----t---- JO c¡l skok na n vˆst¡ pri OF=1 (je pretecen¡) adresa t-------- JNO c¡l skok na n vˆst¡ pri OF=0 (nen¡ pretecen¡) adresa t-------- JP c¡l skok na n vˆst¡ pri PF=1 adresa -------t- JPE c¡l (je parita/je sud  parita) adresa JNP c¡l skok na n vˆst¡ pri PF=0 adresa -------t- JPO c¡l (nen¡ parita/lich  parita) adresa JA c¡l skok na n vˆst¡ pri (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ˆst¡ pri (CF=1) OR (ZF=1) adresa -----t--t JNA c¡l(je n¡ze nebo rovno/nen¡ nad) adresa JG c¡l skok na n vˆst¡ pri (ZF=0) OR (SF=OF) adresa t---tt--- JNLE c¡l (je vˆts¡/nen¡ mens¡ ani rovno) adresa JGE c¡l skok na n vˆst¡ pri SF=OF adresa t---t---- JNL c¡l (je vˆts¡ nebo rovno/nen¡ mens¡) adresa JL c¡l skok na n vˆst¡ pri SF<>OF adresa t---t---- JNGE c¡l (je mens¡/nen¡ vˆts¡ ani rovno) adresa JLE c¡l skok na n vˆst¡ pri (ZF=1) OR (SF<>OF) adresa t---tt--- JNG c¡l (je mens¡ nebo rovno/nen¡ vˆts¡) adresa JCXZ c¡l skok na n vˆst¡ pri CX=0 (obejdi smy‡ku) adresa --------- LOOP c¡l CX:=CX-1; skok na n vˆst¡ pri CX<>0 adresa -----t--- LOOPE c¡l CX:=CX-1; skok pri (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 pri (CX<>0 AND ZF=0) adresa -----t--- LOOPNZ c¡l (opakuj dokud nen¡ shoda/ 0) adresa INT c¡slo volej obsluhu prerusen¡ c¡slo (0..255) i8 --------- INTO volej INT 4 (obsluha pretecen¡) t-------- IRET n vrat z obsluhy prerusen¡ +++++++++ ------------------------------------ Instrukce retˆzcovych 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 preskocen¡ Instrukce Operace Operandy ODITSZAPC REP instr. CX:=CX-1; opakuj dokud CX<>0 (MOVS a STOS) retˆz.i. xxxxxxxxx REPE instr. CX:=CX-1; opakuj dokud (CX<>0 AND ZF=1) retˆz.i. xxxxxxxxx REPZ instr. opakov n¡ do shody (CMPS a SCAS) REPNE instr. CX:=CX-1; opakuj dokud (CX<>0 AND ZF=0) retˆ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 r¡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. prerus.) --------- WAIT zastavit procesor (do res. nebo nem. prerus.) --------- ESC inst, zdr predej koprocesoru instrukci s operandem inst,r/m --------- LOCK inst po dobu vykon v n¡ instrukce blokuj sbˆrnice --------- NOP tri periody hodin cekej --------- ------------------------------------ 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 oznacen¡ pro slabiku WORD oznacen¡ pro slovo DWORD oznacen¡ pro dvojslovo QWORD oznacen¡ pro 8 slabik TBYTE oznacen¡ pro 10 slabik NEAR oznacen¡ bl¡zk‚ adresy FAR oznacen¡ vzd l. adresy OFFSET vrac¡ adresu ofsetu z vyrazu uveden‚ho za oper torem SEG vrac¡ adresu segmentu z vyrazu uveden‚ho za oper torem TYPE vrac¡ velikost v slabik ch vyrazu za oper torem PTR odkaz do pameti dany vyrazem za oper torem, typ urc¡ vyraz pred 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 funkcn¡ hodnoty funkce ------------------------------------ Vysvetlivky pro tabulku instrukcn¡ho souboru: r (r8, r16) - registr (osmibitovy, sestn ctibitovy) sr - segmentovy registr (DS,ES,CS..) ofr - ofsetovy registr (BX, BP, DI, SI,...) m (m8, m16, m32) - m¡sto v pamˆti (o dan‚m poctu bitu) i (i8, i16) - hodnota (o dan‚m poctu bitu) c¡l - oznacen¡ c¡lov‚ho m¡sta (podle povolenych operandu) zdr - oznacen¡ zdrojov‚ho m¡sta (podle povolenych operandu) O, D, I, T, S, Z, A, P, C - bity registru pr¡znaku: + nastavuj¡ se pri instrukci - nenastavuj¡ se pri instrukci x nedefinovan  hodnota t testuj¡ se pri instrukci a - registr AX (nebo AH)