shabba#29
Az üzemmódok a kompatibilítás megőrzése érdekében vannak. Az utasításkészletet prefixekkel viszonylag 1xűen lehet kompromisszumok nélkül bővíteni de nagyobb változtatásokhoz(pl. virtuális memória, 32/64 bites címzés) kellenek az új üzemmódok.
Pl. 16 bites real mode esetén 64KB volt egy szegmens mérete, nem volt virtuális memóriakezelés, a stack kelezés is 16 bites volt. Egy MOV AX,[BX] esetén ha használtad a 32bites prefixet akkor már MOV EAX,[EBX] lehetett a végrehajtandó utasítás de attól a 64KB-os szegmenhatás ugyanúgy megmaradt így hiába volt EBX-ben 64k feletti érték.
Natív 32 bites üzemmód esetén prefix nélkül a 32 bites regiszterek használata a default és a prefixáltakkal érhető el a 16 bites régi regiszterek. A virtuális memória kezelése a hardwaresen támogatt lapkezés által lehetővé vált.
64 bit esetén hasonló váltás történik a kompatibilítás érdekében, prefixekkel használhatók a meglévő 32 bites regiszterek 64 bites változata de ugyanúgy továbbra is 32 bites a stack felépítése és 32 bites a megcímezhető terület hogy a meglévő programok változtatás nélkül futtathatóak legyenek. Natív 64 bites módban lesz lehetőség a további 8 általános célú regiszter használatára és a 8db további 128bites multimédia regiszter is elérhető lesz. A stack szervezése is 64 bites lesz ahogy a memóriacímzés is. A szegmensregiszterek kezelésében is van némi változás. Ezért kell újrafordítani a programokat lehetőleg egy olyan compilerrel ami optimális kódot fordít és kihasználja az új üzemmódban rejlő többlet lehetőségeket.