Содержание
- Что значит X64 и X86? Какая в них разница? И имеет ли это отношение к размеру ОЗУ?
- X64 что это
- Как правильно называть
- Режимы работы
- Особенности архитектуры
- Смерть и возрождение сегментной модели организации памяти
- См. также
- Ссылки
- 64-битный привет. Архитектура x86-64 под скальпелем ассемблерщика
- Что нам понадобится?
- Обзор x86-64
- Hello, world на x86-64
- Присоединяйся к сообществу «Xakep.ru»!

Есть и другие отличия от x86, но они не столь принципиальны. Важно то, что в режиме совместимости с x86 (Legacy Mode) ни 64-битные регистры, ни новые методы адресации не доступны! Никакими средствами (включая черную и белую магию) дотянуться до них нельзя, и, прежде чем что‑то сделать, необходимо перевести процессор в длинный режим (long mode), который делится на два подрежима: режим совместимости с x86 (compatibility mode) и 64-битный режим (64-bit mode). Режим совместимости предусмотрен только для того, чтобы 64-разрядная операционная система могла выполнять старые 32-битные приложения.
Никакие 64-битные регистры здесь и не ночевали!
Что значит X64 и X86? Какая в них разница? И имеет ли это отношение к размеру ОЗУ?
аппаратная платформа: архитектура микропроцессора и соответствующий набор инструкций, как разработанных и выпускаемых компанией Intel, так и совместимых с ними процессоров других производителей (AMD, VIA, Transmeta, WinChip и т. д.).
Источник: http://ru.wikipedia.org/wiki/X86
нет к ОЗУ нет никакого значение!
X64 это разряность системи (типа на роботу с каким процессорм розчитаное её ядро)
Х86 аппаратная платформа
Чем 64-бит версия отличается от 32-битной?
Это специальная 64-разрядная версия, разработанная для процессоров с технологиями EM64T (Pentium D, Core 2 Duo) и AMD64 (Opteron, Athlon 64) от фирм Intel и AMD соответственно. Основным достоинством системы является полноценная поддержка 4Гб RAM, а также быстрая работа с большими числами (Long Integer и Double Float). Таким образом, WinXP x64 очень эффективна при выполнении вычислений, использующих числа с плавающей запятой, необходимых в таких областях, как создание спецэффектов для кинофильмов и трёхмерной анимации или разработка технических и научных приложений. Соответственно, для реализации всего потенциала WinXP x64 потребуются 64-битные редакции программ, но даже в наше время их количество крайне невелико.Все будет работать независимо какую вы систему паставите х86 или х64,если у вас современный процессор то любая из этих платформ будет работать безупречно. Для 32-битных систем официально заявлена поддержка 4Гб RAM, однако видно только ~3,25Гб.
Почему?
Данный вопрос, пожалуй, волнует пользователей больше всего, поэтому придётся остановится на нём подробно. Всё дело в неверной формулировке. На самом деле официальное утверждение про поддержку Windows памяти до 4Гб должно звучать так: 32-битная ОС способна адресовать (указывать на ячейку памяти, к которой производится доступ) только в пределах 4Гб.
Теперь проясним ситуацию, когда в свойствах системы отображается лишь около трёх гигабайт памяти. Все устройства на компьютере адресуют память (видеокарта, звуковая карта и т.д.), потому что для разработчиков легче настроить обращение к адресу в памяти, к которому «привязано» устройство, чем возиться со специальными регистрами (портами) для обращения к этому устройству. Кроме того, обращение к памяти происходит значительно быстрее, потому что если обращаться к порту устройства, то для этого придётся ещё задействовать и центральный процессор, что в итоге приводит к серьёзным тормозам (те пользователи, у которых контроллер жёсткого диска сваливался из DMA-режима в PIO-режим, поймут, о каких тормозах идёт речь). Поэтому в своё время (1985 год, компания Intel выпускает свой знаменитый процессор 80386) было принято решение разделить доступные адреса (адресное пространство) на две части: под оперативку и под устройства, если они нуждались в адресах.
Адреса для устройств тогда поместили в конце доступного адресного пространства, отсчёт начинался с конца четвёртого гигабайта, ведь в 1985-ом году и в голову никому не могло прийти, что у кого-то будет аж четыре гига памяти!Как мы видим, системе доступно уже не 4Гб, а меньше из-за того, что часть адресов отведена под различные устройства. Как правило, конкретное число доступной оперативки варьируется из-за различных конфигураций компьютера. Иными словами, чем больше устройств в нём, тем меньше вы увидите доступной памяти в свойствах системы, однако чаще всего получается 3,25Гб. Соответственно, при установке WinXP x64 память начинает адресоваться нормально, т.е. устройства начинают размещаться за пределами первых 4Гб и поэтому видно все четыре гигабайта, ведь 64-битная система поддерживает 128Гб RAM.Часто встречается упоминание про ключ \PAE в boot.ini и про функцию memory remap в BIOS’е материнской платы, которые якобы могут помочь 32-битной ОС увидеть все 4Гб. Это правда?Объяснить про это вкратце очень сложно,на ixbt.com:Windows XP + SP2 и Windows Vista увидеть все четыре гигабайта ОЗУ (если установлены) просто не в состоянии, и изменить это нельзя. Тем, кто уже потратил свои кровные денежки на четыре гигабайтных модуля остается либо смириться, что часть их окажется неиспользованной, либо переходить на 64-разрядные версии ОС.Я установил Windows Vista и в свойствах системы у меня показываются все 4Гб!Это всего лишь маркетинговый ход.
Дело в том, что WinXP показывает объём доступной памяти, а Vista показывает сколько физически установлено памяти на компьютере. На самом же деле все ограничения WinXP x32 остались и в Windows Vista x32.
X64 что это
AMD64 (также x86-64/Intel64/EM64T/x64) — 64-битная архитектура микропроцессора и соответствующий набор инструкций, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86-64 в настоящее время поддерживается процессорами AMD Athlon 64, Athlon 64 FX, Athlon 64 X2, Phenom, Turion 64, Sempron. Этот набор инструкций был лицензирован основным конкурентом AMD — компанией EM64T (Intel 64) (ранее известные как EM64T и IA-32e) в поздних моделях процессоров Pentium 4, а также в Pentium D, Pentium Extreme Edition, Celeron D, Core 2 Duo и Microsoft и Sun Microsystems используют для обозначения этого набора инструкций термин x64, однако, каталог с файлами для архитектуры в дистрибьютивах Microsoft называется amd64 (ср. i386 для архитектуры x86).
Как правильно называть
Существует несколько вариантов названий этой технологии, которые, порой, приводят к путанице и могут ввести пользователя в заблуждение.
- x86-64. Первоначальный вариант. Именно под этим названием фирмой AMD была опубликована первая предварительная спецификация.
- AA-64. Так архитектуру окрестил популярный неофициальный справочник IA-64, и по-прежнему так её называющий, как AMD Architecture 64.
- Hammer Architecture. Иногда встречалось название по первым разрабатываемым ядрам процессоров, получившим названия Clawhammer (гвоздодёр) и Sledgehammer (кувалда) иногда называемых просто Hammer (молоток).
- AMD64. После выпуска первых Hammer’ов в названии архитектуры появилось название фирмы-разработчика Advanced Micro Devices. Сейчас является официальным для реализации AMD.
- Yamhill Tehnology. Первое название
- EM64T. Первое официальное название реализации Intel. Расшифровывалось как Extended Memory 64 Technology.
- IA-32e. Иногда встречалось совместно с EM64T, чаще для обозначения длинного режима, который в документации Intel называется «режимом IA-32e».
- Intel 64. Текущее официальное название архитектуры Intel. Постепенно Intel отказывается от наименований IA-32, IA-32e и EM64T в пользу этого названия, которое теперь является единственным официальным для этой архитектуры.
- x64 Официальное название версий операционных систем Windows и Solaris, также используемое как название архитектуры фирмами Sun Microsystems.
На сегодняшний день наиболее распространёнными являются AMD64, x86-64 и x64. Порой упоминание AMD вводит пользователей в заблуждение, вплоть до того, что они отказываются скачивать дистрибутивы родных версий ОС, мотивируя это тем, что на их Intel-процессоре версия для AMD не пойдёт. На самом деле распространители ПО используют название amd64 лишь потому, что именно AMD была пионером в разработке этой технологии. Бывает, что пользователи путают архитектуру Intel 64 с IA-64, ошибочно скачивая ПО для этой архитектуры, и с удивлением обнаруживают, что программа не запускается.
Во избежание подобных ошибок, всегда следует помнить, что Intel 64 и . Представители Intel 64 — это Pentium 4 (последние модели), ряд моделей Celeron D, семейство Core 2 и некоторые модели Intel Atom. Представители IA-64 — это семейства Itanium 2.
Режимы работы
Процессоры архитектуры поддерживают два режима работы: Long mode («длинный» режим) и Legacy mode («наследственный», режим совместимости с x86).
Long Mode
«Длинный» режим — «родной» для процессоров AMD64. Этот режим позволяет воспользоваться всеми дополнительными возможностями, предоставляемыми архитектурой AMD64. Для использования этого режима необходима 64-битная операционная система, например, Windows XP Professional x64 Edition,Windows Vista x64 или 64-битные варианты GNU/Linux, Solaris (смешаная 32/64 сборка с разными ядрами для 32- и 64-битных процессоров), Mac OS X (смешанная 32/64 сборка с 32-битным ядром, начиная с версии 10.4.7). Этот режим позволяет выполнять 64-битные программы; также (для обратной совместимости) предоставляется поддержка выполнения 32-битного кода, например, 32-битных приложений, хотя 32-битные программы не смогут использовать 64-битные системные библиотеки, и наоборот.
Чтобы справиться с этой проблемой, большинство 64-разрядных операционных систем предоставляют два набора необходимых системных файлов: один — для родных 64-битных приложений, и другой — для 32-битных программ. (Этой же методикой пользовались ранние 32-битные системы — например, Windows 95 — для выполнения 16-битных программ). В «длинном» режиме упразднен ряд «рудиментов» архитектуры 8086, сегментированная модель памяти (однако, осталась возможность использования сегментов FS и GS, что полезно для быстрого нахождения важных данных потока при переключении задач), аппаратная мультизадачность, а также ряд команд, как реализующих упраздненные возможности, так и работающие с BCD-числами, которые в новых программах практически не использовались. Среди особенностей «длинного» режима, следует отметить тот факт, что он активируется установкой флага CR0.PG, который используется для включения страничного MMU (при условии что такое переключение разрешено (EFER.LME=1), в противном случае просто произойдет включение MMU в «наследственном» режиме). Таким образом, невозможно исполнение 64-битного кода с запрещенным страничным преобразованием.
Это создает определенные трудности в программировании, поскольку при переключении из «длинного» в «наследственный» режим и обратно (например, для вызова функций DOS, монитором виртуальной машины, и т. д.) требуется двойной сброс MMU, для чего код переключения должен находиться в тождественно отображённой странице.
Legacy Mode
Данный «наследственный» режим позволяет процессору AMD64 выполнять инструкции, рассчитанные для процессоров x86, и предоставляет полную совместимость с 32/16-битным кодом и операционными системами. В этом режиме процессор ведёт себя точно так же, как x86-процессор, например Pentium 4, и дополнительные функции, предоставляемые архитектурой AMD64 (например, дополнительные регистры) недоступны. В этом режиме 64-битные программы и операционные системы работать не будут (если, конечно, не используется виртуализация).
Особенности архитектуры
Разработанный компанией AMD набор инструкций x86-64 (позднее переименованный в AMD64) — расширение архитектуры Intel IA-32 (x86-32). Основной отличительной особенностью AMD64 является поддержка 16-ти 64-битных регистров общего назначения (против 8-и 32-битных в x86-32), 64-битных арифметических и логических операций над целыми числами и 64-битных виртуальных адресов. Для адресации новых регистров для команд введены так называемые «префиксы расширения регистра», для которых был выбран диапзон кодов 40h-4Fh, использующихся для команд INC и DEC в 32- и 16-битных режимах. Команды INC и DEC в 64-битном режиме должны кодироваться в более общей, двухбайтовой форме.
Архитектура x86_64 имеет:
- 16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15),
- 8 80-битных регистров с плавающей точкой (ST0 — ST7),
- 8 64-битных регистров (MM0 — MM7, имеют общее пространство с регистрами ST0 — ST7),
- 16 128-битных регистров
- 64-битный указатель RIP и 64-битный регистр флагов RFLAGS.
Смерть и возрождение сегментной модели организации памяти
Разрабатывая архитектуру x86-64, инженеры корпорации AMD решили навсегда покончить с главным «рудиментом» архитектуры x86 — сегментной моделью памяти, которая передавалась по наследству ещё со времён 8086/80286. Однако, как потом оказалось, они очень погорячились. Архитектура стала абсолютно невиртуализируемой. При разработке новой версии своего продукта для виртуализации программисты компании VMWare столкнулись с непреодолимыми трудностями при реализации 64-битной виртуальной машины. Поскольку, для отделения кода монитора от кода «гостя» программой использовался механизм сегментации, эта задача стала практически неразрешимой.
Осознав свою ошибку, AMD вернула ограниченный вариант сегментной организации памяти начиная с ревизии D архитектуры AMD64, что позволило запускать 64-битные ОС в виртуальных машинах. VMWare предоставляет вместе со своими продуктами специальную утилиту. Также следует отметить, что первоначально попавшие «под нож» команды LAHF и SAHF, которые также активно используются ПО виртуализации, затем также были возвращены в систему команд. С распространением средств аппаратной виртуализации (Intel VT, AMD-V) потребность в сегментации вновь постепенно отпадет, однако VMWare по-прежнему активно её использует, и поддержки AMD-V даже на сегодняшний день в её продуктах нет.
См. также
Ссылки
- Архитектура AMD64 (EM64T)
- Архитектура x86-64 под скальпелем ассемблерщика
- The world’s leading source for pure technical x86 processor information.
- EM64T на сайте Intel
- Документация на сайте AMD, а именно:
- AMD64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions Rev 3.14
- AMD64 Architecture Programmer’s Manual Volume 4: 128-Bit Media Instructions Rev 3.10 (SSE)
- AMD64 Architecture Programmer’s Manual Volume 5: 64-Bit Media and x87 Floating-Point Instructions Rev 3.09 (FPU, MMX)
- и другие
Wikimedia Foundation . 2010 .
64-битный привет. Архитектура x86-64 под скальпелем ассемблерщика

Что такое разрядность (битность) Windows и зачем она нужна [x32, x64, x86]
32-битная эпоха уходит в прошлое, сдаваясь под натиском новых идей и платформ. Оба флагмана рынка (Intel и AMD) представили 64-битные архитектуры, открывающие дверь в мир больших скоростей и производительных ЦП. Это настоящий прорыв — новые регистры, новые режимы работы… попробуем с ними разобраться? Мы рассмотрим архитектуру AMD64 (она же x86-64) и покажем, как с ней бороться.
64-битный лейбл — звучит возбуждающе, но в практическом плане это всего лишь хитрый маркетинговый трюк, скрывающий не только достоинства, но и недостатки. Нам дарованы 64-битные операнды и 64-битная адресация. Казалось бы, лишние разряды карман не тянут и если не пригодятся, то по крайней мере не помешают. Так ведь нет! С ростом разрядности увеличивается и длина машинных команд, а значит, время их загрузки/декодирования и размеры программы, поэтому для достижения не худшей производительности 64-битный процессор должен иметь более быструю память и более емкий кеш.
Это раз.
64-битные целочисленные операнды становятся юзабельны только при обработке чисел порядка 2^33 + (8 589 934 592) и выше. Там, где 32-битному процессору требуется несколько тактов, 64-битный справляется за один. Но где ты видел такие числа в домашних и офисных приложениях? Не зря же инженеры из Intel пошли на сокращение разрядности АЛУ (арифметико‑логического устройства), ширина которого в Pentium 4 составляет всего 16 бит, против 32 бит в Pentium III. Это не значит, что Pentium 4 не может обрабатывать 32-разрядные числа.
Может. Только он тратит на них больше времени, чем Pentium III. Но, поскольку процент подлинно 32-разрядных чисел (то есть таких, что используют свыше 16 бит) в домашних приложениях относительно невысок, производительность падает незначительно. Зато ядро содержит меньше транзисторов, выделяет меньше тепла и лучше работает на повышенной тактовой частоте — в целом эффект положительный.
64-битная разрядность… Помилуй! Адресовать 18 446 744 073 709 551 616 байт памяти не нужно даже Microsoft’у со всеми его графическими заворотами! Из 4 Гбайт адресного пространства Windows Processional и Windows Server только 2 Гбайт выделяют приложениям.
3 Гбайт выделяет лишь Windows Advanced Server, и не потому, что больше выделить невозможно! x86-процессоры с легкостью адресуют вплоть до 16 Гбайт (по 4 Гбайт на код, данные, стек и кучу), опять‑таки обходясь минимальной перестройкой операционной системы! Почему же до сих пор это не было сделано? Почему мы сидим на жалких 4 Гбайт, из которых реально доступны только два?! Да потому, что больше никому не нужно!
Систему, адресующую 16 Гбайт, просто так не продашь, кого эти гигабайты интересуют? Вот 64 бита — совсем другое дело! Это освежает! Вот все вокруг них и танцуют.
Сравнивать 32- и 64-битные процессоры бессмысленно. Если 64-битный процессор на домашнем приложении оказывается быстрее, то отнюдь не за счет своей 64-битности, а благодаря совершенно независимым от нее конструктивным ухищрениям, на которых инженеры едва не разорвали себе задницы!
В чем разница между WINDOWS x86 и WINDOWS x64 (разрядность ОС Виндовс)

Впрочем, не будем о грустном. 64 бита все равно войдут в нашу жизнь. Для некоторых задач они очень даже ничего. Вот, например, криптография. 64 бита — это же 8 байт!
8-символьные пароли можно полностью уместить в один регистр, не обращаясь к памяти, что дает невероятный результат! Скорость перебора увеличивается чуть ли не на порядок! Ну так чего же мы ждем? Вперед!
На штурм 64-битных вершин!
Что нам понадобится?
Нам потребуется 64-разрядная операционная система. Дотянуться до 64-битных регистров и прочих вкусностей x86-64-архитектуры можно только из специального 64-разрядного режима (long mode). Ни под реальным, ни под 32-разрядным защищенным x86-режимом они не доступы. И хотя мы покажем, как перевести процессор из реального в 64-разрядный режим, создание полнофункциональной операционной системы не входит в наши планы, а без нее никуда!
Теперь перейдем к подготовке инструментария. Как минимум нам понадобится ассемблер и отладчик. Мы будем использовать FASM. Он бесплатен, работает под Linux, Windows и MS-DOS, поддерживает x86-64 и обладает удобным синтаксисом.
Практически во все x86-64-порты Linux входит GNU Debugger, которого для наших задач вполне достаточно. Обладатели Windows могут воспользоваться Microsoft Debugger.
Обзор x86-64
За подробным описанием x86-64-архитектуры лучше всего обратиться к фирменной документации AMD64 Technology — AMD64 Architecture Programmer’s Manual Volume 1:Application Programming. Мы же ограничимся только беглым обзором основных нововведений.
Наконец‑то AMD сжалилась над нами и подарила программистам то, чего все так долго ждали. К семи регистрам общего назначения (восьми — с учетом ESP) добавилось еще восемь, в результате чего их общее количество достигло 15 (16) штук.
Старые регистры, расширенные до 64 бит, получили имена RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, RIP и RFLAGS. Новые регистры остались безымянными и просто пронумерованы от R8 до R15. Для обращения к младшим 8, 16 и 32 битам новых регистров можно использовать суффиксы b, w и d. Например, R9 — это 64-разрядный регистр, R9b — его младший байт (по аналогии с AL), а R9w — младшее слово (то же самое, что AX в EAX). Прямых наследников AH, к сожалению, не наблюдается, и для манипуляции со средней частью регистров приходится извращаться со сдвигами и математическими операциями.
Регистр, указатель команд RIP, теперь адресуется точно так же, как и все остальные регистры общего назначения. Программисты, заставшие живую PDP-11 (или ее отечественный клон — «Электронику БК», или УКНЦ), только презрительно хмыкнут: наконец‑то до разработчиков стали доходить очевидные истины, которые на всех нормальных платформах были реализованы еще неизвестно когда.
Возьмем простейший пример: загрузим в регистр AL опкод следующей машинной команды. На x86 приходится поступать так.
Загрузка опкода следующей машинной команды в классическом x86
call $ + 5 ; Запихнуть в стек адрес следующей команды и передать на нее управление
pop ebx ; Вытолкнуть из стека адрес возврата
add ebx , 6 ; Скорректировать адрес на размер команд pop/ add/ mov
mov al , [ ebx ] ; Теперь AL содержит опкод команды NOP
NOP ; Команда, чей опкод мы хотим загрузить в ALЭто же умом поехать можно, пока все это напишешь! И еще здесь очень легко ошибиться в размере команд — приходится вычислять его вручную либо загромождать листинг никому не нужными метками. К тому же неизбежно затрагивается стек, что в ряде случаев нежелательно или недопустимо (особенно в защитных механизмах, нашпигованных антиотладочными приемами).
А теперь перепишем тот же самый пример на x86-64.
Загрузка опкода следующей машинной команды на x86-64
mov al , [ rip ] ; Загружаем опкод следующей машинной команды
NOP ; Команда, чей опкод мы хотим загрузить в ALКрасота! Только следует помнить, что RIP всегда указывает на следующую, а отнюдь не текущую инструкцию! К сожалению, ни Jx RIP, ни CALL RIP не работают. Таких команд в лексиконе x86-64 просто нет.
Но это еще что! Исчезла абсолютная адресация! Если нам надо изменить содержимое ячейки памяти по конкретному адресу, на x86 мы поступаем приблизительно так:
dec byte ptr [ 666h ] ; Уменьшить содержимое байта по адресу 666h на единицу
Под x86-64 транслятор выдает ошибку ассемблирования, вынуждая нас прибегать к фиктивному базированию:
xor r9 , r9 ; Обнулить регистр r9
dec byte ptr [ r9 + 666h ] ; Уменьшить содержимое байта по адресу 0+666h на единицуЕсть и другие отличия от x86, но они не столь принципиальны. Важно то, что в режиме совместимости с x86 (Legacy Mode) ни 64-битные регистры, ни новые методы адресации не доступны! Никакими средствами (включая черную и белую магию) дотянуться до них нельзя, и, прежде чем что‑то сделать, необходимо перевести процессор в длинный режим (long mode), который делится на два подрежима: режим совместимости с x86 (compatibility mode) и 64-битный режим (64-bit mode). Режим совместимости предусмотрен только для того, чтобы 64-разрядная операционная система могла выполнять старые 32-битные приложения.
Никакие 64-битные регистры здесь и не ночевали!
Реальная 64-битность обитает только в 64-bit long mode, о котором мы и будем говорить.
Hello, world на x86-64
Программирование под 64-битную версию Windows мало чем отличается от традиционного, только все операнды и адреса по умолчанию 64-разрядные, а параметры API-функций передаются большей частью через регистры, а не через стек. Первые четыре аргумента всех API-функций передаются в регистрах RCX, RDX, R8 и R9 (регистры перечислены в порядке следования аргументов, крайний левый аргумент помещается в RCX). А уж остальные параметры кладутся в стек. Все это называется x86-64 fast calling conversion (соглашение о быстрой передаче параметров для x86-64), подробное описание можно найти в статье The history of calling conventions, part 5 amd64.
Также советую заглянуть на страничку бесплатного компилятора Free PASCAL и поднять документацию по способам вызова API.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Крис Касперски
Известный российский хакер. Легенда ][, ex-редактор ВЗЛОМа. Также известен под псевдонимами мыщъх, nezumi (яп. 鼠, мышь), n2k, elraton, souriz, tikus, muss, farah, jardon, KPNC.
Похожие статьи
-
Содержание X86-64 Как правильно называть Режимы работы Long Mode Legacy Mode Особенности архитектуры Смерть и возрождение сегментной модели организации…