====== Druhá generace jazyků (Assembler) ====== **Druhá generace programovacích jazyků (2GL)** představuje první úroveň abstrakce nad strojovým kódem (1GL). Jejím hlavním a v podstatě jediným zástupcem je **Assembler** (jazyk symbolických adres). ===== 1. Charakteristika 2GL ===== Zatímco první generace vyžadovala zadávání instrukcí v binární nebo hexadecimální podobě, 2GL zavedla **mnemotechnické pomůcky** (mnemonics). Jsou to zkratky, které zastupují konkrétní instrukce procesoru. * **Nízká úroveň (Low-level):** Jazyk je stále velmi blízko hardwaru. Programátor musí znát architekturu konkrétního procesoru. * **Závislost na platformě:** Program napsaný v Assembleru pro procesor x86 nebude fungovat na procesoru ARM (např. v mobilním telefonu). * **Překlad (Assembling):** Zdrojový kód v Assembleru musí být převeden do strojového kódu pomocí programu zvaného **Assembler**. --- ===== 2. Klíčové koncepty a registry ===== V Assembleru nepracujeme s proměnnými v běžném slova smyslu, ale přímo s [[it:hw:cpu_arch|registry procesoru]] a adresami v paměti RAM. ==== Základní instrukce: ==== * **MOV (Move):** Přesun dat z jednoho místa na druhé (např. z paměti do registru). * **ADD / SUB:** Aritmetické operace sčítání a odčítání. * **CMP (Compare):** Porovnání dvou hodnot (nastavuje příznaky v procesoru). * **JMP / JNE / JE (Jump):** Instrukce skoku, které umožňují vytvářet podmínky a cykly. ==== Příklad kódu (x86): ==== MOV EAX, 10 ; Ulož hodnotu 10 do registru EAX ADD EAX, 5 ; Přičti 5 k hodnotě v EAX (výsledek je 15) CMP EAX, 15 ; Porovnej EAX s 15 JE label_ok ; Pokud se rovnají, skoč na 'label_ok' --- ===== 3. Výhody a nevýhody 2GL ===== ^ Výhody ^ Nevýhody ^ | **Maximální výkon:** Kód je optimalizován přímo pro daný procesor. | **Extrémní složitost:** I jednoduchý úkol vyžaduje mnoho řádků kódu. | | **Plná kontrola:** Přímý přístup k registru, přerušením a hardwaru. | **Chybovost:** Snadno dojde k chybám v paměti (Memory leaks, Buffer overflow). | | **Minimální velikost:** Výsledný binární soubor je velmi malý. | **Nepřenositelnost:** Nutnost přepisovat kód pro jiný hardware. | --- ===== 4. Využití Assembleru v současnosti ===== I přes nástup moderních jazyků jako Python nebo Java zůstává Assembler nezastupitelný v určitých oblastech: * **Ovladače zařízení (Drivers):** Kde je vyžadována komunikace přímo s hardwarem. * **Embedded systémy:** Programování mikročipů s velmi omezenou pamětí (např. v pračkách, mikrovlnkách). * **Reverzní inženýrství:** Analýza škodlivého kódu (malwaru) a hledání bezpečnostních trhlin. * **Kritické části jader OS:** Operační systémy jako Linux nebo Windows mají části kódu v Assembleru pro maximální rychlost. --- ===== 5. Vztah k dalším generacím ===== * **1GL (Strojový kód):** Jen čísla (0101... nebo 0xBF...). * **2GL (Assembler):** Symbolický zápis instrukcí (MOV, ADD). * **3GL (C, Pascal, Java):** Vyšší úroveň abstrakce, přenositelnost kódu mezi platformami. ---- //Související články:// * [[it:hw:cpu_arch|Architektura procesorů a registry]] * [[it:dev:algorithms|Základy algoritmizace]] * [[it:sec:reverse_eng|Reverzní inženýrství a analýza kódu]] //Tagy: {{tag>dev programming assembler low-level hardware cpu 2gl}}//