x86-64
x86-64 (також AMD64, Intel 64, x64) — 64-бітова архітектура мікропроцесора і відповідний набір інструкцій, розроблені компанією AMD. Це розширення архітектури x86 з повною зворотною сумісністю. Набір інструкцій x86-64 було впроваджено компанією AMD на процесорах для серверних платформ серії Opteron у квітні 2003 року, для процесорів домашнього використання, починаючи із процесорів серії Athlon 64 у вересні 2003 років. Всі подальші моделі процесорів (Athlon 64 FX, Athlon 64 X2, Phenom, Turion 64, а також пізнішні моделі Sempron) також були оснащені цим набором інструкцій. Цей набір інструкцій був ліцензований основним конкурентом AMD — компанією Intel (з незначними доповненнями) під назвою Intel 64 (раніше відомі як Em64t і Ia-32e) в пізніх моделях процесорів Pentium 4, Core 2, Xeon та інших. Корпорації Microsoft і Sun Microsystems використовують для позначення цього набору інструкцій термін «x64», проте каталог з файлами для архітектури в дистрибутивах Microsoft називається «amd64» (для порівняння: назва «i386» використовується для архітектури IA-32, оскільки першим процесором цієї архітектури був Intel 80386).
Офіційний логотип технології AMD64 | |
Розробка | AMD |
---|---|
Розрядність | 64-біт, 32-біт |
Поява | квітень 2003 року |
Тип архітектури | CISC |
Інструкції | змінної довжини |
Реалізація переходів | умовні jmp |
Порядок байтів | little-endian |
Регістри | |
Загального призначення | 16 |
Рухома кома | 16 |
Архітектура і система команд
Архітектура вводить дві нові особливості:
- Розширені регістри:
- 8 регістрів спільного призначення (R8 — R15);
- всі 16 регістрів спільного призначення 64-бітні;
- 8 нових 128-бітних регістрів SSE (XMM8 — XMM15);
- новий командний префікс (REX) для доступу до розширених регістрів.
- Спеціальний режим «Long mode»:
- до 64-біт віртуальних адрес;
- 64-бітні вказівки команд (RIP);
- плоский (flat) адресний простір.
Історія створення
AMD64 було створено як альтернативу до архітектури IA-64, що розвивалась компаніями Intel та HP. Анонсовано архітектуру ще в 1999 році з повною специфікацією в серпні 2000. AMD64 з самого початку позиціювалась як еволюційний шлях додавання 64-розрядних обчислювальних можливостей до існуючої архітектури х86, на відміну від підходу Intel, що створювала абсолютно нову архітектура IA-64. Першим процесором, що підтримував цю технологію був AMD Opteron, який був випущений в квітні 2003 року.
Недоліки архітектури
Однією з особливостей роботи з 64-розрядними регістрами є «затирання» їх верхньої половини командами, які оперують з 32-розрядними операндами.[1] Наприклад, від послідовності
mov eax, 0F0F0AABBh
shl rax, 32 ; Тепер RAX = F0F0AABB00000000h
mov eax, 2
програміст може очікувати, що регістр RAX міститиме значення F0F0AABB00000002h. Однак це не так: значення RAX після наведеної послідовності операцій дорівнює 2, оскільки команда mov
з 32-розрядним операндом обнулює всі верхні біти (таким чином, її поведінка стає аналогічною команді movzx
). Дана поведінка процесора є повністю протилежною до випадку роботи з 32-бітними регістрами і їх половинками, де верхня половина значення завжди зберігається:
mov ax, 0F0F0h
shl eax, 16 ; Тепер EAX = F0F00000h
mov ax, 2 ; Тепер EAX = F0F00002h, як і очікувалося
Значних недоліків 64-х бітна архітектура в 32-бітну не внесла. Варто зазначити лише:
- трохи збільшені вимоги програм до пам’яті зумовлені збільшенням адрес і операндів;
- відсутнє суттєве збільшення продуктивності: при перекомпіляції програм можна очікувати приріст лише в межах 5-15%;
- збільшені вимоги до місця на жорсткому диску 64-х бітними ОС: системі потрібно зберігати окремо 64-х та 32-х бітні бібліотеки для забезпечення сумісності.
Назви
Існує декілька варіантів назв цієї технології, які, деколи, приводять до плутанини і можуть ввести користувача в оману.
- x86-64. Первинний варіант. Саме під цією назвою фірмою AMD була опублікована перша попередня специфікація.
- AA-64. Так архітектуру охрестив популярний неофіційний довідник sandpile.org (внісши інформацію практично відразу після публікацій першої попередньої специфікації) за аналогією з Ia-64, і що як і раніше так її називає, як AMD Architecture 64.
- Hammer Architecture. Інколи зустрічалася назва по перших ядрах процесорів, що розроблялися, отримали назви Clawhammer (обценьки) і Sledgehammer (кувалда) інколи званих просто Hammer (молоток).
- Amd64. Після випуску перших Hammer'ів в назві архітектури з'явилася назва фірми-розробника Advanced Micro Devices. Зараз є офіційним для реалізації AMD.
- Yamhill Tehnology. Перша назва реалізації технології від Intel. Інколи згадувалася назва CT (Clackamas Technology).
- EM64T. Перша офіційна назва реалізації Intel. Розшифровувалося як Extended Memory 64 Technology.
- IA-32E. Інколи зустрічалося спільно з EM64T, частіше для позначення довгого режиму, який в документації Intel називається «Режимом IA-32E».
- Intel 64. Поточна офіційна назва архітектури Intel. Поступово Intel відмовляється від найменувань IA-32, IA-32E і EM64T на користь цієї назви, яка тепер є єдиною офіційною для цієї архітектури.
- x64 Офіційна назва версій операційних систем Windows і Solaris, також використовувана як назва архітектури фірмами Microsoft і Sun Microsystems.
Відмінності між AMD64 і Intel 64
- Робота інструкцій
BSF
іBSR
у Intel 64 відрізняється від AMD64, у випадку коли джерело дорівнює нулю, а розмір операнда 32 біти. Процесор Intel встановлює прапор «нуль» і залишає верхні 32 розряди цілі невизначеними. - Формат оновлення мікрокоду, а також регістри MSR, пов'язані з мікрокодом, відрізняються у AMD64 і Intel 64. Intel зберігає схему оновлення мікрокоду такою ж, як вона була у їх 32-розрядних процесорах.
- Intel 64 не має деяких регістрів MSR, які вважаються архітектурно важливими у AMD64, зокрема:
SYSCFG
,TOP_MEM
,TOP_MEM2
. - Інструкції
SYSCALL
/SYSRET
у Intel 64 працюють лише у 64-розрядному режимі (не працюють у режимі сумісності),[2]:4-397 натомість інструкціїSYSENTER
/SYSEXIT
дозволені у обох режимах.[2]:4-400 AMD64 не підтримуєSYSENTER
/SYSEXIT
у обох підрежимах long mode.[3]:33 - У 64-розрядному режимі ближні переходи з префіксом 66H (англ. operand size override) діють по-різному: Intel 64 ігнорує даний префікс і команда має 32-розрядние зміщення зі знаком, а вказівник інструкції не відсікається. У AMD64 зміщення 16-розрядне, а верхні 48 розрядів вказівника інструкцій процесор очищує.
- Процесори AMD при виконанні інструкцій
FLD
абоFSTP
над 80-розрядним значенням NaN призводять до виняткової ситуації обробки чисел з рухомою комою, в той час як процесори Intel таку ситуацію не спричиняють. - У Intel 64 відсутня можливість збереження і відновлення зменшеного варіанту стану співпроцесора рухомої коми (за допомогою інструкцій
FXSAVE
іFXRSTOR
). - У процесорах AMD, починаючи з Opteron Rev. E і Athlon 64 Rev. D, знову з'явилася обмежена підтримка сегментації за допомогою біту Long Mode Segment Limit Enable (LMSLE). Дане нововведення призначалося «для полегшення віртуалізації гостьового 64-розрядного коду».[4][5]
- При поверненні інструкцією
SYSRET
, якщо адреса неканонічна, процесори AMD64 викликають обробник general protection fault з рівнем привілеїв 3,[6] в той час як процесори Intel 64 викликають його з рівнем привілеїв 0.[2]:4-412
Див. також
Джерела
- Why do x86-64 instructions on 32-bit registers zero the upper part of the full 64-bit register?. StackOverflow (англ.). 24 червня 2012.
- Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z. Intel. September 2013. Процитовано 21 січня 2014.
- AMD Corporation (December 2016). Volume 2: System Programming (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. Процитовано 25 березня 2017.
- How retiring segmentation in AMD64 long mode broke VMware. Pagetable.com. 9 листопада 2006. Процитовано 2 травня 2010.
- VMware and CPU Virtualization Technology (PDF). VMware. Процитовано 8 вересня 2010.
- AMD64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions. AMD. May 2018. с. 419. Процитовано 2 серпня 2018.