2011-08-13 7 views
13

gcc 인라인 어셈블리를 시험하기 위해 32 비트 Vista 상자에 mingw32를 설치했습니다. 불행히도 32 비트 gcc 컴파일러는 %% rax와 같은 과 같은 64 비트 레지스터를 인식하지 못합니다. 32 비트 윈도우 아래의 64 비트 레지스터

  1. 그것을 방지 할 수는 x86 (인텔 코어 듀오 T5800)에 대한 몇 가지 프로세서 모드가 있습니까 : 나는 새로운 툴체인을 조립하는 노력에 시간을 많이 침몰하기 전에

    , 나는 몇 가지 질문이 Vista32를 실행하는 동안 64 비트 레지스터를 사용하지 못하게됩니까?

  2. # 1에 대한 대답은 "당연히 32 비트 창에서 % rax 등을 사용할 수 있습니다"라고 가정하면 gcc는 64 비트 레지스터를 인식하고 실행될 실행 파일을 빌드하도록 구성 할 수 있습니다 32 비트 창? gcc에는 -m64 옵션이 있지만 mingw32와 함께 제공되는 내 버전에는 64 비트 지원이 없습니다. 64 비트에 액세스 할 수있는 32 비트 응용 프로그램을 빌드 할 수 있다면 gcc를 확실히 재구 축할 수 있습니다. 레지스터하지만 어쨌든 작동하지 않으면 그 고통을 겪고 싶지 않습니다.

은 제외 :이 실제로는 SSE2 명령 (예, 컴파일러 내장 함수가 존재 알고,하지만 난 기계 레벨부터 그것을 이해하고 싶습니다)을 학습 향한 첫 번째 단계입니다.

미리 답변 해 주셔서 감사합니다. - 짐

답변

6
  1. , 64 비트 프로세서 3 개 크기 모드, 16 비트, 32 비트 및 64 비트를 갖는다. 운영 체제는 운영 체제 자체보다 큰 모드에서 코드를 실행할 수 없습니다. 따라서 Vista 32 비트는 16 비트 및 32 비트 용으로 작성된 코드 만 실행할 수 있습니다. 귀하의 프로세서 does indeed support 64-bits, 그래서 당신은 그것에 64 비트 운영 체제를 설치하려고합니다. 컴퓨터에 실제 Windows Vista CD가있는 경우 Vista 64 용 CD가 별도로있을 수 있습니다. x86-64를 지원하는 새로운 툴체인을 만들면 64 비트 명령어와 레지스터를 사용하는 코드를 컴파일 할 수 있지만 64 비트 OS를 설치하지 않으면 결과 실행 파일을 실행할 수 없습니다.

  2. rax은 64 비트 레지스터 (32 비트 해당 코드는 eax)이므로 64 비트 프로그램을 제외하고는 액세스 할 수 없습니다. 그 이유는 프로세서가 프로그램에서 보내는 명령을 프로세서가 어떻게 해석하는지에 대한 다소 복잡한 설명입니다.

그러나 실제로 MMX, SSE, SSE2 및 SSE3을 사용하려면 64 비트 코드에 액세스 할 필요가 없습니다. 이러한 모든 명령어는 32 비트 모드에서 사용할 수 있으며 프로세서에서 지원합니다.

또한 가상 컴퓨터를 실행하고 그 안에 Ubuntu를 넣는 것이 좋습니다. 이렇게하면 Windows 바탕 화면의 창 안에 Linux를 실행할 수 있습니다. 네가 mingw32를 사용하는 것보다 네이티브 방식으로 GNU 툴 체인 (gcc, 등)을 사용하는 것이 더 쉬울 것이라 생각합니다. VM을 설치하고 사용하기가 쉽기 때문에 더 이상 mingw32를 사용할 이유가 없습니다. Microsoft에서 무료로 제공되는 Windows 기반 컴파일러 인 Microsoft Visual C++ Express를 살펴볼 수도 있지만 64 비트를 지원하지는 않습니다 (제공하는 버전에 대해 비용을 지불해야합니다).

+0

훌륭한 답변을 주셔서 감사합니다. 재 : 64 비트 비스타 ... 나는 (내가 생각하는) 인터페이스를 통해 마이크로 컨트롤러에 연결, 서명되지 않은 드라이버를 사용하므로 기쁨이 없습니다. 32 비트 창에서 64 비트 VM을 실행할 수 있습니까? 저는 현재 VMWare에서 32 비트 RH9와 Fedora 11을 가지고 있습니다. 64 비트 VM을 살펴 보겠습니다.32 비트에서 SSE2에 액세스 할 수 있다면 64를 건너 뛰기 만 할 것입니다 (SSE2는 64 비트에서만 사용할 수 있다고 잘못 생각한 것 같습니다). 다시 고마워! – Jim

+1

나는 그것이 뒤얽힌다고 말하지 않을 것이다. 지원되지 않는 주된 이유는 32 비트 OS가 작업 스위치의 모든 레지스터를 저장/복원하지 않기 때문입니다. OS는 항상 프로세스에서 보이는 모든 아키텍처 상태를 저장/복원하는 방법을 알고 있어야합니다. (이는 사용자 공간 프로세스가 SSE를 사용하기 전에 OS 지원이 필요한 이유이지만 MMX에 대한 추가 지원은 필요하지 않습니다.) –

관련 문제