2011-08-13 27 views
13

Acabo de instalar mingw32 en mi cuadro Vista de 32 bits para experimentar con el ensamblado gcc en línea. Lamentablemente, el compilador gcc de 32 bits no reconoce los registros de 64 bits, , como %% rax.Registros de 64 bits en ventanas de 32 bits

Antes me hundo mucho tiempo en tratar de montar un nuevo conjunto de herramientas, tengo algunas preguntas:

  1. ¿Hay algún modo de procesador en el x86 (Intel Core Duo, T5800) que evitará que se de utilizar los registros de 64 bits mientras se ejecuta Vista32 (es decir, ¿es esta una causa perdida)?

  2. Suponiendo que la respuesta al # 1 es "Por supuesto puede usar% rax, etc. en ventanas de 32 bits", se puede configurar gcc para que reconozca los registros de 64 bits Y cree un ejecutable que se ejecutará bajo Ventanas de 32 bits? Sé que gcc tiene una opción -m64, pero mi versión que vino con mingw32 no tiene compilación de 64 bits. Estoy dispuesto a reconstruir gcc si puede compilar aplicaciones de 32 bits que tienen acceso a 64 bits. se registra, pero no quiero pasar por ese dolor si no va a funcionar de todos modos.

Aparte: Esto es realmente un primer paso hacia el aprendizaje de las instrucciones SSE2 (sí, lo sé, existen características intrínsecas del compilador, pero me gustaría entenderlo desde un nivel de la máquina hacia arriba).

¡Gracias de antemano por cualquier respuesta!

-Jim

Respuesta

6
  1. Sí, un procesador de 64 bits tiene 3 modos de tamaño, 16 bits, 32 bits y 64 bits. Un sistema operativo no puede ejecutar código en un modo más grande que el sistema operativo en sí. Por lo tanto, Vista de 32 bits solo puede ejecutar código creado para 16 bits y 32 bits. Su procesador does indeed support 64-bits, por lo que debe intentar instalar un sistema operativo de 64 bits en él. Si su computadora viene con CD de Windows Vista, puede haber un CD separado para Vista 64. Si construye una nueva cadena de herramientas con soporte x86-64, podrá compilar código que use instrucciones y registros de 64 bits, pero lo hará no podrá ejecutar los ejecutables resultantes a menos que instale un sistema operativo de 64 bits.

  2. Dado que rax es un registro de 64 bits (el equivalente de 32 bits es eax) no se puede acceder excepto desde un programa de 64 bits. La razón para esto es una explicación bastante intrincada de cómo el procesador interpreta los comandos que envía su programa.

Pero, en realidad no se necesita tener acceso a código de 64 bits con el fin de utilizar MMX, SSE, SSE2, SSE3 y. Todas estas instrucciones están disponibles en modo de 32 bits y son compatibles con su procesador.

También es posible que desee considerar ejecutar una máquina virtual y poner Ubuntu dentro de ella. Esto le permitirá ejecutar Linux dentro de una ventana en su escritorio de Windows. Creo que le resultará más fácil usar la cadena de herramientas GNU (gcc, etc.) de forma nativa que con mingw32. Las máquinas virtuales son fáciles de instalar y usar en este día y edad, hay pocas razones para usar mingw32. También podría consultar MS Visual C++ Express, que es un compilador basado en Windows que está libre de Microsoft, pero no admite 64 bits (debe pagar por una versión que sí lo haga).

+0

Gracias por una excelente respuesta. Re: Vista de 64 bits ... me conecto a microcontroladores a través de una interfaz que (creo) usa controladores sin firmar, por lo que no hay alegría allí. ¿Puedo ejecutar una máquina virtual de 64 bits en ventanas de 32 bits? Actualmente tengo RH9 de 32 bits y Fedora 11 ambos bajo VMWare. Buscaré en la máquina virtual de 64 bits.Probablemente salte 64 aunque si puedo acceder a SSE2 desde 32 bits (estaba bajo la impresión errónea de que SSE2 solo estaba disponible desde 64 bit). ¡Gracias otra véz! – Jim

+1

No diría que es complicado. La razón principal por la que no se admite es que un sistema operativo de 32 bits no guardará/restaurará todos los registros en los conmutadores de tareas. El sistema operativo siempre debe saber cómo guardar/restaurar todo el estado arquitectónico visto por un proceso. (Esta es la razón por la que se necesita soporte de sistema operativo antes de que los procesos de espacio de usuario puedan usar SSE, pero no se necesita soporte adicional para MMX). –

Cuestiones relacionadas