NSWI2 2/2 ZS Principy počítačů a operačních systémů INSTRUKCE Kdybych nařídil generálovi, aby létal od květině ke květině a on by rozkaz neprovedl, nebyla by to chyba generálova, ale moje. král asteroidu 325
NSWI2 2/2 ZS Literatura W.Stallings: Computer Organization & Architecture A.Tanenbaum: Structured Computer Organization J.Bayer et al.: Počítače prořízení N.J.Davis: Computer Organisation
NSWI2 2/2 ZS Instrukční sada styčný bod mezi návrhářem počítače a programátorem v abstraktním smyslu programátor nemá znát fyzický návrh obvodové řešení musí ale znát logický návrh, tedy např. registrový a adresový model
NSWI2 2/2 ZS Instrukční sada Instrukční sada musí být: funkčně úplná musí dovolit uživateli formulovat libovolnou úlohu zpracování jeho dat na vyšší úrovni účinná často opakované funkce by měly být provedeny rychle a za pomoci malého počtu instrukcí (jasná - požadavky na zdroje jasně určitelné)
NSWI2 2/2 ZS Instrukční sada Pokud možno, měla by být i ortogonální definice instrukcí, datových typů a způsobů adresování jsou nezávislé kompatibilní s existujícím softwarem i hardwarem
NSWI2 2/2 ZS Obsah instrukce Popis instrukční sady musí pro každou instrukci definovat:. operační kód (jaká operace má být vykonána) 2. odkaz a určení zdrojových operandů 3. umístění a určení výsledku 4. odkaz na další instrukci
NSWI2 2/2 ZS Syntaxe instrukční sady nutná součást návrhu instrukční sady určuje části, ze kterých je instrukce složena: operační kód (instrukční kód) argumenty pro dekodér musí být co nejjednodušší
NSWI2 2/2 ZS Modalita instrukcí modalita operačního kódu např. směr rotace modalita operandů např. velikost a umístění modalita ochrany (paměti) např. úroveň procesu
NSWI2 2/2 ZS Modalita operačního kódu upřesnění operace směr a vzdálenost rotace způsob testování podmínky v podmíněném skoku směr operace load/store použití operandů (paměť / registry) úprava výsledku po provedení operace
NSWI2 2/2 ZS Modalita operandů způsob adresace přímé, nepřímé,... velikost a typ operandů stejnou instrukci možno vykonat nad různými daty ovlivňuje přípravu instrukce vícestupňové načítání vícenásobné načítání
NSWI2 2/2 ZS Modalita ochrany přístupová práva k operandům ochrana paměti právo vykonání instrukce ochrana OS, procesu
NSWI2 2/2 ZS Operační kód vyžadována jasná definice, co má instrukce provést znávrhupočítače plyne, co znamenají jednotlivé části operačního kódu... později
NSWI2 2/2 ZS Dělení instrukcí I Podle počtu operandů bezadresové jednoadresové dvouadresové tříadresové (čtyřadresové)
NSWI2 2/2 ZS Bezadresové instrukce bez operandů NOP, RET operandy dány implicitně konkrétní operand dán operačním kódem CLI, TBA operace nad zásobníkem zásobníková architektura všechny operandy jsou na zásobníku instrukce ze zásobníku vyzvedne potřebný počet instrukce je vykonána případný výsledek je uložen zpět na zásobník
NSWI2 2/2 ZS Jednoadresové instrukce zbývající dvě adresy (operandy) dány implicitně obvyklé pro akumulátorovou architekturu ADD x... Acc := Acc + x
NSWI2 2/2 ZS Dvouadresové instrukce jedna z adres je použita jak pro operand, tak pro výsledek Velmi obvyklé SUB A,4... A := A 4
NSWI2 2/2 ZS Tříadresové instrukce určeny jak oba operandy, tak umístění výsledku se zvyšováním rychlosti pamětí roste flexibilita počítače a dává velké možnosti dobrým kompilátorům vyhněte ě se problémům ů s udržováním dž dat v omezené sadě registrů a používejte jako velkou sadu registrů primární paměť. pro větší délku instrukcí a výslednou délku instrukčního slova se nepoužívá často
NSWI2 2/2 ZS Y =(A (A B) / (C+D*E) Y = AB CDE*+/ 3 adresové 2 adresové adresové adresové SUB YA Y,A,B MOV YA Y,A LOAD D PUSH A MUL ADD DIV T,D,E TTC T,T,C Y,Y,T SUB Y,B MOV TD T,D MUL ADD DIV T,E TC T,C Y,T MUL ADD STORE LOAD SUB DIV STORE E C Y A B Y Y PUSH SUB PUSH PUSH PUSH MUL ADD DIV POP B C D E Y
NSWI2 2/2 ZS Zápis výrazu Infixová notace Prefixová notace Postfixová notace (A-B) / (C+D*E) /-AB+C*DE AB-CDE*+/ (převod z infixové notace pomocí gramatiky výrazu)
NSWI2 2/2 ZS (A B) / (C+D*E) / /-AB+C*DE - + AB-CDE*+/ A B C * D E
NSWI2 2/2 ZS Gramatika aritmetického výrazu EXP : TERM : EXP + TERM EXP - TERM TERM ; TERM * FACTOR TERM / FACTOR FACTOR ; FACTOR : ( EXP ) identifier ;
NSWI2 2/2 ZS Reverzní polská notace Snadný výpočet pomocí zásobníku: vstup: výraz v RPN zpracování: číslo: uložit na zásobník operace: vyzvednout ze zásobníku potřebný počet argumentů provést operaci výsledek uložit na zásobník výstup: hodnota výrazu je uložena na zásobníku
NSWI2 2/2 ZS Dělení instrukcí II Podle typu operace. aritmetické operace 2. logické operace 3. operace pro přesun dat uvnitř počítače 4. operace pro vstup/výstup dat do/z počítače 5. řídící operace
NSWI2 2/2 ZS. aritmetické instrukce základní výpočetní operace + * / abs, neg, inc, dec speciální aritmetické operace práce v plovoucí řádové čárce logaritmy, odmocniny,... konverze, překlady
NSWI2 2/2 ZS 2. logické instrukce Booleovské operace AND, OR, NOT, XOR Porovnávání, test pouze nastavení příznaků Posuny a rotace pozor na význam zpracovávaných dat, znaménko
NSWI2 2/2 ZS Booleovské operace Základní operace unární NOT (, ~,!) binární OR (+, ), AND (, &) Odvozené operace XOR, NOR, NAND, XNOR,... Pravdivostní tabulky A NOT A B OR AND XOR NOR NAND XNOR
NSWI2 2/2 ZS Příklady logických operací OR AND OR 53 6 OR C9 6 = DB 6 AND 53 6 AND C9 6 = 4 6 XOR NOT 53 6 XOR C9 6 = 9A 6 NOT C9 6 = 36 6
NSWI2 2/2 ZS Operace posunu Logické posuny posouvají bity operandu o N míst vlevo/vpravo uvolněné bity nastaveny na Aritmetický posun vpravo zleva vstupuje hodnota nejvyššího bitu Rotace cyklický posun bitů o N míst vlevo/vpravo
NSWI2 2/2 ZS Příklady operací posunu hif f Shif Ri h Shift Left 3 6 SHL 2 = 46 6 Shift Right 3 6 SHR 2 = 4 6 Rotate Left Shift Arithmetic Right Rotate Left C9 6 ROL 2 = 27 6 Shift Arithmetic Right C9 6 SAR 2 = F2 6
NSWI2 2/2 ZS 3. přesuny dat typické pro Load/Store architekturu přenos obsluha blh start, test 4. vstup/výstup
NSWI2 2/2 ZS 5. řídící instrukce skoky nepodmíněný, podmíněný volání podprogramu, návrat řízení např.: halt, wait, nop skip execute
NSWI2 2/2 ZS Určení argumentů implicitně parametry dány použitou instrukcí explicitně součástí zápisu instrukce je odkaz na parametry Nutno jasně definovat při návrhu instrukční sady
NSWI2 2/2 ZS Způsoby adresace immediate bezprostřední zápis dat v instrukci direct v instrukci zapsána adresa operandu indirect odkaz do paměti, kde je adresa oper. indexed k zadané adrese je přičten index based adresa tvoří posunutí vzhledem k bázi relative vzhledem k adresovému čítačiči
NSWI2 2/2 ZS Immediate Mode operand je obsažen v instrukci data jsou za běhu kódu konstantní po načtení instrukce není třeba přistupovat do paměti velikost operandu je omezená opcode data
NSWI2 2/2 ZS Direct Mode v instrukci je zapsána adresa operandu k vykonání instrukce je třeba navíc přístup k paměti rozsah adres limitován velikostí instrukce adresa operandu je konstatní, data se mohou měnit opcode addr data
NSWI2 2/2 ZS Indirect Mode v instrukci je adresa, na které se v paměti nachází operand k vykonání instrukce jsou třeba 2 přístupy navíc: načtení č adresy operandu přístup k operandu data opcode addr addr
NSWI2 2/2 ZS Indexed Mode, Base Mode výsledná adresa složena ze dvou částí: základ posunutí velmi podobné, někdy se nerozlišuje při rozlišování např. podle toho, kdo to dělá: indexed: v programu pro přístup p k datům based: v OS pro implementaci ochrany/segmentace
NSWI2 2/2 ZS Indexed mode opcode index i-reg base + data
NSWI2 2/2 ZS Based mode base opcode b-reg offset + data
NSWI2 2/2 ZS Relative Mode operand je určen relativně vzhledem k programovému čítači opcode rel
NSWI2 2/2 ZS Adresace s použitím registrů Některá ze zúčastněných adres je z domény registrů, nikoli hlavní paměti Register addressing jako direct, ale adresová část určuje registr Register indirect jako indirect, ale adresová část určuje registr, který obsahuje adresu operandu
NSWI2 2/2 ZS Automatické změny argumentů Např.. pre- a. -increment 2. post- b. -decrement automatický posun na další zpracovávaná data je součástí logiky instrukce typické pro přesuny dat a konverze typické v kombinaci s nepřímým adresováním
NSWI2 2/2 ZS Kombinace přístupy možno kombinovat: base with scaled index and displacement LA = (SR) + (I)*S + (B) + A