====== Registr EAX (Extended Accumulator Register) ====== **EAX** je historicky nejdůležitějším registrem v rodině procesorů Intel a AMD. Písmeno **A** v názvu znamená **Accumulator** (akumulátor), což odkazuje na jeho hlavní roli: shromažďování výsledků aritmetických a logických operací. ===== 1. Struktura a zpětná kompatibilita ===== Registr EAX je 32bitový, ale je navržen tak, aby umožňoval přístup ke svým menším částem kvůli kompatibilitě se staršími 16bitovými a 8bitovými programy: * **EAX (32 bitů):** Celý registr (např. pro hodnotu 0x12345678). * **AX (16 bitů):** Spodní polovina registru EAX (0x5678). * **AH (8 bitů):** Horní (High) část 16bitového registru AX (0x56). * **AL (8 bitů):** Dolní (Low) část 16bitového registru AX (0x78). V moderní 64bitové architektuře (x86-64) je tento registr dále rozšířen na 64 bitů a nazývá se **RAX**. ===== 2. K čemu EAX slouží? ===== I když jsou dnešní registry převážně univerzální, EAX má v [[it_encyklopedie:assembler|assembleru]] několik specifických a preferovaných rolí: * **Aritmetika:** Většina matematických operací (sčítání, odčítání) je na tomto registru optimalizována a probíhá v něm nejrychleji. U instrukcí jako násobení (MUL) nebo dělení (DIV) je použití EAX přímo vyžadováno hardwarem. * **Návratové hodnoty funkcí:** Toto je klíčová role v programování. Pokud funkce (např. v jazyce C++) vrací celé číslo, toto číslo je téměř vždy uloženo v registru EAX těsně před koncem funkce. * **Vstup/Výstup (I/O):** Používá se pro komunikaci s periferními zařízeními pomocí instrukcí IN a OUT. ===== 3. Příklad v Assembleru ===== Když [[it_encyklopedie:disassembler|disassembler]] zobrazí kód, EAX v něm uvidíte neustále: MOV EAX, 10 ; Vlož do registru EAX hodnotu 10 ADD EAX, 5 ; Přičti k hodnotě v EAX číslo 5 (výsledek 15 zůstává v EAX) RET ; Funkce končí, vrací hodnotu 15 (která je v EAX) ===== 4. Další sourozenci EAX ===== EAX je součástí skupiny čtyř základních datových registrů: * **EAX:** Akumulátor (výpočty, návratové hodnoty). * **EBX:** Base (ukazatel na data v paměti). * **ECX:** Counter (používán jako počítadlo v cyklech a pro řetězcové operace). * **EDX:** Data (rozšíření EAX při násobení/dělení, I/O operace). > **Zajímavost:** Pokud při ladění programu (debugování) vidíte, že po pádu aplikace je v registru EAX hodnota **0x00000000**, často to znamená, že se program pokusil pracovat s "nulovým ukazatelem" (Null Pointer), což je jedna z nejčastějších programátorských chyb. [[it_encyklopedie:it_vyvoj_rozcestnik|Zpět na Vývoj a Hardware]]