x86-64 (такође познат и као x64, x86 64 и amd64) је 64-битна верзија скупа инструкција x86. Он подржава далеко веће количине виртуелне и физичке меморије него што је то могуће код претходника, омогућавајући програмима складиштење веће количине података у меморији. x86-64 такође пружа 64-битне регистре опште намене и бројне друге побољшања. Оригиналну спецификацију је направио АМД, а спроведена је од стране АМД-а, Интела, VIА, и других. Потпуно је компатибилан са 16-битним и 32-битним x86 кодом. Пошто су потпуни 16-битни и 32-битни скупови инструкција остали имплементирани у хардверу без икакве емулације, постојећи x86 програми раде без проблема у компатибилности или лошијих перформанси, док постојеће апликације које користе нове карактеристике дизајна процесора могу постићи побољшања перформанси.
Пре избацивања, "x86-64" и "x86_64" су се односили на скуп инструкција. После избацивања, АМД је назван АМД64. Intel initially used the names IA-32e and EM64T before finally settling on Intel 64 for their implementation. Some in the industry, including Apple, Интел је у почетку користио имена ИА-32Е и ЕМ64Т пре коначног решења да се користи име Интел 64 за њихово спровођење. Неки у индустрији, укључујући и Епл, користити x86-64 и x86_64, док други, посебно Сан Мајкросистемс (сада Оракл) и Мајкрософт, користе x64 док BSD породица оперативних система и неколико Линукс дистрибуција користе АМД64.
АМД К8 процесор је први имплементирао архитектуру, и ово је био први значајан додатак x86 архитектури коју је дизајнирала нека компанија осим Интела. Интел је био принуђен да следи тај пример и увео је модификовану НетБрст () породицу која је била потпуно софтверски компатибилана са дизајном и спецификацијама АМД-а. VIА Текнолоџис () је представио x86-64 у својој VIА Исаја () архитектури, са VIА Нано.
x86-64 спецификација се разликује од Интелове Итаниум (раније ИА-64) архитектуре, чији скуп инструкција није компатибилан са x86 архитектуром.
АМД64 мини|150px|десно|AMD64 logo Скуп инструкција из АМД64 је имплементиран у АМД-овом Оптерону, Атлон64, Атлон 64 FX, Атлон64 X2, Атлон II, Атлон X2, Турион 64, Турион 64 X2, касније и Семпрон, Феном, Феном II, FX, и Фјужн () процесорима.
Историја АМД64 АМД64 је настао као алтернатива радикално другачије ИА-64 архитектуре, која је дизајниран од стране компаније Интел и ХП. Првобитно објављена у 1999 са пуном спецификацијом у августу 2000, АМД64 архитектура је направљена да се дода 64-битно рачунарство на постојећу x86 архитектуру, за разлику од Интеловог стварања потпуно нове 64-битну архитектуру са ИА-64.
Први АМД64 процесор, Оптерон, је избачен у априлу 2003.
Карактеристике архитектуре
AMD64 регистри 63 ... 47 ... 31 ... 15 ... 07 ... 00 (позиција бита) Главни регистри (8/16/32/64 бита) RAX EAX AX AL A регистар RBX EBX BX BL B регистар RCX ECX CX CL C регистар RDX EDX DX DL D регистар Индексни регистри (16/32/64 бита) RSI ESI SI Source Index RDI EDI DI Destination Index Стек регистри (16/32/64 бита) RBP EBP BP Base Pointer RSP ESP SP Stack Pointer Додатни регистри (64 бита) R8 регистар 8 R9 регистар 9 R10 регистар 10 R11 регистар 11 R12 регистар 12 R13 регистар 13 R14 регистар 14 R15 регистар 15 Показивач инструкције (16/32/64 бита) RIP EIP IP Instruction Pointer Сегментни регистри (16 бита) CS Code Segment DS Data Segment ES Extra Segment FS F Segment GS G Segment SS Stack Segment XMM (SSE) регистри (128 бита) XMM0 (128 бита) регистар 0 XMM1 (128 бита) регистар 1 XMM2 (128 бита) регистар 2 XMM3 (128 бита) регистар 3 XMM4 (128 бита) регистар 4 XMM5 (128 бита) регистар 5 XMM6 (128 бита) регистар 6 XMM7 (128 бита) регистар 7 XMM8 (128 бита) регистар 8 XMM9 (128 бита) регистар 9 XMM10 (128 бита) регистар 10 XMM11 (128 бита) регистар 11 XMM12 (128 бита) регистар 12 XMM13 (128 бита) регистар 13 XMM14 (128 бита) регистар 14 XMM15 (128 бита) регистар 15 Статусни регистар 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (позиција бита) V R 0 N IOPL O D I T S Z - A - P - C EFlags Примарна карактеристика АМД64 је доступност 64-битних процесорских регистара, на пример rax, rbx и слично, 64-битне аритметичке и логичке операције целим бројем, и 64-битни виртуелне адресе. Дизајнери су искористили прилику да направе и друга побољшања. Најзначајније промене укључују: 64-битни цео број: Сви регистри опште намене (ГПР) су проширена са 32 бита на 64 бита, и све аритметичке и логичке операције, операције меморија-регистар и регистар-меморија, итд, сада могу да раде директно на 64-битним целим бројевима. Додатни регистри: Поред повећања величине регистара опште намене, број именованих регистара опште намене је повећан са осам (eax, ebx, ecx, edx, ebp, esp, esi, edi) у x86 на 16 (rax, rbx, rcx, rdx, rbp, rsp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15). Због тога је могуће држати више локалних променљивих у регистрима, а не на стеку, и да регистри чувају често приступљене константе; аргументи за мале и брзе потпрограме може такође бити усвојен у регистрима у већој мери. АМД64 и даље има мање регистре од многих заједничких РИСЦ скупова инструкција (који обично имају 32 регистара) или машина сличних ВЛИВ-у, као што су ИА-64 (који има 128 регистара). Међутим, имплементација АМД64 може имати далеко више интерних регистара од броја архитектонских регистара изложених по скупу инструкција (види преименовање регистара). Додатни XMM (ССЕ) регистри: Слично, број 128-битних XMM регистара (користи се за стриминг СИМД инструкција) је такође повећан са 8 на 16. Већи простор за виртуелно адресирање: АМД64 архитектура дефинише 64-битни виртуелни адресни формат, од којих се 48 бита користе у тренутним имплементацијама. Ово омогућава до 256 терабајта (248 бајтова) виртуелног адресног простора. Дефиниција архитектуре омогућава да ова граница буде подигнута у будућим имплементацијама до пуних 64 бита, проширујући виртуелни адресни простор до 16 ексабајта (264 бајтова). То је много у односу на само 4 гигабајта (232 бајта) за x86. То значи да се над веома великим датотекама може бити оперисан преко мапирања целог фајла у адресни простор процеса (што је често много брже него рад позивима читања и писања), уместо мапирања региона датотеке у и ван адресног простора. Већи физички адресни простор: оригинална имплементација АМД64 архитектуре имплементира 40-битне физичке адресе и тако могао да адресира до 1 ТБ (240 бајта) РАМ меморије. Тренутне имплементације АМД64 архитектуре (почевши од АМД 10х микроархитектуре) проширују га на 48-битне физичке адресе и због тога може да адресира и до 256 ТБ РАМ-а. Архитектура дозвољава продужење до 52 бита у будућности (ограничен због page table entry формата); ово би омогућило адресирање до 4 петабајта РАМ-а. За поређење, 32-битни x86 процесори су ограничени на 64 GB РАМ меморије у Physical Address Extension режиму, или 4 GB РАМ-а без ПАЕ режима. Већи физички адресни простор у легаси () режиму: Када ради у режиму легаси АМД64 архитектура подржава ПАЕ режим, као и већина најновијих x86 процесора, али АМД64 протеже ПАЕ од 36 бита до архитектонског лимита од 52 бита физичкое адресе. Било каква имплементација стога дозвољава исту границу физичке адресе у дугом режиму. ССЕ инструкције: Оригинална АМД64 архитектура је усвојила Интелов ССЕ и ССЕ2 и као основне инструкције. ССЕ3 инструкције су додате у априлу 2005. ССЕ2 је алтернатива ИЕЕЕ 80-битној прецизности x86 скупа инструкција са избором од ИЕЕЕ 32-битног или 64-битног рачунања са покретним зарезом. Ово обезбеђује операцијама са покретним зарезом да буду компатибилне са многим другим савременим процесорима. ССЕ и ССЕ2 инструкције су такође проширене да раде на осам нових XMM регистара. ССЕ и ССЕ2 су доступни у 32-битном режиму у модерним x86 процесорима; Међутим, ако се они користе за 32-битне програме, ти програми ће радити само на системима са процесорима који имају ову функцију. Ово није проблем у 64-битним програмима, јер сви АМД64 процесори имају ССЕ и ССЕ2 и, па користећи ССЕ и ССЕ2 инструкције и уместо x86 инструкција не смањује скуп машина на којима се x86-64 програми могу покренути. ССЕ и ССЕ2 су генерално бржи и дуплирају већину карактеристика традиционалнеих x86 инструкција, MMX, и 3DNow!. No-Execute bit: "NX" бит (63. у page table) омогућава оперативном систему да одреди које странице виртуелне адресе могу садржати извршни код а које не могу. Покушај да се изврши код са странице означене са " no execute" ће резултовати у преступу при приступању меморији, сличано покушај да се пише преко " read-only" стране. Ово би требало да отежа злонамерном коду да преузме контролу над системом преко " buffer overrun" или "unchecked buffer" напада. Слична функција је доступна на x86 процесорима од 80286 као атрибутом сегментних дескриптора, међутим ово ради само на целом сегменту истовремено.
Сегментирано адресирање је дуго сматрано застарелим начином рада, а сви актуелне ПЦ (PC) оперативни системи на снази заобилазе га, постављајући све сегменте на базну адресу нуле и (у 32-битној имплементацији) величине 4 GB. АМД је први продавац породице x86 који је спровео "no-execute" у линеарном моду адресирања. Функција је такође доступна у легаси режиму на АМД64 процесорима, а однедавно и на Интел x86 процесорима, када се користи ПАЕ.
Уклањање старијих карактеристика: неколико карактеристика "системског програмирања" x86 архитектуре се не користе у модерним оперативним системима и нису доступни на АМД64 у дугом (64-битном и компатибилном) режиму. Ово укључује сегментирано адресирање (иако сегменти ФС и ГС сегменти остају у закржљалој форми за употребу као додатних базних показивача ОС структурама), који је механизам за промену стања задатка, и виртуелни 8086 мод. Ове особине остају у потпуности имплементиране у "легаси режиму", што дозвољава овим процесорима покретање 32-битних и 16-битних оперативних система без модификација. Неке инструкције за које се показало да су ретко коришћене нису подржане у 64-битном режиму: чување/враћање сегмента регистара на стек, чување/враћање свих регистара, децимална аритметика, BOUND и INTO инструкције, " far " скокове и позива са непосредним операнадима.
Детаљи виртуелног адресног простора Канонска форма адресирања Иако су виртуелне адресе ширине 64 бита у 64-битном режиму, актуелне имплементације (и сви чипови за које се зна да су у фази планирања) не дозвољавају да се цео виртуелни адресни простор од 264 бајтова (16 ЕБ) користи. Већини оперативних система и апликација неће требати толики адресни простор за догледну будућност (на пример, Windows имплементација за АМД64 су користи само 16 ТБ, или 44 бита), па спровођење такве широке виртуелне адресе ће једноставно повећати сложеност и Трошкови без стварне користи. АМД је стога одлучио да, у првим имплементацијама архитектуре, само најмање значајних 48 бита виртуелне адресе би преводилац адреса заправо користио. Даље, од бита 48 до 63 сви морају бити копија бита 47, или процесор ће подићи изузетак. Адресе које испуњавају ово правило се називају "канонске форме." Адресе канонске форма иду од 0 до 00007FFF'FFFFFFFF и од FFFF8000'00000000 до FFFFFFFF'FFFFFFFF, за укупно 256ТБ употребљивог виртуелног адресног простора.
Ово омогућава важну функцију за каснију скалабилност на право 64-битно адресирање: многим оперативним системима (укључујући Windows НТ породицу) узима вишу половину простора адреса (назван kernel простор) за себе и оставља доњу половину (кориснички простор) за апликациони код, корисничке стекове, хипове и друге регионе података. Дизајн "канонске адресе" обезбеђује да свака компатибилна имплементација АМД64 има две меморијске половине: доња половина почиње на адреси 00000000'00000000 и "расте нагоре" како више виртуелних адреса постану доступни, док је виша половина "усидрена" на врх адресе простора и расте надоле. Такође, фиксирање садржаја неискоришћене бит-них адреса спречава њихову употребу од стране оперативног система као flag, privilege markers, итд, зато што би таква употреба могла да постане проблематична када је архитектура проширена да спроводи више битова виртуелних адреса.