M I K R O P R O C E S O R 8 0 8 6 ___________________________________________ soubor instrukci ________________ _______________________________________________________________ Katedra aplikovane elektroniky P R E S U N Y D A T ________________________________________________________________ >>> MOV = presun dat <<< Nemeni priznaky Tvary: MOV reg,reg (oba bud reg8 nebo reg16) MOV reg,ea (reg8 a byte nebo reg16 a word) MOV ea,reg ( " " " " " ) MOV reg,data (reg8,data8 nebo reg16,data16) MOV adr,data (data8 nebo data16) MOV segreg,reg16 (! ne do CS) MOV segreg,ea (! ne do CS) MOV ea,segreg (z CS mozno) MOV reg16,segreg (z CS mozno) ________________________________________________________________ >>> PUSH, PUSHF = ulozeni do zasobniku <<< Nemeni priznaky. Tvar: PUSH reg16 PUSH segreg PUSH ea PUSHF ( ulozi registr F ) ________________________________________________________________ >>> POP, POPF = vyber ze zasobniku <<< Nemeni priznaky, krome POPF Tvary: POP reg16 POP segreg ( ! ne CS ) POP ea POPF ( vybere,ulozi do reg F,zmeni priznaky ) ________________________________________________________________ >>> XCHG = vzajemna zamena obsahu <<< Nemeni priznaky. Tvary: XCHG reg,reg ( oba bud reg8 nebo reg16 ) XCHG ea,reg ( reg8 nebo reg16 ) ________________________________________________________________ >>> XLAT = precteni 1 byte z tabulky <<< Nemeni priznaky. Tvar: XLAT ((AL)<---((BX)+(AL))) (Tabulka je v pameti sestavena po byte, max. delka 256 byte; jeji pocatecni adresa byla predem v BX a ukazatel predem v AL. Vysledek, tj. obsah z adresy (BX)+(AL) bude v AL ) ________________________________________________________________ ________________________________________________________________ >>> LAHF = presun reg. priznaku do reg. AH <<< Nemeni priznaky. Tvar: LAHF bit: 7 6 5 4 3 2 1 0 ----------------- Presune F do AH takto: |S|Z| |A| |P| |C| ----------------- ________________________________________________________________ >>> SAHF = presun reg. AH do reg. priznaku F <<< ! Meni priznaky. Tvar: SAHF (presune obsah reg.AH do reg.F, opak LAHF ) ________________________________________________________________ >>> LDS = presun 4 byte z pameti do DS a reg16 <<< -- Nemeni priznaky. Tvar: LDS reg16,ea ((reg16)<---(ea) ,(ea+1); (DS) <---(ea+2),(ea+3)) ________________________________________________________________ >>> LES = presun 4 byte z pameti do ES a reg16 <<< -- Nemeni priznaky. Tvar: LES reg16,ea (obdoba LDS, ale pro reg. ES ) ________________________________________________________________ >>> LEA = naplneni reg16 adresovym ofsetem <<< Nemeni priznaky. Tvar: LEA reg16,ea ( do reg16 se presune ofset; pouziva se symbolicka adresa ) ________________________________________________________________ >>> IN = vstup dat <<< Nemeni priznaky. Tvary: IN AL,portadr (AL<---(portadr)) IN AX,portadr (AL<--(portadr),AH<--(portadr+1)) (! portadr 0 az 255) IN AL,DX IN AX,DX (16-bitova portadr byla predem v DX; 0 az 64K) ________________________________________________________________ >>> OUT = vystup dat na port <<< Nemeni priznaky. Tvar: OUT portadr,AL (port<---(AL)) OUT portadr,AX (port<---(AL),port+1<---(AH)) (! portadr v rozsahu 0 az 255) OUT DX,AL OUT DX,AX (16-bitova portadr byla predem v DX,rozsah 0 az 64K) _______________________________________________________________ A R I T M E T I C K E O P E R A C E ________________________________________________________________ >>> ADD = soucet <<< ! Meni priznaky A,C,O,P,S,Z. Tvar: ADD reg,reg ( oba reg8 nebo reg16 ) ADD reg,ea ( reg8,reg16; vysledek v reg ) ADD ea,reg ( " " , vysledek v pameti) ADD reg,data ( reg8,data8 nebo reg16,data16 ) ADD ea,data ( data8 nebo data16 ) ________________________________________________________________ >>> ADC = soucet + obsah bitu C <<< ! Meni priznaky A,C,O,P,S,Z Tvar: ADC .......( obdobne jako ADD, ale k vysledku se jeste pripocte 0 nebo 1 ) ________________________________________________________________ >>> SUB = rozdil <<< ! Meni priznaky A,C,O,P,S,Z. Tvar: SUB .......( obdobne jako ADD, ale provede rozdil leveho operandu - praveho operandu ) ________________________________________________________________ >>> SBB = rozdil - obsah bitu C <<< ! Meni priznaky A,C,O,P,S,Z. Tvar: SBB ...... ( obdobne jako SBB, ale od vysledku se jeste odecte 0 nebo 1 ) _________________________________________________________________ >>> CMP = porovnani <<< ! Meni priznaky A,C,O,P,S,Z. Tvar: CMP reg,reg ( oba reg8 nebo reg16 ) CMP reg,ea ( reg8 nebo reg16 ) CMP ea,reg ( " " " ) CMP reg,data ( reg8 a data8 nebo reg16 a data16 ) CMP ea,data ( data8 nebo data16 ) ( provede se fiktivni rozdil levy operand - pravy operand, ale zmeni se jen priznakove bity. To se vyuzije v nasledujicich instrukcich podminecnych skoku ) ________________________________________________________________ ________________________________________________________________ >>> INC = zvyseni obsahu o 1 <<< ! Meni priznaky A,O,P,S,Z ( ne C ). Tvar: INC reg ( reg8 nebo reg16 ) INC ea ________________________________________________________________ >>> DEC = snizeni obsahu o 1 <<< ! Meni priznaky A,O,P,S,Z ( ne C ). Tvar: DEC reg DEC ea ________________________________________________________________ >>> NEG = zmena znamenka (tj. vytvoreni 2-doplnku <<< ! Meni priznaky A,C,O,P,S,Z. Tvar: NEG reg ( reg8 nebo reg16 ) NEG ea ( C se nastavi, je-li operand = 0 ) ________________________________________________________________ >>> MUL = nasobeni bez znamenka <<< ! Meni priznaky C,O a A,P,S,Z (nedefinovany). Tvar: MUL reg8 ( druhy operand v AH, vysledek v AX ) MUL reg16 ( " " AX, " DXAX ) MUL ea ( druhy operand v AH, vysledek v AX nebo druhy op.v AX a vysledek v DXAX ) ( C=O=1 je-li horni polovina vysledku >0; jinak je C=O=0 ) ________________________________________________________________ >>> IMUL = nasobeni se znamenky <<< Obdobne MUL s tim rozdilem, ze: - nasobi cisla se znamenkem ve 2-doplnku - C=O=1 jestlize horni polovina vysledku neni jen znamenkovym rozsirenim znamenka dolni poloviny vysledku. ________________________________________________________________ >>> DIV = deleni bez znamenek <<< ! Meni priznaky A,C,O,P,S,Z - nejsou definovany. Tvar: DIV reg8 (v reg8 je delitel, delenec v AX, podil v AL, zbytek v AH) DIV reg16 (v reg16 je delitel, delenec v DXAX, podil v AX, zbytek v DX) DIV ea (podle delky operandu ) vzdy musi byt delenec dvojnasobne delky nez delitel; je-li treba, musi se na tuto delku prodlouzit, napr CBW, CDW. Presahne-li podil urcene misto (AL, AX), provede se automaticky INT 0. ________________________________________________________________ ________________________________________________________________ >>> IDIV = deleni se znamenky <<< Obdobne jako DIV, ale pri rozsireni delence je nutne respektovat znamenkove prodlouzeni - nutne prodluzovat pomoci CBW, CDW ! ________________________________________________________________ >>> AAA = korekce po souctu BCD cisel v nezhustenem tvaru <<< ( BCD cislo v nezhustenem tvaru = 0000XXXX ) ! Meni priznaky A,C, nedefinovany O,P,S,Z. Tvar: AAA (cislo v AL se upravi do tvaru 0000YYYY; pripadny prenos se pricte k AH ) ________________________________________________________________ >>> AAS = korekce po rozdilu BCD cisel v nezhustenem tvaru <<< Obdobne jako AAA, ale po rozdilu;prenos se odecte od AH. ________________________________________________________________ >>> DAA = korekce po souctu BCD cisel ve zhustenem tvaru <<< ( BCD cislo ve zhustenem tvaru = XXXXYYYY ) ! Meni priznaky A,C,P,S,Z, nedefinovan O. Tvar: DAA (cislo v AL se upravi a prenosem nastavi C ) ________________________________________________________________ >>> DAS = korekce po rozdilu BCD cisel ve zhustenem tvaru <<< Obdobne jako DAA, ale po rozdilu. ________________________________________________________________ >>> AAM = korekce po nasobeni BCD cisel v nezhustenem tvaru << ! Meni priznaky P,S,Z, nedefinovany A,C,O. Tvar: AAM (vysledek nemohl presahnout 99 a je v AH-vyssi rad a v AL-nizsi rad) ) ________________________________________________________________ >>> AAD = korekce po deleni BCD cisel v nezhustenem tvaru <<< ! Meni priznaky P,S,Z, nedefinovany A,C,O. Tvar: AAD (vysledek je v AL, AH=0 ) ________________________________________________________________ ________________________________________________________________ >>> CBW = rozsireni byte-->word vcetne znamenka <<< Nemeni priznaky. Tvar: CBW (cislo v AL se rozsiri na AX; AH=00 pro kladna a FF pro zaporna cisla ) _________________________________________________________________ >>> CWD = rozsireni word-->dword vcetne znamenka <<< Nemeni priznaky. Tvar: CWD (cislo v AX se rozsiri na DXAX; DX=0000 pro kladna a FFFF pro zaporna cisla ) ________________________________________________________________ L O G I C K E O P E R A C E ______________________________________________________________ >>> AND = logicky soucin <<< ! Meni priznaky C,O,P,S,Z, nedefinovano A. Tvar: AND reg,reg (oba reg8 nebo reg16) AND reg,ea (reg8 nebo reg16) AND ea,reg ( " " " ) AND reg,data (reg8 a data8 nebo reg16 a data16) AND ea,data (data8 nebo data16) (provede se log. soucin v kazdem bitu nezavisle) _______________________________________________________________ >>> OR = logicky soucet <<< Obdobne jako AND, ale provede se log. soucin v kazdem bitu. _______________________________________________________________ >>> XOR = exkusivni log. soucet, tj. neekvivalence <<< Obdobne jako OR, ale provede se exklusivni log. soucet. _______________________________________________________________ >>> NOT = negace <<< Nemeni priznaky. Tvar: NOT reg (reg8 nebo reg16) NOT ea (provede se negace ve vsech bitech) ______________________________________________________________ >>> TEST = nastaveni priznaku log. soucinem <<< ! Meni priznaky C,O,P,S,Z, nedefinovano A. Tvar: TEST reg,reg (oba reg8 nebo reg16) TEST reg,ea (reg8 nebo reg16) TEST reg,data (reg8 a data8 nebo reg16 a data16) TEST ea,data (data8 nebo data16) (provede se fiktivni AND, ale nastavi se jen pri- znaky P,S,Z podle vysledku operace. Vzdy je O=C=0) ______________________________________________________________ R O T A C E A P O S U N Y ______________________________________________________________ >>> ROL = rotace vlevo <<< ! Meni priznak C, nedefinovano O. Tvar: ROL reg,1 (rotace o 1 misto; reg8, reg16) ROL ea,1 ( " 1 " ) ROL reg,CL (pocet mist predem v CL; reg8,reg16) ROL ea,CL ( " " " CL) --- ---------------- |C|<---| <------- |--- --- | ---------------- | |--------->---------| ________________________________________________________________ >>> ROR = rotace vpravo <<< Obdobne jako ROL, ale vpravo. --- ---------------- |C|<--->| --------> |--- --- | ---------------- | |---------<----------- _______________________________________________________________ >>> RCL = rotace vlevo pres bit C <<< Obdobne jako ROL, ale rotuje i obsah bitu C. --- ---------------- ----|C|<---| <------- |--- | --- ---------------- | | | -------------------->--------- _______________________________________________________________ >>> RCR = rotace vpravo pres bit C <<< Obdobne jako ROR, ale rotuje i obsah bity C. --- ---------------- ----|C|--->| -------> |--- | --- ---------------- | | | --------------------<--------- ______________________________________________________________ ______________________________________________________________ >>> SHL = logicky posun vlevo <<< >>> SAL = aritmeticky posun vlevo <<< Obe instrukce jsou funkcne shodne. ! Meni priznaky C,P,S,Z, nedefinovany O,A. Tvar: SAL reg,1 (posun o 1 misto; reg8, reg16) SAL ea,1 ( " 1 " ) SAL reg,CL (pocet mist predem v CL; reg8,reg16) SAL ea,CL ( " " " CL) --- ------------- |C|<---------| <------ |<--- 0 --- ------------- _____________________________________________________________ >>> SHR = logicky posun vpravo <<< Obdobne jako SHL, ale vpravo. --- ------------- ---->|C| 0 ---->| -----> |---- | --- ------------- | --------------------<-------------- ______________________________________________________________ >>> SAR = aritmeticky posun vpravo <<< Obdobne jako SHR, ale nejvyssi bit se rozsiruje doprava. --- ---------------- --->|C| ---->| | --------> |---- | --- | ---------------- | | | | | | ---<--- | --------------------------<----------- ______________________________________________________________ S K O K Y A C Y K L Y _______________________________________________________________ >>> JMP = nepodmineny skok <<< Nemeni priznaky. Tvar: JMP navesti (Je-li navesti v tomtez segmentu (typ NEAR), gene- ruje prekladac relativni skok do vzdalenosti max. +-32K od pozice instr. citace. Je-li v jinem seg- mentu (tj. typ FAR), generuje absolutni skok s ba- zi i ofsetem). JMP reg16 (Neprimy skok na adresu ulozenou v reg. Je to of- set, skok je mozny jen v segmentu). JMP ea (Neprimy skok na adresu prectenou z pameti na miste danem "ea". Je-li skok v segmentu, je v pameti jen ofset; je-li skok mezi segmenty, je v pameti na 4 byte baze i ofset). _______________________________________________________________ >>> J.. = podmineny skok <<< Nemeni priznaky. Tvar: J.. navesti (!! max. +- 127 od konce instrukce) Skok se provede, je-li splnena podminka podle nasledujici ta- bulky. U nekterych skoku jsou mozna dve oznaceni, funkcne zcela rovnocenna. jump if: priznaky: ------------------------------------------------------------ JZ = JE | zero = equal | Z=1 JNZ = JNE | not zero = not eq. | Z=0 JP = JPE | parity = parity even | P=1 JNP = JPO | not parity = parity odd | P=0 JO | overflow | O=1 JNO | not overflow | O=0 JS | sign | S=1 JNS | not sign | S=0 JC | carry | C=1 JNC | not carry | C=0 .............................................................. JL = JNGE | less = not greater or eq.| S XOR O=1 JNL = JGE | not less = greater or eq.| S XOR O=0 JLE = JNG | less or eq.= not greater | (S XOR O) OR Z=1 JNLE= JG | not less or eq.= greater | (S XOR O) OR Z=0 JB = JNAE | below = not above or eq. | C=1 JNB = JAE | not below = above or eq. | C=0 JBE = JNA | below or eq.= not above | C OR Z=1 JNBE= JA | not below or eq.= above | C OR Z=0 JCXZ | CX reg. zero | -------------------------------------------------------------- Prva polovina tabulky se tyka testu jednotlivych priznakovych bitu. Ve druhe se vyskytuji slozitejsi podminky, odpovidajici levemu operandu v porovnani s pravym operandem v instrukci CMP. Zde "greater" ( levy op. vetsi nez pravy op.) a "less" (mensi) vyjadruji vztahy pro hodnoty se znamenkem a "above" (nad) a "below" (pod) vztahy bez znamenka. ______________________________________________________________ >>> LOOP = prikaz cyklu <<< Nemeni priznaky. Tvar: LOOP navesti (!! max. vzdalenost +127,-128 od konce instrukce) (Instrukce dekrementuje registr CX a pokud pak jeho obsah neni nulovy, provede skok zpet na navesti; pri CX=0 se prejde k dalsi instrukci). ______________________________________________________________ >>> LOOPZ = LOOPE = prikaz cyklu s testem Z <<< (Oba tvary jsou funkcne shodne). Obdobne instrukci LOOP, ale navic se testuje priznak Z a cyklus se ukonci i pri Z=0 (krome toho i pri CX=0). ______________________________________________________________ >>> LOOPNZ = LOOPNE = prikaz cyklu s testem Z <<< (Oba tvary jsou funkcne shodne). Obdobne instrukci LOOPZ, ale k ukonceni dojde pri Z=1 (krome toho i pri CX=0). _______________________________________________________________ V O L A N I P O D P R O G R A M U A N A V R A T _______________________________________________________________ >>> CALL = volani podprogramu <<< Nemeni priznaky. Tvar: CALL jmeno procedury (Je-li procedura v tomtez segmentu (tj. typ NEAR), generuje prekladac relativni adresu do vzdalenosti max. +-32K od pozice instr. citace. Je-li v jinem segmentu (tj. typ FAR), generuje absolutni adresu s bazi i ofsetem). CALL reg16 (Neprime volani adresy ulozene v reg. Je to of- set, volani je mozne jen v segmentu). CALL ea (Neprime volani adresy prectene z pameti na miste danem "ea". Je-li volani v segmentu, je v pameti jen ofset; je-li volani mezi segmenty,je v pameti na 4 byte baze i ofset. Pokud se v konstrukci "ea" vyskytla symbolicka adresa, musela byt pri volani v segmentu predem definovana jako DD nebo se pou- zije WORD PTR ... ; pri volani mezi segmenty muse- la byt definovana jako DD nebo se pouzije DWORD PTR ... . Jako segmentovy reg. je implicitni DS, pokud je pri konstrukci "ea" pouzit [BP], je implicitni SS ). Ve vsech pripadech se automaticky ulozi do zasobniku adresa navratu. Pri volani v segmentu je to ofset (2 byte), pri volani mezi segmenty je to postupne baze a pak ofset (celkem 4 byte). _______________________________________________________________ >>> RET = navrat z procedury <<< Nemeni priznaky. Tvar: RET (Navrat - ze zasobniku se vybere adresa navratu (2 byte) a vlozi do IP. Pokud se jedna o navrat ve stejnem segmentu, je to vse; pri navratu do jineho segmentu se vyberou jeste dalsi 2 byte a vlozi do seg. reg. CS.Tyto dva pripady rozlisi prekladac podle volani procedury (CALL) - a to NEAR nebo FAR). RET data (Navrat jako v hornim pripade, ale predem (!) se posune ukazatel SP nahoru o pocet byte dany ope- randem "data". To se napr. vyuzije kdyz se proce- dure predavaly parametry pres zasobnik). ______________________________________________________________ P R A C E S R E T E Z C I ______________________________________________________________ >>> MOVSB = presun retezce po bytech <<< Nemeni priznaky. Tvar: MOVSB (Presune 1 byte z dat. segmentu do extra segmentu. Predem se do reg. SI zada adresa zdroje a do DI adr. cile. Po (!) presunu je obsah obou reg. zme- nen o 1. Byl-li predem priznakovy bit D vynulovan, jsou obsahy obou reg. zvyseny; byl-li D=1, jsou obsahy snizeny. Pro prenos vetsiho poctu byte se s vyhodou pouzije instrukce REP ). ______________________________________________________________ >>> MOVSW = presun retezce po slovech <<< Obdobne jako MOVSB, ale presunuje se slovo; obsahy registru SI a DI se meni o 2 ! _______________________________________________________________ >>> CMPSB = porovnani retezcu po bytech <<< ! Meni vsechny priznaky. Tvar: MOVSB (Provede fiktivni rozdil 1 byte z extra segmentu minus byte z datoveho segmentu. Predem se do DI zada adresa v extra seg. a do SI adr. v datovem seg..Vysledkem je nastaveni priznaku, jinak se nic nemeni. Pak se obsah obou reg. zmeni o 1. Byl-li predem priznakovy bit D vynulovan,jsou obsahy obou reg. zvyseny; byl-li D=1, jsou obsahy snizeny. Pro porovnani vetsiho poctu byte se s vyhodou pouziji instrukce REPE, REPNE, REPZ, REPNZ ). _______________________________________________________________ >>> CMPSW = porovnani retezcu po slovech <<< Obdobne jako MOVSB, ale porovnava se slovo; obsahy registru SI a DI se meni o 2 ! _______________________________________________________________ >>> SCASB = prohledani retezce po bytech <<< ! Meni vsechny priznaky. Tvar: SCASB (Provede fiktivni rozdil 1 byte z extra segmentu minus byte z registru AL. Predem se do DI zada adresa v extra seg..Vysledkem je nastaveni pri- znaku, jinak se nic nemeni. Pak se obsah reg. DI zmeni o 1. Byl-li predem priznakovy bit D vynulo- van,je obsah DI zvysen; byl-li D=1, je obsah sni- zen. Pro porovnani vetsiho poctu byte se s vyho- dou pouziji instrukce REPE, REPNE, REPZ, REPNZ ). _______________________________________________________________ >>> SCASW = prohledani retezce po slovech <<< Obdobne jako SCASB, ale porovnava se slovo z extra segmentu s registrem AX; obsah registru DI se meni o 2 ! _______________________________________________________________ >>> LODSB = precteni retezce po bytech <<< Nemeni priznaky. Tvar: LODSB (Presune 1 byte z dat. segmentu do registru AL. Predem se do reg. SI zada adresa zdroje. Po (!) presunu je obsah reg. SI zmenen o 1. Byl-li predem priznakovy bit D vynulovan, je obsah reg. SI zvysen; byl-li D=1, je obsah snizen. Pro pre- nos vetsiho poctu byte se musi obsah AL zpracovat v cyklu; s vyhodou se pouzije instrukce LOOP ). ______________________________________________________________ >>> LODSW = precteni retezce po slovech <<< Obdobne jako LODSB, ale presunuje se slovo do registru AX; obsah reg. SI se meni o 2 ! _______________________________________________________________ >>> STOSB = ulozeni retezce po bytech <<< Nemeni priznaky. Tvar: STOSB (Presune 1 byte z registru AL do extra segmentu. Predem se do reg. DI zada adresa cile. Po (!) presunu je obsah reg. DI zmenen o 1. Byl-li predem priznakovy bit D vynulovan, je obsah reg. DI zvysen; byl-li D=1, je obsah snizen. Pro pre- nos vetsiho poctu byte se s vyhodou pouziji instrukce REP nebo LOOP ). ______________________________________________________________ >>> STOSW = ulozeni retezce po slovech <<< Obdobne jako STOSB, ale presunuje se slovo; obsah registru DI se meni o 2 ! _______________________________________________________________ >>> REP = opakovani <<< Nemeni priznaky. Tvar: REP (Pise se jako predpona, tj.na jedne radce pred instrukci, ktera ma byt opakovana - v uvahu pri- chazi MOVS, STOS. Predem se do CX zada pocet opakovani; REP po provedeni opakovane instrukce dekrementuje CX a opakuje, dokud CX > 0 ) Preruseni behem opakovani je mozne, provede se vzdy pred zpracovanim noveho prvku retezce. Po navratu se pokracuje jeho zpracovanim. Neni vhodne dovolit preruseni tam, kde se kombinuje nekolik predpon (napr LOCK REP ), nebot po navratu je pamatovana jen predpona nejvice vpravo a ostatni zleva prestavaji pusobit ! ______________________________________________________________ >>> REPZ = REPE = opakovani s podminkou Z=0 <<< Oba tvary jsou funkcne shodne. Obdobna jako REP, ale k ukonceni (krome pri CX=0) dojde i pri- znakovym bitem, je-li Z=1 . ______________________________________________________________ >>> REPNZ = REPNE = opakovani s podminkou Z=1 <<< Oba tvary jsou funkcne shodne. Obdobne jako REP, ale k ukonceni (krome pri CX=0) dojde i pri- znakovym bitem, je-li Z=0 . _______________________________________________________________ R I Z E N I P R O C E S O R U _______________________________________________________________ >>> INT = softwarove preruseni <<< ! Meni priznaky, I=T=0. Tvar: INT typ ("typ" je cislo 0 az 255) (Do zasobniku ulozi reg. F a pak vynuluje bity I a T. Dale ulozi registr CS (baze) a IP (ofset). Nakonec provede odskok na adresu prectenou z tabul- ky v pameti (ta je zde v poradi ofset-baze). Ukazatelem do tabulky je cislo 4*typ. Softwarove preruseni funguje stejne jako preruseni hardwarove) ______________________________________________________________ >>> INTO = preruseni podminene priznakem O=1 <<< ! Meni priznaky, I=T=0 Tvar: INTO (Cinnost je shodna s INT 4, ale dojde k ni jen kdyz priznak O=1 ;jinak je instrukce ignorovana). _______________________________________________________________ >>> IRET = navrat z preruseni <<< ! Meni priznaky. Tvar: IRET (Ze zasobniku precte 3 slova a postupne obnovi IP, CS, F ). _______________________________________________________________ >>> ovladani priznaku C, D, I <<< Tvar: CLC | C <--- 0 STC | C <--- 1 CMC | C <--- NOT (C) ------------------------------- CLD | D <--- 0 STD | D <--- 1 ------------------------------- CLI | I <--- 0 STI | I <--- 1 _______________________________________________________________ >>> HLT = zablokovani <<< Nemeni priznaky. Tvar: HLT (Procesor se zablokuje. Obnoveni cinnosti je mozne jen vynulovanim, nemaskovanym prerusenim, nebo maskovanym prerusenim - pokud bylo povoleno (I=1) _______________________________________________________________ >>> WAIT = cekani na vstup TEST <<< Nemeni priznaky. Tvar: WAIT (Procesor se zastavi, je-li vstup TEST=1; dale se testuje opakovane s periodou 5 cyklu hodin. Je-li TEST=0, pokracuje se dalsi instrukci bez cekani. Behem cekani je mozne preruseni, po navratu se ce- ka dale). _______________________________________________________________ >>> LOCK = zamezeni prevzeti sbernice <<< Nemeni priznaky. Tvar: LOCK (Jako predpona, tj. psana ve stejnem radku, pred libovolnou instrukci. Behem instrukce LOCK a te za ni je signal Lock=0; nasleduje-li dalsi instr. s LOCK, vznikne mezi nimi kratka perioda, kdy je Lock=1. Preruseni behem pusobeni LOCK nevznikne, ale je pamatovano). ______________________________________________________________ >>> ESC = predani instrukce do koprocesoru <<< Nemeni priznaky. Tvar: ESC op.kod,ea (op.kod v rozsahu 0 az 63 je urcen koprocesoru; samotny 8086 na nej nereaguje. Data z pameti ( ea ) se objevi na datove sbernici a jsou rovnez urcena jen pro koprocesor ). _______________________________________________________________ >>> NOP = zadna cinnost <<< Obsah IP se zvysi o 1. Jinak se nevykona zadna cinnost. _______________________________________________________________ VYSVETLENI ZKRATEK __________________ reg8........registry AL az DL, AH az DH reg16.......registry AX az DX,SP,BP,SI,DI, ! ne segmentove ! ea..........efektivni adresa, viz dalsi vysvetleni segreg......segmentove registry CS,DS,SS,ES data8.......prima data, 1 byte data16......prima data, 2 byte = 1 word portadr ....adresa brany 8-bitova portadr16...adresa brany 16-bitova byte........slabika, 8 bitu word........slovo, 2 byte dword.......dvojite slovo, 4 byte Efektivni adresa: --------------- 1. Prima adresa. ------------ Tvar: segreg:adr (segreg...jmeno segmentu, nebo segreg. Muze chybet, pak je segment implicitni podle typu instrukce. Je-li uveden, ma prednost. adr......relativni adresa v segmenu, v po- dobe symbolicke konstanty, navesti, vyrazu) Priklad: MOV DX,SS:40H ;neni-li konst. symbolicka, ;musi byt segreg. uveden !!! Priklad: MOV BX,VAL ;BX<-- obsah ze symbolicke ;adresy VAL, implicitni DS: 2. Neprima adresa. -------------- Tvar: segreg:[nreg] (segreg...jako v bode 1 nreg.....kterykoliv z BX,BP,SI,DI. Implicitni segment- SS pro BP a DS pro ostatni) Priklad: LEA BX,PROM ;BX<-- adresa promenne PROM MOV AX,[BX] ;AX<-- obsah pameti adreso- ;vane reg. BX 3. Bazovana adresa. --------------- Tvar: segreg:posuv[breg] nebo segreg:[breg+posuv] nebo segreg:[breg].posuv (vsechny rovnocenne) (segreg...jako v bode 1 breg....."bazovy registr",BX nebo BP posuv....konstanta, navesti, vyraz. Posuv se nemusi pouzivat ! Implicitni segment- DS pro BX, SS pro BP) Priklad: MOV AX,POS[BX] ;adr=konstanta POS plus ;obsah reg. BX Vyznam bazovane adresy: zada se obsah breg, pak se operativ- ne pracuje s posuvem. Typicke pro praci s tabulkami. 4. Indexovana adresa. ----------------- Tvar: formalne shodny s bazovanou adresou, ale misto "bazovych" registru BX,BP se pozivaji "indexregistry" SI,DI. Implicitni segment je vzdy DS. Vyznam indexovane adresy: zada se posuv, pak se operativne pracuje s indexregistry. Typicke pro praci s polem. Pro tento zpusob cinnosti se registry SI a DI hodi lepe nez registry BX,BP v bazovane adrese - nektere instrukce (instr. pro praci s retezci) s nimi operuji automaticky. 5. Bazove indexovana adresa. ------------------------ Tvar: kombinace posuvu, bazoveho a indexoveho registru. Vyznam bazove indexovane adresy: pro slozite datove struk- tury, vyuziva se ve vyssich jazycich; prace v asembleru je problematicka.