x86-64

64-бітна версія набору інструкцій x86

x86-64 (x86_64, x64, AMD64, Intel 64) — 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, x86_64
Офіційний логотип технології AMD64
Розробка AMD
Розрядність 64-біт, 32-біт
Поява квітень 2003 року
Тип архітектури CISC
Інструкції змінної довжини
Реалізація переходів умовні jmp
Порядок байтів little-endian
Регістри
Загального призначення 16
Рухома кома 16

Архітектура і система команд ред.

Архітектура вводить дві нові особливості:

  1. Розширені регістри:
    • 8 регістрів спільного призначення (R8 — R15);
    • всі 16 регістрів спільного призначення 64-бітні;
    • 8 нових 128-бітних регістрів SSE (XMM8 — XMM15);
    • новий командний префікс (REX) для доступу до розширених регістрів.
  2. Спеціальний режим «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[en] з рівнем привілеїв 3,[6] в той час як процесори Intel 64 викликають його з рівнем привілеїв 0.[2]:4-412

x86S ред.

x86S — запропонована 2023-го року фірмою Intel подальша еволюція системи команд x86-64, спрямована на спрощення і відмову від застарілих режимів і особливостей процесора.[7] Запропоновано вилучити підтримку 16- і 32-розрядних операційних систем, але 32-розрядні програми користувача зможуть виконуватися у 64-розрядному режимі ОС. Важливою зміною є початкове завантаження процесора — воно відбуватиметься одразу у 64-розрядному режимі (на відміну від «класичного» завантаження x86 у 16-розрядному «реальному» режимі. Також з'явиться можливість активування 5-рівневих таблиць сторінок пам'яті без попереднього перемикання у режим з вимкненими сторінками.

Запропоновано вилучити наступні особливості і режими:[8]

  • Шлюзи сегментації
  • 32-розрядне кільце захисту (VT-x більше не емулюватиме даний режим)
  • Кільця захисту 1 та 2
  • Доступ до портів вводу/виводу з кільця 3. Іншими словами, програми користувача не зможуть виконувати інструкції IN / OUT
  • «Рядкові» інструкції вводу/виводу INS та OUTS
  • Реальний режим (включно з так званим unreal mode), 16-розрядний захищений режим, режим віртуального 8086[en]
  • 16-розрядний режим адресування (так званий «unrestricted guest mode» вилучається з VT-x)
  • Підтримку контролера переривань Intel 8259 (єдиний контролер переривань, що підтримуватиметься процесором, буде X2APIC)
  • Деякі біти режимів операційної системи, які не використовуються

На думку Intel, ці зміни логічно слідують за вилученням підтримки керування адресною лінією A20[en] (2008 рік), і вилученням підтримки 16- і 32-розрядних ОС у firmware Intel (2020 рік). Підтримка застарілих ОС у нових процесорах реалізовуватиметься за допомогою віртуалізації.[8]

Див. також ред.

Джерела ред.

  1. Why do x86-64 instructions on 32-bit registers zero the upper part of the full 64-bit register?. Stack Overflow (англ.). 24 червня 2012. Архів оригіналу за 8 лютого 2021. Процитовано 10 лютого 2021.
  2. а б в Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z (PDF). Intel. September 2013. Архів оригіналу (PDF) за 20 жовтня 2013. Процитовано 21 січня 2014.
  3. AMD Corporation (December 2016). Volume 2: System Programming (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. Архів оригіналу (PDF) за 13 липня 2018. Процитовано 25 березня 2017.
  4. How retiring segmentation in AMD64 long mode broke VMware. Pagetable.com. 9 листопада 2006. Архів оригіналу за 18 липня 2011. Процитовано 2 травня 2010.
  5. VMware and CPU Virtualization Technology (PDF). VMware. Архів оригіналу (PDF) за 17 липня 2011. Процитовано 8 вересня 2010.
  6. AMD64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions (PDF). AMD. May 2018. с. 419. Архів оригіналу (PDF) за 20 серпня 2018. Процитовано 2 серпня 2018.
  7. Intel Publishes "X86-S" Specification For 64-bit Only Architecture. www.phoronix.com (англ.).
  8. а б Envisioning a Simplified Intel Architecture for the Future. intel.com (англ.).