64-битные регистры под 32-битными окнами - PullRequest
14 голосов
/ 13 августа 2011

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

Прежде чем я потрачу много времени на сборку новой цепочки инструментов, у меня есть несколько вопросов:

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

  2. Предполагая, что ответ на вопрос № 1: «Конечно, вы можете использовать% rax и т. Д. В 32-битных окнах», можно настроить gcc как на распознавание 64-битных регистров, так и на создание исполняемого файла, который будет работать под 32-битными окнами? Я знаю, что у gcc есть опция -m64, но моя версия, поставляемая с mingw32, не имеет встроенной 64-битной поддержки. Я, безусловно, готов перестроить gcc, если он может создавать 32-битные приложения, имеющие доступ к 64-битным регистрируется, но я не хочу проходить через эту боль, если она все равно не сработает.

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

Заранее спасибо за любой ответ!

-Джит

1 Ответ

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...