MASM per x64 (ml64.exe)
Visual Studio include sia versioni ospitate a 32 bit che a 64 bit di MASM (Microsoft Macro Assembler) per il codice x64. Denominato ml64.exe, è l'assembler che accetta il linguaggio dell'assembler x64. Gli strumenti da riga di comando MASM vengono installati quando si sceglie un carico di lavoro C++ durante l'installazione di Visual Studio. Gli strumenti MASM non sono disponibili come download separato. Per istruzioni su come scaricare e installare una copia di Visual Studio, vedere Installare Visual Studio. Se si vogliono solo gli strumenti da riga di comando, non l'IDE completo, scaricare Build Tools per Visual Studio.
Per usare ml64.exe nella riga di comando, avviare un prompt dei comandi per gli sviluppatori per le destinazioni x64. Un prompt dei comandi per gli sviluppatori imposta il percorso richiesto e altre variabili di ambiente. Per informazioni su come avviare un prompt dei comandi per sviluppatori, vedere Compilare codice C/C++ nella riga di comando.
Per informazioni sulle opzioni della riga di comando ml64.exe, vedere Informazioni di riferimento sulla riga di comando ml e ML64.
L'assembler inline o l'uso ASM
della parola chiave non è supportato per le destinazioni x64 o ARM64. Per convertire il codice x86 che usa l'assembler inline a x64 o ARM64, è possibile convertire il codice in C++, usare gli intrinseci del compilatore o creare file di origine del linguaggio assembler. Il compilatore Microsoft C++ supporta le funzioni intrinseche per consentire di usare istruzioni speciali per le funzioni, ad esempio con privilegi, analisi di bit o test, interlocked e così via, nel modo più vicino possibile a una piattaforma multipiattaforma. Per informazioni sugli intrinseci disponibili, vedere Oggetti intrinseci del compilatore.
Aggiungere un file del linguaggio assembler a un progetto C++ di Visual Studio
Il sistema di progetto di Visual Studio supporta i file del linguaggio assembler compilati usando MASM nei progetti C++. MASM supporta completamente i file di origine del linguaggio assembler x64 e li compila in file oggetto. È quindi possibile collegare questi file oggetto al codice C++ compilato per le destinazioni x64. È un modo per superare la mancanza di un assembler inline x64.
Per aggiungere un file del linguaggio assembler a un progetto C++ di Visual Studio esistente
Selezionare il progetto in Esplora soluzioni. Nella barra dei menu scegliere Progetto, Personalizzazioni compilazione.
Nella finestra di dialogo File di personalizzazione compilazione Visual C++ selezionare la casella di controllo accanto a masm(.targets,.props). Scegliere OK per salvare la selezione e chiudere la finestra di dialogo.
Sulla barra dei menu scegliere Progetto, Aggiungi nuovo elemento.
Nella finestra di dialogo Aggiungi nuovo elemento selezionare il file C++ (.cpp) nel riquadro centrale. Nel controllo Modifica nome immettere un nuovo nome di file con estensione
.asm
anziché.cpp
. Scegliere Aggiungi per aggiungere il file al progetto e chiudere la finestra di dialogo.
Creare il codice in linguaggio assembler nel .asm
file aggiunto. Quando si compila la soluzione, l'assembler MASM viene richiamato per assemblare il .asm
file in un file oggetto che viene quindi collegato al progetto. Per semplificare l'accesso ai simboli, dichiarare le funzioni dell'assembler come extern "C"
nel codice sorgente C++, anziché usare le convenzioni di decorazione dei nomi C++ nei file di origine del linguaggio assembler.
Direttive specifiche di ml64
È possibile usare le direttive specifiche di ml64 seguenti nel codice sorgente del linguaggio assembler che ha come destinazione x64:
La PROC
direttiva è stata aggiornata anche per l'uso con ml64.exe.
Modalità indirizzo a 32 bit (override delle dimensioni degli indirizzi)
MASM genera l'override delle dimensioni degli indirizzi 0x67 se un operando di memoria include registri a 32 bit. Ad esempio, gli esempi seguenti causano l'emissione dell'override delle dimensioni degli indirizzi:
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 presuppone l'indirizzamento a 64 bit se uno spostamento a 32 bit viene visualizzato da solo come operando di memoria. Attualmente non è disponibile alcun supporto per l'indirizzamento a 32 bit con tali operandi.
Infine, la combinazione delle dimensioni del registro all'interno di un operando di memoria, come illustrato nel codice seguente, genera un errore.
mov eax, DWORD PTR [rcx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10+0100h]