Как x64 архитектура отличается от x86

Я испытал Обработчик Копий , и он работает очень хорошо. Это имеет некоторые замечательные функции, где можно управлять буферизацией в зависимости от типа медиа и с поддержкой организации очередей файла, таким образом, можно установить копию и операции пересылки и забыть о них и минимизировать дисковую фрагментацию одновременно. Таким образом, это не скопирует несколько файл одновременно от единственного CD или DVD, поскольку это заставило бы диск искать слишком много.

Лучше всего всего его Открытого исходного кода.

7
задан Scott J 23 November 2009 в 17:55
поделиться

8 ответов

Для начала размер указателя составляет 8 байтов вместо 4.

Регистры также могут содержать 64-битные значения.

Также часто бывает много различий на уровне ОС. . Например, в Windows у вас есть такие вещи, как перенаправление файловой системы и перенаправление реестра (WOW64) при запуске 32-битных приложений в 64-битной ОС Windows.

1
ответ дан 6 December 2019 в 07:26
поделиться

Гм, стек? Вы имеете в виду физический (стек E / RSP)? Если так, то мой ответ уместен:

На x86 почти каждый компилятор C использует стандарт вызова cdecl . Я не могу вспомнить подробностей о нем, но он был одинаковым для компиляторов и операционных систем. По сути, аргументы помещаются в стек (справа налево), а затем возвращаемое значение помещается в eax, и вызывающий объект отвечает за очистку.

Однако на x86-64 все довольно запутано. Соглашение о вызовах Windows отличается от linux (большинство unix-подобных ОС, отличных от Linux, сохранили исходный стандарт вызовов C, хотя это приводит к еще большим неприятностям). Не могу вспомнить, чем они отличаются, но они есть. Поищите в Google «различные соглашения о вызовах x86-64», и вы найдете их подробности.

см .: http: // en. wikipedia.org/wiki/X86_calling_conventions#Microsoft_x64_calling_convention

2
ответ дан 6 December 2019 в 07:26
поделиться

Все регистры в процессоре x86 являются 32-разрядными, тогда как для 64-разрядных - 64-разрядных :)

Если вы используете арифметику указателя, тогда sizeof () даст разные результаты и как и операция incrment.

Я чувствую, что вы можете получить подробную информацию на сайте Intel о двух архитектурах, а также даже о наборе инструкций, выделяющем новые инструкции, добавленные с помощью 64-битных процессоров.

0
ответ дан 6 December 2019 в 07:26
поделиться

В дополнение к тому, что регистры общего назначения теперь 64-битные вместо 32, также есть новые регистры: r8, r9, r10, r11, r12, r13, r14 и r15. Тот факт, что регистров больше, также приводит к тому, что большинство компиляторов используют соглашения о вызове по регистрам для вызовов функций (кроме тех, у которых есть varargs), тогда как в x86 большинство компиляторов помещают все аргументы в стек.

x87 FPU также устарел, предпочитая SSE.

0
ответ дан 6 December 2019 в 07:26
поделиться

Во всех ответах здесь упоминаются изменения в наборе регистров, которые я перечислю здесь для полноты:

  • Все существующие 32-битные регистры общего назначения расширены до 64 бит ( EAX расширен до RAX и так далее)
  • 8 новых 64-битных регистров общего назначения ( R8 - R15 )
  • 8 новых 128-битных регистров SSE ( XMM8 - XMM15 )

Также есть изменения в режимах адресации:

  • CS, DS, ES и SS плоские. То есть их база равна 0x0 , а их предел - 0xffffffffffffffff . FS и GS могут иметь базу более 32 бит.
  • Дескрипторы в GDT, LDT и IDT изменились. Они имеют 8 байтов в 64-битном режиме
  • Несмежное адресное пространство. В 32-битном режиме линейное адресное пространство составляет от 0x0 до 0xfffffff . В 64-битном режиме линейное адресное пространство делится с 0x0 на 0x00007ffffffff и с 0xffff800000000000 на 0xffffffffffffff . В основном адрес имеет только 48 битов, а адрес расширен по знаку до 64 бит.
  • Новый режим пейджинга.

Различные инструкции были удалены:

  • Однобайтовые INC инструкции с кодировкой 40+ rw и 40+ rd . Байт 4 x стал префиксом REX .
  • инструкции для загрузки сегментных регистров, которые теперь являются плоскими: LDS , LDS , LSS .

Есть и другие отличия, которые я просто припоминаю. Я добавлю их, если придумаю еще.

8
ответ дан 6 December 2019 в 07:26
поделиться

В x86 имеется 8 32-битных регистров, в x64 регистры по 64 бита каждый и их еще 8. 128-битные регистры SSE имеют по 128 бит в обоих, но на x86 их 8, а на x64 их 16. Также некоторые инструкции были вырезаны в x64.

В режиме x64 вы все еще можете использовать регистры как 32-битные, используя их 32-битные имена (начинающиеся с 'e') вместо их 64-битных имен (начиная с 'r' ), и сборка будет в основном такой же.

http://en.wikipedia.org/wiki/X86#x86_registers

Или, если вам нужно действительно тяжелое чтение (например, тысячи страниц ...)

http://www.intel.com/products/processor/manuals/index.htm Я прочитал несколько сотен страниц этих руководств и узнал много, действительно полезного.

9
ответ дан 6 December 2019 в 07:26
поделиться

Хотя я не думаю, что это конкретно ответ x86 или x64, он может быть актуальным.

В Linux под x86 стек равен 4k или 8k, а под x64 - 16k.

0
ответ дан 6 December 2019 в 07:26
поделиться

Я считаю, что статья в Википедии, на которую вы ссылаетесь, предоставляет разумный объем вводной информации. Если вас интересуют конкретные детали различий в длинном режиме, вы можете обратиться к одной из официальных ссылок: Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32 .

3
ответ дан 6 December 2019 в 07:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: