Strojový kód

Strojový kód je počítačový program napsaný ve strojovém jazyce. Používá instrukční sadu konkrétní počítačové architektury. Obvykle je zapsán v binární soustavě. Strojový kód je nejnižší úrovní softwaru. Ostatní programovací jazyky se překládají do strojového kódu, aby je počítač mohl spustit.

Instrukce říká procesu, jakou operaci má provést. Každá instrukce se skládá z opkódu (kódu operace) a operandů. Operandy jsou obvykle adresy paměti nebo data. Instrukční sada je seznam opkódů, které má počítač k dispozici. Strojový kód je to, do čeho se kompiluje nebo interpretuje kód assembleru a dalších programovacích jazyků.

Tvůrci programů převádějí kód do jiného jazyka nebo strojového kódu. Strojový kód se někdy nazývá nativní kód. Ten se používá, když se mluví o věcech, které fungují jen na některých počítačích.

Zápis strojového kódu

Strojový kód může být zapsán v různých formách:

  • Pomocí řady přepínačů. Tím se generuje posloupnost 1 a 0. To se používalo v počátcích výpočetní techniky. Od 70. let 20. století se již nepoužívá.
  • Použití editoruHex. Ten umožňuje místo čísla příkazu použít opcodes.
  • Použití assembleru. Asembler je jednodušší než opcodes. Jejich syntaxe je srozumitelnější než strojový jazyk, ale obtížnější než jazyky vyšší úrovně. Assembler sám přeloží zdrojový kód do strojového kódu.
  • Použití vysokoúrovňového programovacího jazyka umožňuje vytvářet programy, které používají kód, který se snadněji čte a píše. Tyto programy se překládají do strojového kódu. Překlad může probíhat v mnoha krocích. Programy v jazyce Java jsou nejprve optimalizovány do bajtového kódu. Poté je při použití přeložen do strojového jazyka.
Přední panel raného minipočítače s přepínači pro zadávání strojového kóduZoom
Přední panel raného minipočítače s přepínači pro zadávání strojového kódu

Typické instrukce strojového kódu

V instrukční sadě se obvykle nachází mnoho druhů instrukcí:

  • Aritmetické operace: Sčítání, odčítání, násobení, dělení.
  • Logické operace: Konjunkce, disjunkce, negace.
  • Operace působící na jednotlivé bity: Posun bitů doleva nebo doprava.
  • Operace s pamětí: kopírování hodnoty z jednoho registru do druhého.
  • Operace, které porovnávají dvě hodnoty: větší než, menší než, rovno.
  • Operace, které kombinují jiné operace: sčítání, porovnávání a kopírování, pokud se rovná nějaké hodnotě (jako jedna operace), skok do nějakého bodu programu, pokud je registr nulový.
  • Operace, které působí na tok programu: skok na nějakou adresu.
  • Operace, které převádějí datové typy: např. převod 32bitového celého čísla na 64bitové celé číslo, převod hodnoty s pohyblivou řádovou čárkou na celé číslo (zkrácením).

Mnoho moderních procesorů používá pro některé příkazy mikrokód. Složitější příkazy jej obvykle používají. Často se tak děje u architektur CISC.

Pokyny

Každý procesor nebo rodina procesorů má vlastní instrukční sadu. Instrukce jsou vzory bitů, které odpovídají různým příkazům, jež lze stroji zadat. Instrukční sada je tedy specifická pro třídu procesorů používajících (většinou) stejnou architekturu.

Novější návrhy procesorů často obsahují všechny instrukce předchůdce a mohou přidávat další instrukce. Někdy novější návrh zruší nebo změní význam kódu instrukce (obvykle proto, že je potřeba pro nové účely), což ovlivní kompatibilitu kódu; dokonce i téměř zcela kompatibilní procesory mohou vykazovat mírně odlišné chování některých instrukcí, ale to je zřídkakdy problém.

Systémy se mohou lišit i v dalších detailech, například v uspořádání paměti, operačních systémech nebo periferních zařízeních. Protože program obvykle závisí na těchto faktorech, různé systémy obvykle neprovádějí stejný strojový kód, i když je použit stejný typ procesoru.

Většina instrukcí má jedno nebo více polí opcode. Ta určují základní typ instrukce. Další pole mohou udávat typ operandů, režim adresování atd. Mohou existovat i speciální instrukce, které jsou obsaženy v samotném opkódu. Tyto instrukce se nazývají immediates.

Návrhy procesorů se mohou lišit i v jiných ohledech. Různé instrukce mohou mít různou délku. Mohou mít také stejnou délku. Pokud mají všechny instrukce stejnou délku, může to návrh zjednodušit.

Příklad

Architektura MIPS má instrukce dlouhé 32 bitů. Tato část obsahuje příklady kódu. Obecný typ instrukce je v poli op (operace). Jedná se o nejvyšších 6 bitů. Instrukce typu J (jump) a I (immediate) jsou plně dány op. Instrukce typu R (registr) obsahují pole funct. To určuje přesnou operaci kódu. Pole používaná v těchto typech jsou:

      6 5 5 5 5 6 bitů [ op | rs | rt | rd |shamt| funct] R-typ [ op | rs | rt | adresa/immediate] I-typ [ op | cílová adresa ] J-typ

rs, rt a rd označují operandy registru. shamt udává velikost posunu. Pole address nebo immediate obsahují přímo operand.

Příklad: sečtěte registry 1 a 2. Výsledek umístěte do registru 6. Je zakódován:

[ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 decimální 000000 00001 00010 00110 00000 100000 binární

Načtení hodnoty do registru 8. Vezměte ji z paměťové buňky 68 buněk za místem uvedeným v registru 3:

[ op | rs | rt | address/immediate] 35 3 8 68 decimální 100011 00011 01000 00000 00001 000100 binární

Přejděte na adresu 1024:

[ op | cílová adresa ] 2 1024 desítková 000010 00000 00000 00000 10000 000000 binární

Související stránky

  • Binární číselná soustava
  • Kvantové počítače
  • Sada instrukcí
  • Počítač s redukovanou instrukční sadou

AlegsaOnline.com - 2020 / 2022 - License CC3