Question

Comment puis-je détecter au moment de la compilation d'un fichier source ASM si l'architecture cible est I386 ou AMD64?

J'utilise pour assembler file32.asm et file64.asm masm (de ml.exe) / masm64 (de ml64.exe). Il serait bon de créer un seul fichier, file.asm, qui devrait inclure soit file32.asm ou file64.asm, selon l'architecture. Idéalement, je voudrais pouvoir écrire quelque chose comme:

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

En outre, si nécessaire, je peux courir ml.exe et ml64.exe avec différentes options de ligne de commande.

Merci!

Était-ce utile?

La solution

Si je vous comprends bien, vous cherchez une sorte de intégrée définir qui a une valeur différente entre les versions 32 et 64 bits MASM. Une fois, je cherchais quelque chose comme ça, mais je ne trouve rien approprié.

Cependant, il est assez facile de définir simplement votre propre, par exemple AMD64 equ 1 au début du fichier source pour sélectionner le chemin de code souhaité, ou à la ligne de commande ML / ML64, comme /DAMD64. Et puis utilisez IFDEF / IFNDEF, comme vous le suggérez.

Autres conseils

IFDEF RAX

  ECHO "WIN64"

ELSE

  ECHO "WIN32"

ENDIF

Les x86 et les jeux d'instructions x64 (sans mentionner l'utilisation et les restrictions pile) sont soooooo différentes que je me demande si cela aurait du sens, de toute façon ... OIEau, l'écriture de code x86 / x64 architecture indépendante efficace semble presque impossible de moi. Ceci est l'assemblage, pas un HLL portable.

C'est aussi très probablement la raison pour laquelle il y a deux assembleurs spécifiques, ml.exe et ml64.exe, plutôt qu'un seul ml.exe qui traiterait tout cela avec l'aide de quelques directives supplémentaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top