Pregunta

¿Cómo puedo detectar en tiempo de compilación de un archivo fuente ASM si la arquitectura objetivo I386 o AMD64?

Estoy utilizando masm (ml.exe) / masm64 (ml64.exe) para ensamblar file32.asm y file64.asm. Sería bueno para crear un único archivo, file.asm, que debe incluir ya sea file32.asm o file64.asm, dependiendo de la arquitectura. Idealmente, me gustaría ser capaz de escribir algo como:

IFDEF amd64
include file64.asm
ELSE
include file32.asm
ENDIF

Además, si es necesario, puedo correr ml.exe y ml64.exe con diferentes opciones de línea de comandos.

Gracias!

¿Fue útil?

Solución

Si he entendido bien, usted está buscando algún tipo de una función de definir que tiene un valor diferente entre los 32 y 64 bits versiones MASM. Una vez busqué algo por el estilo, pero no encontró nada adecuado.

Sin embargo, es bastante fácil de simplemente definir su propio, por ejemplo, AMD64 equ 1 al comienzo del archivo fuente para seleccionar la ruta de código deseado, o en la línea de comandos ML / ML64, como /DAMD64. Y luego usar IFDEF / IFNDEF, como usted sugiere.

Otros consejos

IFDEF RAX

  ECHO "WIN64"

ELSE

  ECHO "WIN32"

ENDIF

Los conjuntos de instrucciones x86 y x64 (ni siquiera mencionan el uso de pila y restricciones) son taaaaaaaaaaaaaaaan diferente que me pregunto si eso tendría sentido, de todos modos ... OIA, la escritura eficientes x86 / x64 de códigos independientes de la arquitectura se ve casi imposible yo. Este es el montaje, no un HLL portátil.

Eso también es más probable que la razón por la que hay dos montadores específicos, ml.exe y ml64.exe, en lugar de una sola ml.exe que manejar todo con la ayuda de algunas directivas adicionales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top