====== Strojový kód ====== **Strojový kód** je rodný jazyk procesoru ([[cpu|CPU]]). Veškerý software, ať už je napsán v [[c++|C++]], Pythonu nebo Javě, musí být nakonec přeložen do strojového kódu, aby mohl být spuštěn. Každá instrukce ve strojovém kódu odpovídá jedné elementární operaci, kterou procesor provede (např. sečtení dvou čísel, přesun dat v paměti nebo skok na jinou část programu). ---- ====== Struktura strojového kódu ====== Strojový kód je pro člověka téměř nečitelný, protože se skládá z binárních čísel. Typická instrukce obsahuje dvě části: * **Opcode (Operační kód):** Určuje, co má procesor udělat (např. "sčítání"). * **Operandy:** Určují, s čím se má operace provést (např. čísla nebo adresy v [[ram|RAM]], které vrací [[pointer|pointery]]). ===== Příklad (Zjednodušeně) ===== Lidsky čitelný příkaz (C++): ''x = y + 5;'' Jazyk symbolických adres (Assembly): ''ADD EAX, 5'' Strojový kód (Binárně): ''00000101 00000101 00000000 00000000'' ---- ====== Vztah k architektuře (ISA) ====== Strojový kód není univerzální. Je závislý na **instrukční sadě** (Instruction Set Architecture - ISA) konkrétního procesoru. To je důvod, proč program zkompilovaný pro Windows na PC (architektura **x86/x64**) nespustíte přímo na mobilním telefonu (architektura **ARM**). ^ Architektura ^ Typické zařízení ^ Charakteristika strojového kódu ^ | **x86 / x86-64** | PC, Laptopy, Servery | Komplexní instrukce (CISC), historicky dominantní. | | **ARM** | Mobily, tablety, Apple M1/M2 | Úsporné, jednoduché instrukce (RISC). | | **RISC-V** | Mikrokontroléry, výzkum | Otevřený standard, modulární instrukce. | ---- ====== Jak se strojový kód vytváří? ====== Existují tři hlavní cesty, jak vzniká strojový kód: 1. **Kompilace:** [[compiler|Compiler]] přeloží celý zdrojový kód najednou do spustitelného souboru (např. .exe). 2. **Interpretace:** Interpret čte kód řádek po řádku a v reálném čase posílá procesoru odpovídající instrukce. 3. **JIT (Just-In-Time):** Moderní metoda (používaná v Javě nebo JavaScriptu), kdy se kód překládá do strojového až těsně před spuštěním pro zvýšení výkonu. ---- ====== Proč v něm neprogramujeme přímo? ====== * **Extrémní složitost:** Napsat i jednoduchý program by vyžadovalo tisíce instrukcí. * **Náchylnost k chybám:** Jedna špatná cifra v binárním kódu může způsobit pád celého systému. * **Nepřenositelnost:** Kód napsaný pro jeden procesor nefunguje na jiném. Jedinou "lidsky snesitelnou" úrovní nad strojovým kódem je **Assembler** (jazyk symbolických adres), kde jsou binární kódy nahrazeny zkratkami (např. ''MOV'' místo ''10110000''). ---- //Související pojmy: CPU, RAM, Compiler, C++, Pointer, Assembler, Binární soustava.//