100 likes | 204 Views
Instrukce procesoru. Strojová instrukce. je v informatice označení kódovaného příkazu pro provedení elementární operace procesoru, kterou je procesor schopen přímo vykonat (procesor je základní součástí počítače).
E N D
Strojová instrukce • je v informatice označení kódovaného příkazu pro provedení elementární operace procesoru, kterou je procesor schopen přímo vykonat (procesor je základní součástí počítače). • Posloupnost strojových instrukcí je označována jako strojový kód. Různé procesory mají různé sady strojových instrukcí. • Některé procesory podporují více sad strojových instrukcí (např. současné procesory pro počítače IBM PC kompatibilní podporují sadu x86-16, IA-32 a x86-64, které se celkově označují jako x86).
Zápis strojové instrukce • Funkce strojové instrukce se pojmenovává tzv. mnemonikou. Za mnemonikou mohou (ale nemusí) následovat operandy, neboli parametry dané strojové instrukce. • Mnemonika • Mnemoniky se většinou skládají z několika písmen zkratkovitě v angličtině naznačujících funkci dané strojové instrukce. • Například mnemonika SUB (z anglického SUBtract - odečti) se může použít pro operaci odečítání, • sub a1, a2; • mnemonika CMP (CoMPare) může být použita pro označení strojové instrukce pro porovnání dvou čísel. • cmp a1, a2; • Pro zápis ani pro implementaci instrukcí neexistují jednotná pravidla, každá rodina procesorů (nebo také architektura) má vlastní instrukční sadu s vlastními mnemonikami, kterou vytváří výrobce procesoru.
Zápis strojové instrukce • Operand • Jestliže mnemonika označuje co daná strojová instrukce dělá, její operandy určují s čím. Jinými slovy, operand určuje zdrojová nebo cílová data, nad kterými daná strojová instrukce pracuje. • sub a1, a2; • cmp a1, a2; • Operand bývá buď konstantou, nebo adresou v některém z paměťových prostorů počítače. • Typicky jsou to adresový prostor registrů a operační paměti. • Adresa může být určena buď přímo (tzv. přímé adresování) - jako konstanta určující index buňky v operační paměti počítače. Druhou základní možností je nepřímé adresování, kdy je operandem registr jehož obsah je interpretován jako index buňky v operační paměti počítače.
Příklady instrukcí • add r0, r2; – sčítání - přičte do registru r0 hodnotu uloženou v registru r2 • addc r1, r3; – sčítání s přenosem - přičte do registru r0 hodnotu registru r1 a příznaku přenosu C • mov 1234h, r0; – přesun - uloží do paměti na adresu 1234h hodnotu z registru r0 • mov [r7], r0; – přesun - uloží na adresu určenou registrem r7 hodnotu z registru r0 • cmp r4, r5; – porovnání - porovná hodnoty registrů r4 a r5 • jmp END_IF – podmíněný skok • jmp r4>, 8100h; – podmíněný skok - pokud byla hodnota registru r4 vyšší, pokračuje program na adrese 8100h • Strojové instrukce se dělí podle svého určení na přesunové, aritmeticko-logické a řídící instrukce. Výrobci většinou používají mnohem jemnější rozdělení (např. přesuny, aritmetické, logické, rotace, násobení a dělení, skoky, zásobníkové, systémové instrukce). • U některých architektur není situace tak jasná. Například přesunová strojová instrukce, která změní hodnotu v systémovém registru procesoru de-facto přebírá funkci systémové instrukce.
Přesunové instrukce • Přesunové slouží ke kopírování dat v paměti. • Tyto instrukce mají typicky mnemoniku MOV (z angl. move - přesun), případně LD nebo ST (load, store). • Prakticky vždy mají dva operandy - zdrojový a cílový, kdy hodnota uložená ve zdrojovém operandu je uložena do cílového operandu.
Aritmeticko-logické instrukce • Aritmeticko-logické instrukce slouží k vykonávání aritmetických nebo logických operací. • V podstatě jde o to, že se zdrojovými operandy se provede určitá matematická operace, jejíž výsledek je uložen do cílového operandu. • Velmi častý je případ, kdy jeden ze zdrojových operandů slouží současně jako cílový. To znamená, že např. instrukce add r0, r1 nejprve sečte hodnoty registrů r0 a r1, přičemž výsledek uloží do registru r0. • Typickými funkcemi aritmeticko-logických instrukcí jsou : • sčítání (ADD), • odečítání (SUB), • porovnávání (CMP), • bitové logické součty (OR) • logické součiny (AND), • bitové posuny a rotace. • Aritmetické nebo logické nemusí být vždy dvouoperandové, instrukce realizující např. absolutní hodnotu, násobení mínus jedničkou, nebo dvojkový doplněk mají pouze jeden operand. • Podle možností daného procesoru se liší šířka operandů (8/16/32 bitů) a jejich typ. Některé procesory (např. PIC) mají pouze instrukce pro jednoduché operace s malými celými čísly (viz byte), jiné mohou přímo pracovat s čísly v plovoucí řádové čárce.
Instrukce a příznakové registry • Záměrným vedlejším efektem provedení instrukce obvykle bývá určité nastavení příznakových bitů v procesoru, který za tímto účelem obsahuje takzvaný registr příznaků. • Registr příznaků využívají především podmíněné skoky a instrukce pro přičítání nebo odečítání s přenosem. • Způsob nastavování příznaků bývá obvykle pro určitou skupinu instrukcí stejný. Zvláštní funkci z tohoto hlediska zastávají instrukce pro porovnávání, protože nemění hodnotu svých operandů, ale pouze nastavují příznakové bity (anglicky flags). • Téměř vždy jsou přítomny příznakové bity : • N - negative - nastavuje se, když je výsledkem operace záporné číslo • Z - zero - nastavuje se, když je výsledkem operace nula • C nebo CY - carry - nastavuje se, když došlo při sčítání k přenosu. Při odčítání nebo porovnávání se nastavuje jako výpůjčka, nebo jako negace výpůjčky, to závisí na architektuře CPU. • V nebo OV - overflow - nastavuje se, pokud došlo při operaci k přetečení • Různé procesory mohou implementovat více, ale jen výjimečně méně příznakových bitů.
Řídící instrukce • Tyto instrukce mění buď tok programu, nebo způsob, jakým procesor funguje. • Základní řídící instrukcí je instrukce skoku (typicky má mnemoniku JMP), která říká, že vykonávání programu nepokračuje následující instrukcí, ale instrukcí která je uložena na adrese definované operandem instrukce JMP. • Podobnou funkci má instrukce podmíněného skoku, která se používá v kombinaci s instrukcemi nastavujícími příznakové bity k větvení programu. Ke skoku dojde pouze za předpokladu, že jsou určitým způsobem nastaveny příznakové bity procesoru. Následující instrukce podmíněného skoku (např. JMPR CC_NZ, 1234h - skoč, když není nastaven příznak Z - zero) může například "přehodit výhybku programu", pokud výsledkem kontrolního součtu nebyla nula. • Opakovaně využívané sekvence kódu je možné vyvolat pomocí instrukce volání podprogramu (typicky "CALL"), konec podprogramu označuje instrukce návratu z podprogramu (typicky "RET" nebo "RETURN"). • Kromě toho mohou některé instrukce měnit způsob chodu procesoru, který může být přepínán mezi dvěma různými soubory instrukcí - mezi "ARM" módem a "thumb" módem. Přičemž instrukční soubor ARM je optimalizovaný na rychlost, zatímco instrukční soubor "thumb" je optimalizovaný na velikost kódu.
Kódování instrukcí • Aby mohly být instrukce vykonávány procesorem, je nutno je uložit do polovodičové paměti, jako sekvence několikaciferných dvojkových čísel. Tato sekvence se nazývá strojový kód. • Výrobce procesoru proto pro každou instrukci definuje, jakým způsobem má být zakódována do paměti počítače. • Výrobce procesoru může například stanovit, že každá instrukce je zakódována pomocí 16 bitů (neboli dvojkových cifer). • do prvních šesti bitů se zakóduje mnemonika instrukce (šestibitové číslo dovolí implementovat 64 typů instrukcí - mnemonik), • do druhých pěti bitů se zakóduje první operand, • do posledních pěti bitů se zakóduje druhý operand. • Ve skutečnosti bývá kódování instrukcí mnohem složitější, avšak princip je stejný.