Подтвердить что ты не робот

64-битные регистры под 32-битными окнами

Я только что установил mingw32 на своем 32-битном поле Vista, чтобы поэкспериментировать с сборкой gcc inline. К сожалению, 32-битный gcc-компилятор не распознает 64-разрядные регистры, таких как %% rax.

До того, как я утонул много времени в попытке собрать новую инструментальную цепочку, у меня есть несколько вопросов:

  • Есть ли какой-то процессорный режим на x86 (Intel Core Duo, T5800), который предотвратит использование 64-разрядных регистров при работе Vista32 (т.е. это потерянная причина)?

  • Предполагая, что ответ на # 1 "Конечно, вы можете использовать% rax и т.д. под 32-битными окнами", может быть настроен как распознавать 64-разрядные регистры. И построить исполняемый файл, который будет запускаться под 32-битными окнами? Я знаю, что gcc имеет параметр -m64, но моя версия, которая поставляется вместе с mingw32, не содержит 64-разрядной поддержки. Я, конечно же, хочу перестроить gcc, если он может создавать 32-разрядные приложения, имеющие доступ к 64-разрядным регистры, но я не хочу переживать эту боль, если она все равно не будет работать.

Помимо этого: это на самом деле первый шаг к изучению инструкций SSE2 (да, я знаю, существуют встроенные возможности компилятора, но я бы хотел понять это с уровня машины).

Заранее благодарим за любой ответ!

-Джит

4b9b3361

Ответ 1

  • Да, 64-разрядный процессор имеет 3 режима размера, 16-разрядный, 32-битный и 64-разрядный. Операционная система не может запускать код в режиме, который больше, чем сама операционная система. Таким образом, Vista 32-bit может запускать только код, построенный для 16-битных и 32-разрядных. Ваш процессор действительно поддерживает 64-разрядные файлы, поэтому вы должны попытаться установить на нем 64-разрядную ОС. Если на вашем компьютере установлены реальные компакт-диски Windows Vista, для Vista 64 может быть отдельный компакт-диск. Если вы создадите новую инструментальную цепочку с поддержкой x86-64, вы сможете скомпилировать код, который использует 64-битные инструкции и регистры, но вы будете не сможет запускать исполняемые файлы, если вы не установите 64-разрядную ОС.

  • Так как rax - это 64-разрядный регистр (32-разрядный эквивалент - eax), к нему нельзя получить доступ, кроме как из 64-разрядной программы. Причиной этого является довольно запутанное объяснение того, как процессор интерпретирует команды, которые посылает ваша программа.

Но вам действительно не нужен доступ к 64-битовому коду, чтобы использовать MMX, SSE, SSE2 и SSE3. Все эти инструкции доступны в 32-битном режиме и поддерживаются вашим процессором.

Вам также может потребоваться запустить виртуальную машину и поместить Ubuntu в нее. Это позволит вам запускать Linux внутри окна на рабочем столе Windows. Я думаю, что у вас будет более легкое время для использования с помощью цепочки инструментов GNU (gcc и т.д.) Изначально, чем вы будете использовать mingw32. Виртуальные машины просты в установке и использовании в этот день и в возрасте, и нет никаких оснований для использования mingw32. Вы также можете посмотреть на MS Visual С++ Express, который является компилятором на базе Windows, который является бесплатным от Microsoft, но он не поддерживает 64-разрядную (вам нужно заплатить за версию, которая делает).