x86 се нарича общата микроархитектура на фамилия микропроцесори, основана на Intel 8086. Първите процесори от тази фамилия, разработени и произвеждани от Intel, са обозначавани с номера, завършващи на 86: 8086, 80186, 80286, 80386 (впоследствие i386) и 486 (i486). Водена от маркетингови съображения и ограничена от невъзможността да защити търговска марка върху число, Intel решава да именува следващите процесори от тази фамилия с имена: Pentium, Core. В крайна сметка, името x86 остава като име на цялата фамилия.

Архитектурата на два пъти е била разширявана към по-голям размер на машинната дума. Първите процесори от тази фамилия са 16-битови. През 1985 г. Intel пуска 32-битовия процесор Intel 386. Обикновено обозначението x86 се използва за 32-битовата архитектура, като освен него се използва и IA-32 (). През 2003 г. AMD пусна на пазара процесора Athlon 64, който разшири архитектурата до 64 бита. 64-битовата x86 архитектура се обозначава с x86-64, като освен него се използват и други обозначения: AMD64 (от AMD), EM64T или IA-32e (от Intel) и x64 (от Microsoft).

Една от основните черти на x86 архитектурата е пълната софтуерна оперативна съвместимост с по-старите модели. Това означава, че всеки нов член на фамилията може да изпълнява програмите, създадени за неговите предшественици. Тази съвместимост е една от предпоставките за огромния успех на x86 архитектурата.

История Предистория x86 архитектурата започва своето съществуване с разработката на процесора Intel 8086 от Intel през 1978 г. 8086 е развитие на техния по-ранен успешен 8-битов процесор 8080. Широкото разпространение на архитектурата започва през 1981, когато IBM избира Intel 8088 (процесор, който е идентичен като програмен модел с 8086) за „сърцето“ на своя персонален компютър IBM PC.

И други компании започват да произвеждат процесори, които са съвместими с 8086/8088. Повечето от тези компании рано или късно се оттеглят от тази област поради огромната конкуренция от страна на Intel, като единствените останали производители са Intel, AMD и VIA (VIA е собственик на бившите IDT и Cyrix).

Реален режим

Първите процесори от семейството x86 (8086, 8088 и 80186) са 16-битови и имат един и същ програмен модел, който се поддържа от всички следващи поколения x86 процесори. След появата на защитения режим, този режим започва да носи наименованието реален режим.

Въпреки ограниченията на реалния режим, при появата си това е била една от най-сложните и универсални процесорни архитектури.

В наши дни реалният режим се използва само при стартирането на операционната система, тъй като всеки x86 процесор веднага след включване на захранването автоматично влиза в реален режим. Това налага първите етапи от зареждането на операционната система да стават в този режим. Популярната в миналото DOS на Microsoft работи почти изцяло в реален режим.

Инструкции за числа с плаваща запетая (x87 инструкции)

До появата на 486, x86 архитектурата не разполага с инструкции за обработка на числа с плаваща запетая. Още от самото начало Intel предлага математическия копроцесор 8087, който работи съвместно с 8086/8088 и ускорява изчисленията с плаваща запетая.

Повечето производители на компилатори създават емулиращи програмни библиотеки, които позволяват на програмиста да използва един и същ програмен интерфейс независимо дали компютърът, на който се изпълняват програмите, има математически копроцесор или няма такъв. С течение на времето се появяват копроцесорите 80187, 80287, 80387 и 80487. С въвеждането на процесора 486, математическият копроцесор става част от процесорното ядро, а инструкциите за обработка на числа с плаваща запетая (наричани още x87 инструкции) стават неразделна част от x86 архитектурата.

Защитен режим

Защитеният режим се характеризира с апаратно предотвратяване на достъпа на дадена програма извън границите на заделената ѝ памет. Първата версия на защитения режим се появи в 16-битовия процесор 80286. Въпреки че някои от тогавашните операционни системи (най-вече OS/2 и Windows 3.0) включваха поддръжка за 16-битовия защитен режим, той не получи широко разпространение заради появата на по-универсалния 32-битов защитен режим с пускането на процесора 80386. От този момент под защитен режим ще се подразбира 32-битовият защитен режим на 80386 и следващите x86 процесори.

В съвременните операционни системи се използва защитеният режим на работа. Освен това сегментирането се използва много ограничено, като защитата и управлението на паметта стават основно с помощта на механизма на страницирането. Именно поради тази причина, в 64-битовото разширение на x86 архитектурата AMD64, сегментирането е „орязано“ до минимум.

MMX

През 1996 г. Intel въведе ново разширение на x86 архитектурата с пускането на процесора Pentium MMX. MMX означава Matrix Math Extensions (разширения за изчисления с матрици), но по-късно съкращението започна да се дешифрира като Multi-Media Extensions (мултимедийни разширения).

MMX разширенията позволяват да се изпълни една и съща математическа операция (например събиране, изваждане и т.н.) едновременно върху няколко цели числа, пакетирани в някои от MMX регистрите.

Въпреки широката рекламна кампания от страна на Intel, MMX инструкциите дълго време не бяха използвани в приложните програми, а когато такава поддръжка все пак се появи, резултатите не бяха особено впечатляващи. Някои от причините за този скромен успех са:

За да не се налагат промени в операционните системи, MMX регистрите всъщност са преименуваните x87 регистри за работа с числа с плаваща запетая. Това не позволява да се използват едновременно MMX и x87 инструкции, а бавното превключване между двата режима допълнително влошава нещата.

MMX инструкциите дълго време можеха да бъдат използвани само на асемблер. Поддръжката в програмните езици от високо ниво е ограничена.

MMX инструкциите оперират само върху цели числа. Повечето съвременни мултимедийни приложения изискват работа с числа с плаваща запетая.

Все пак, MMX инструкциите станаха част от x86 архитектурата и се поддържат от всички съвременни реализации на тази архитектура.

3DNow!

През 1998 г. с пускането на пазара на процесора K6-2, AMD въведе нов набор от инструкции, наречен 3DNow!. 3DNow! инструкциите са SIMD инструкции, подобни на MMX, но боравещи и с числа с плаваща запетая. Малко по-късно Intel въведе подобен (но по-разширен и несъвместим с 3DNow!) набор от SIMD инструкции, наречени SSE.

В процесорите K6-2+, K6-III и първите Athlon, AMD добави още 19 инструкции за предварително зареждане на данни и др. подобни. Разширеният по този начин набор от инструкции получи името Enhanced 3DNow! (наричани още Extended 3DNow! и 3DNow+). С процесора Athlon XP, AMD въведе третото поколение SIMD инструкции, наречени 3DNow! Professional, като единствената съществена разлика е поддръжката на SSE инструкциите на Intel.

Въпреки че 3DNow! инструкциите се появиха почти година преди SSE инструкциите на Intel, те не получиха широка подкрепа от разработчиците на софтуер, най-вече поради ниския пазарен дял на AMD. Въпреки че отстраняват най-големия недостатък на MMX (невъзможността за работа с числа с плаваща запетая), 3DNow! инструкциите отстъпват по възможности на SSE инструкциите, които използват нови 128-битови регистри и могат да оперират едновременно върху четири 32-битови или две 64-битови числа с плаваща запетая.

В крайна сметка 3DNow! инструкциите загубиха битката с SSE и се поддържат само от процесорите на AMD и VIA и от години не са били добавяни нови инструкции към тях. Като се добави фактът, че AMD процесорите вече поддържат и SSE, бъдещето на 3DNow! изглежда мрачно.

SSE, SSE2, SSE3 През 1999 г. Intel пусна процесора Pentium III, поддържащ нови SIMD инструкции, наречени SSE (Streaming SIMD Extensions). Също като 3DNow! инструкциите, SSE позволяват паралелната обработка на повече от едно число с плаваща запетая. С въвеждането на SSE, Intel успя да отстрани най-големите слабости на MMX и последвалите ги 3DNow! инструкции.

SSE инструкциите получиха широко разпространение (във всеки случай много по-широко от MMX и 3DNow!) и в крайна сметка AMD добавиха поддръжка за SSE инструкциите в техния процесор Athlon XP и следващите го процесори.

С въвеждането на процесора Pentium 4, Intel добави множество нови инструкции към SSE, създавайки SSE2. SSE2 инструкциите се поддържат от процесорите Athlon 64 на AMD.

С появата на последната ревизия на Pentium 4, Intel въведоха нови допълнения към SSE, наречени SSE3. SSE3 инструкциите се поддържат от последните модели Athlon 64 на AMD.

С течение на времето, SSE, SSE2 и SSE3 инструкциите се наложиха като дефакто стандартни SIMD инструкции в x86 архитектурата, за разлика от 3DNow! инструкциите, които се поддържат само от процесорите на AMD.

x86-64 В продължение на почти 20 години (от пускането на пазара на процесора Intel 386 до 2003 г.) наборът от инструкции на x86-съвместимите процесори е 32-битов. С течение на времето това започна да се превръща в тясно място, защото 32-битовият процесор не може да адресира повече от 4 GB (232 байта) памет, което се оказва недостатъчно за някои приложения. Intel временно облекчи проблема с модификации в начина на адресиране, но те нито са елегантни, нито особено ефективни.

Гледната точка на Intel по това време беше, че x86 архитектурата вече е изживяла времето си и трябва да бъде замена с перспективната VLIW архитектура IA-64, разработвана от години съвместно с компанията HP. Въпреки теоретичните предимства на тази архитектура, нейната производителност при работа със съществуващите 32-битови приложения е разочароваща, а цената – главозамайваща.

В този момент AMD реши да разработи 64-битови разширения за x86 архитектурата, които бяха кръстени AMD64. Естествено, повечето компании не пожелаха да използват наименованието AMD64 от страх да не предизвикат Intel и в крайна сметка възприеха по-неутралните обозначения x86-64 и x64.

Въпреки коментарите на Intel (както се оказа впоследствие – до голяма степен оправдани), че 64-битовите разширения не са необходими на болшинството от потребителите и няма да бъдат необходими поне още 4 – 5 години, големите компании Microsoft, Sun Microsystems и дори свободната операционна система Linux подкрепиха новата архитектура. Изправени пред тези факти, Intel бяха принудени да приемат като стандарт 64-битовите разширения на AMD, но, разбира се, не под името AMD64, а под името EM64T.

В наши дни поддръжката за x86-64 се превърна в стандарт за процесорите на AMD и Intel, но броят на приложните програми, които реално използват 64-битов код, все още е много малък.

Програмен модел Реален режим

В реален режим всеки x86 процесор има достъп до четиринадесет 16-битови регистъра. Осем от тях (AX, BX, CX, DX, SP, BP, SI и DI) са регистри с общо предназначение. Въпреки това всеки от тях си има свои специфични функции (например достъпа до AX става най-бързо и с най-къса машинна инструкция, а CX се използва за брояч при цикли). Всеки от регистрите AX, BX, CX и DX може да бъде разглеждан и като два 8-битови регистъра, до които има независим достъп (напр. горните 8 бита на DX са 8-битов регистър с името DH, а долните 8 бита – 8-битов регистър с името DL).

Регистрите SP и BP се използват при работата със стека, като първият е указателят на стека, а вторият обикновено се използва от езиците на високо ниво за формирането на така наречения стек фрейм (stack frame) на процедурите. Регистрите SI и DI се използват при формирането на адреса при някои инструкции (най-вече при операции с низове).