visual studio ensamblador ejemplo definicion asm c++ windows visual-c++ 64bit inline-assembly

c++ - studio - Aplicaciones de 64 bits y ensamblaje en línea



ensamblador en visual studio (3)

Estoy usando Visual C ++ 2010 desarrollando aplicaciones de Windows de 32 bits. Hay algo que realmente quiero usar ensamblado en línea. Pero me acabo de dar cuenta de que C ++ visual no es compatible con el ensamblaje en línea en aplicaciones de 64 bits. Así que portar a 64 bits en el futuro es un gran problema.

No tengo idea de cómo las aplicaciones de 64 bits son diferentes de las aplicaciones de 32 bits. ¿Existe la posibilidad de que TODAS las aplicaciones de 32 bits se actualicen a 64 bits en el futuro? Escuché que las CPU de 64 bits tienen más registros. Como el rendimiento no es una preocupación para mis aplicaciones, el uso de estos registros adicionales no me concierne. ¿Hay alguna otra razón por la que una aplicación de 32 bits debe actualizarse a 64 bits? ¿Podría una aplicación de 64 bits procesar las cosas de manera diferente cuando se compara con una aplicación de 32 bits, además de que las aplicaciones de 64 bits pueden usar registros o instrucciones que son exclusivas de las CPU de 64 bits?

Mi aplicación necesita interactuar con otros componentes del sistema operativo, por ejemplo, controladores, que sé que debe ser de 64 bits en las ventanas de 64 bits. ¿Mi aplicación de 32 bits sería compatible con ellos?


Además de la gran redacción de form @ Billy, si realmente sientes la necesidad de usar el ensamblaje en línea de 64 bits, entonces puedes usar un ensamblador externo como MASM para hacerlo, mira esto . (También es posible acelerar esto con scripts de prebuild).


Visual C ++ no admite el ensamblaje en línea para el modo x64, porque generalmente el uso del ensamblaje en línea es una mala idea.

  1. Por lo general, los compiladores producen un mejor ensamblaje que los humanos.
  2. Incluso si puede producir un ensamblaje mejor que el compilador, el uso del ensamblaje en línea generalmente derrota optimizadores de código de cualquier tipo. Claro, su código optimizado a mano podría ser más rápido, pero el hecho de que el código que lo rodea no pueda optimizarse generalmente conducirá a un programa general más lento.
  3. Los intrínsecos del compilador están disponibles en casi todos los compiladores principales que le permiten acceder a características avanzadas de la CPU (por ejemplo, SSE) de una manera que es coherente con los lenguajes C y C ++, y no anula el optimizador.

Me pregunto si existe la posibilidad de que TODAS las aplicaciones de 32 bits se actualicen a 64 bits en el futuro.

Eso depende de su público objetivo. Si se dirige a los servidores, entonces sí, es razonable permitir que los usuarios no instalen el subsistema WOW64 porque es un servidor; usted sabe que probablemente no esté ejecutando demasiado código de 32 bits. Creo que Windows Server 2008 R2 ya permite esto como una opción si lo instala como una instancia de "núcleo del servidor".

Dado que el rendimiento no es una preocupación para mi aplicación, usar los registros adicionales de 64 bits no me preocupa. ¿Hay alguna otra razón por la que una aplicación de 32 bits deba actualizarse a 64 bits en el futuro?

64 bit no tiene nada que ver con los registros. Tiene que ver con el tamaño de la memoria virtual direccionable.

¿Sería un proceso de aplicación de 64 bits diferente de un proceso de aplicación de 32 bits, aparte de que la aplicación de 64 bits está utilizando algunos registros / instrucciones que son exclusivos de las CPU de 64 bits?

Más probable. Las aplicaciones de 32 bits están restringidas porque no pueden mapear más de ~ 2GB en memoria a la vez. Las aplicaciones de 64 bits no tienen ese problema. Incluso si no están utilizando más de 4 GB de memoria física, ser capaz de abordar más de 4 GB de memoria virtual es útil para mapear archivos en el disco en la memoria y similares.

Mi aplicación necesita interactuar con otros componentes del sistema operativo, por ejemplo, controladores, que sé que debe ser de 64 bits en las ventanas de 64 bits. ¿Mi aplicación de 32 bits sería compatible con ellos?

Eso depende completamente de cómo se está comunicando con esos controladores. Si se trata de algo así como una "interfaz de archivo con nombre", entonces su aplicación podría permanecer como 32 bits. Si intentas hacer algo así como la memoria compartida (¿memoria compartida de Yikes! Accesible desde el modo de usuario con un controlador?!?) Entonces vas a tener que construir tu aplicación como de 64 bits.


el Intel C Compiler 15 también tiene capacidad en línea en 64 bits. Y podría integrar el IC en Visual Studio como un conjunto de herramientas: entonces tendría VC ++ de 64 bits con ensamblaje en línea. Una captura sin embargo, sus alegrías caros