====== GAS (GNU Assembler) ====== **GAS** (často volaný příkazem ''as'') je multiplatformní nástroj, který podporuje desítky různých architektur procesorů (x86, ARM, MIPS, RISC-V atd.). Jeho nejvýraznějším rysem je tradiční používání **AT&T syntaxe**, která se výrazně liší od syntaxe Intel používané ve Windows. ===== 1. AT&T vs. Intel Syntaxe ===== Pro začátečníky může být GAS matoucí, protože pravidla zápisu jsou v AT&T syntaxi "obráceně" oproti standardu Intel: ^ Vlastnost ^ AT&T (GAS výchozí) ^ Intel (NASM/MASM) ^ | **Pořadí operandů** | Zdroj, Cíl (''mov %eax, %ebx'') | Cíl, Zdroj (''mov ebx, eax'') | | **Registry** | Musí mít předponu % (''%eax'') | Bez předpony (''eax'') | | **Konstanty** | Musí mít předponu $ (''$5'') | Bez předpony (''5'') | | **Velikost dat** | Určena příponou (''movl'' = long) | Určena operátorem (''dword ptr'') | > **Poznámka:** Moderní verze GAS již umožňují přepnout na Intel syntaxi pomocí direktivy ''.intel_syntax noprefix''. ===== 2. Role v procesu kompilace ===== GAS obvykle neběží samostatně, ale jako "skrytý" pomocník kompilátoru GCC. Když kompilujete program v C: 1. GCC (Kompilátor) přeloží C kód do assembleru. 2. GAS (Asemblér) přeloží assembler do strojového kódu (objektový soubor ''.o''). 3. LD (Linker) spojí objektové soubory do výsledného spustitelného programu. ===== 3. Klíčové vlastnosti ===== * **Multiplatformnost:** Díky knihovně BFD (Binary File Descriptor) dokáže generovat kód pro nepřeberné množství platforem. * **Podpora maker:** Umožňuje definovat složité opakující se bloky kódu. * **Integrace s C:** Je navržen tak, aby hladce spolupracoval s výstupem z kompilátoru jazyka C, což z něj činí klíčový nástroj pro vývoj jader (kernelů). ===== 4. Použití v praxi ===== GAS je de facto standardem pro psaní nízkoúrovňových částí v **Linuxu**. Pokud například zkoumáte zdrojové kódy jádra Linuxu a nar