Dela via


MASM för x64 (ml64.exe)

Visual Studio innehåller både 32-bitars och 64-bitars värdbaserade versioner av MASM (Microsoft Macro Assembler) för att rikta in sig på x64-kod. Med namnet ml64.exeär det assemblern som accepterar x64-sammansättningsspråk. Kommandoradsverktygen MASM installeras när du väljer en C++-arbetsbelastning under Visual Studio-installationen. MASM-verktygen är inte tillgängliga som en separat nedladdning. Anvisningar om hur du laddar ned och installerar en kopia av Visual Studio finns i Installera Visual Studio. Om du bara vill ha kommandoradsverktygen, inte den fullständiga IDE:n, laddar du ned byggverktygen för Visual Studio.

Om du vill använda ml64.exe på kommandoraden startar du en kommandotolk för utvecklare för x64-mål. En kommandotolk för utvecklare anger den sökväg som krävs och andra miljövariabler. Mer information om hur du startar en kommandotolk för utvecklare finns i Skapa C/C++-kod på kommandoraden.

Information om ml64.exe kommandoradsalternativen finns i Referens för ML och ML64 Command-Line.

Infogad sammansättning eller användning av nyckelordet ASM stöds inte för x64- eller ARM64-mål. Om du vill porta din x86-kod som använder infogad assembler till x64 eller ARM64 kan du konvertera koden till C++, använda inbyggda kompilatorer eller skapa källfiler på assemblerspråk. Microsoft C++-kompilatorn stöder inbyggda funktioner så att du kan använda specialfunktionsinstruktioner, till exempel privilegierad, bitskanning eller test, sammankopplad och så vidare, så nära ett plattformsoberoende sätt som möjligt. Information om tillgängliga inneboende egenskaper finns i Compiler Intrinsics.

Lägga till en assemblerspråkfil i ett Visual Studio C++-projekt

Visual Studio-projektsystemet stöder assemblerspråkfiler som skapats med hjälp av MASM i dina C++-projekt. MASM har fullt stöd för x64 assembler-språkkällfiler och bygger in dem i objektfiler. Du kan sedan länka dessa objektfiler till din C++-kod som skapats för x64-mål. Det är ett sätt att övervinna bristen på en x64 inline-assembler.

Så här lägger du till en assemblerspråkfil i ett befintligt Visual Studio C++-projekt

  1. Välj projektet i Solution Explorer. På menyraden väljer du Projekt, Skapa anpassningar.

  2. I dialogrutan Visual C++ Build Customization Files markerar du kryssrutan bredvid masm(.targets,.props). Välj OK för att spara markeringen och stänga dialogrutan.

  3. På menyraden väljer du Projekt, Lägg till nytt objekt.

  4. I dialogrutan Lägg till nytt objekt väljer du C++-fil (.cpp) i mittenfönstret. I redigeringskontrollen Namn anger du ett nytt filnamn som har ett .asm filnamnstillägg i stället för .cpp. Välj Lägg till för att lägga till filen i projektet och stänga dialogrutan.

Skapa din assemblerspråkskod i filen som .asm du lade till. När du skapar din lösning anropas MASM-assemblern för att sätta ihop .asm filen till en objektfil som sedan länkas till projektet. För att göra det enklare att komma åt symboler deklarerar du assemblerfunktionerna som extern "C" i C++-källkoden, i stället för att använda C++-namndekorationskonventionerna i källfilerna på assemblerspråket.

ml64-Särskilda direktiv

Du kan använda följande ml64-specifika direktiv i källkoden för assemblerspråket som är mål för x64:

Direktivet PROC har också uppdaterats för användning med ml64.exe.

32-bitars adressläge (åsidosättning av adressstorlek)

MASM genererar åsidosättningen av 0x67 adressstorlek om en minnesoperand innehåller 32-bitarsregister. Följande exempel gör till exempel att åsidosättningen av adressstorlek genereras:

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 antar 64-bitars adressering om en 32-bitars förskjutning visas ensam som en minnesoperand. Det finns för närvarande inget stöd för 32-bitars adressering med sådana operander.

Slutligen genererar blandning av registerstorlekar i en minnesoperand, som visas i följande kod, ett fel.

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

Se även

Referens för Microsoft Macro Assembler