MASM pour x64 (ml64.exe)

Visual Studio inclut à la fois des versions hébergées 32 bits et 64 bits de MASM (l’assembleur de macros Microsoft) pour cibler du code x64. Nommé ml64.exe, il s’agit de l’assembleur qui accepte le langage d’assembleur x64. Les outils en ligne de commande MASM sont installés lorsque vous choisissez une charge de travail C++ pendant l’installation de Visual Studio. Les outils MASM ne sont pas disponibles en tant que téléchargement distinct. Pour obtenir des instructions sur le téléchargement et l’installation d’une copie de Visual Studio, consultez Installer Visual Studio. Si vous souhaitez uniquement utiliser les outils en ligne de commande, et non l’IDE complet, téléchargez les outils de génération pour Visual Studio.

Pour utiliser ml64.exe sur la ligne de commande, démarrez une invite de commandes développeur pour les cibles x64. Une invite de commandes développeur définit le chemin d’accès requis et d’autres variables d’environnement. Pour plus d’informations sur la façon de démarrer une invite de commandes développeur, consultez le code Build C/C++ sur la ligne de commande.

Pour plus d’informations sur les options de ligne de commande ml64.exe, consultez informations de référence sur la ligne de commande ML et ML64.

L’assembleur inline ou l’utilisation de l’mot clé ASM n’est pas pris en charge pour les cibles x64 ou ARM64. Pour porter votre code x86 qui utilise l’assembleur inline vers x64 ou ARM64, vous pouvez convertir votre code en C++, utiliser des intrinsèques du compilateur ou créer des fichiers sources de langage assembleur. Le compilateur Microsoft C++ prend en charge les intrinsèques pour vous permettre d’utiliser des instructions de fonction spéciale, par exemple, privilégiées, d’analyse de bits ou de test, verrouillées, et ainsi de suite, aussi près d’une manière multiplateforme que possible. Pour plus d’informations sur les intrinsèques disponibles, consultez Les intrinsèques du compilateur.

Ajouter un fichier de langage assembleur à un projet Visual Studio C++

Le système de projet Visual Studio prend en charge les fichiers de langage assembleur créés à l’aide de MASM dans vos projets C++. MASM prend entièrement en charge les fichiers sources du langage assembleur x64 et les génère dans des fichiers objet. Vous pouvez ensuite lier ces fichiers objet à votre code C++ généré pour les cibles x64. Il s’agit d’une façon de surmonter l’absence d’assembleur x64 inline.

Pour ajouter un fichier de langage assembleur à un projet Visual Studio C++ existant

  1. Sélectionnez le projet dans l’Explorateur de solutions. Dans la barre de menus, choisissez Projet, Personnalisations de build.

  2. Dans la boîte de dialogue Fichiers de personnalisation de build Visual C++, case activée la case activée box en regard de masm(.targets,.props). Choisissez OK pour enregistrer votre sélection et fermer la boîte de dialogue.

  3. Dans la barre de menus, choisissez Project, Ajouter un nouvel élément.

  4. Dans la boîte de dialogue Ajouter un nouvel élément , sélectionnez le fichier C++ (.cpp) dans le volet central. Dans le contrôle De modification de nom , entrez un nouveau nom de fichier qui a une .asm extension au lieu de .cpp. Choisissez Ajouter pour ajouter le fichier à votre projet et fermez la boîte de dialogue.

Créez votre code de langage assembleur dans le .asm fichier que vous avez ajouté. Lorsque vous générez votre solution, l’assembleur MASM est appelé pour assembler le .asm fichier dans un fichier objet qui est ensuite lié à votre projet. Pour faciliter l’accès aux symboles, déclarez vos fonctions assembleur comme extern "C" dans votre code source C++, plutôt que d’utiliser les conventions de décoration de nom C++ dans vos fichiers sources du langage assembleur.

Directives ml64 spécifiques

Vous pouvez utiliser les directives ml64 suivantes dans votre code source de langage assembleur qui cible x64 :

La PROC directive a également été mise à jour pour une utilisation avec ml64.exe.

Mode d’adresse 32 bits (remplacement de taille d’adresse)

MASM émet le remplacement de taille d’adresse 0x67 si un opérande de mémoire inclut des registres 32 bits. Par exemple, les exemples suivants entraînent l’émission de remplacement de la taille d’adresse :

mov rax, QWORD PTR [ecx]
mov eax, DWORD PTR [ecx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10d+0100h]
prefetch [eax]
movnti rax, QWORD PTR [r8d]

MASM suppose l’adressage 64 bits si un déplacement 32 bits apparaît seul en tant qu’opérande de mémoire. Il n’existe actuellement aucune prise en charge de l’adressage 32 bits avec ces opérandes.

Enfin, le mélange de tailles d’inscription dans un opérande de mémoire, comme illustré dans le code suivant, génère une erreur.

mov eax, DWORD PTR [rcx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10+0100h]

Voir aussi

Informations de référence sur Microsoft Macro Assembler