Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Visual Studio bevat zowel 32-bits als 64-bits gehoste versies van MASM (de Microsoft Macro Assembler) om x64-code te targeten. Met de naam ml64.exe, is het de assembler die x64-assembleertaal accepteert. De MASM-opdrachtregelprogramma's worden geïnstalleerd wanneer u een C++-workload kiest tijdens de installatie van Visual Studio. De MASM-tools zijn niet beschikbaar als afzonderlijke download. Zie Visual Studio installeren voor instructies over het downloaden en installeren van een exemplaar van Visual Studio. Als u alleen de opdrachtregelhulpprogramma's wilt, niet de volledige IDE, downloadt u de Build-tools voor Visual Studio.
Als u ml64.exe op de opdrachtregel wilt gebruiken, start u een opdrachtprompt voor ontwikkelaars voor x64-doelen. Een opdrachtprompt voor ontwikkelaars stelt het vereiste pad en andere omgevingsvariabelen in. Zie C/C++-code bouwen op de opdrachtregel voor informatie over het starten van een opdrachtprompt voor ontwikkelaars.
Zie ML en ML64 Command-Line referentie voor informatie over ml64.exe opdrachtregelopties.
Inline assembler of het gebruik van het ASM trefwoord wordt niet ondersteund voor x64- of ARM64-doelen. Als u uw x86-code die gebruikmaakt van inline assembler wilt overzetten naar x64 of ARM64, kunt u uw code converteren naar C++, compiler-intrinsiek gebruiken of bronbestanden in assembler-taal maken. De Microsoft C++-compiler ondersteunt intrinsieke toepassingen, zodat u instructies met speciale functies, bijvoorbeeld geprivilegieerd, bitscan of test, interlocked, enzovoort, zo platformonafhankelijk mogelijk kunt gebruiken. Voor informatie over beschikbare intrinsiek, zie Compiler Intrinsics.
Een assembler-taalbestand toevoegen aan een Visual Studio C++-project
Het Visual Studio-projectsysteem ondersteunt assembler-taalbestanden die zijn gebouwd met behulp van MASM in uw C++-projecten. MASM biedt volledige ondersteuning voor x64-assembler-bronbestanden en bouwt ze op tot objectbestanden. U kunt deze objectbestanden vervolgens koppelen aan uw C++-code die is gebouwd voor x64-doelen. Het is een manier om het ontbreken van een x64 inline assembler te overwinnen.
Een assembler-taalbestand toevoegen aan een bestaand Visual Studio C++-project
Selecteer het project in Solution Explorer. Kies op de menubalk de optie Project, Aanpassingen maken.
Schakel in het dialoogvenster Visual C++ Build-aanpassingsbestanden het selectievakje naast masm(.targets,.props) in. Kies OK om uw selectie op te slaan en het dialoogvenster te sluiten.
Kies op de menubalk de optie Project, Nieuw item toevoegen.
Selecteer in het dialoogvenster Nieuw item toevoegen de optie C++-bestand (.cpp) in het middelste deelvenster. Voer in het besturingselement Naam bewerken een nieuwe bestandsnaam in met een extensie in plaats van
.asm..cppKies Toevoegen om het bestand aan uw project toe te voegen en het dialoogvenster te sluiten.
Maak de taalcode van de assembler in het .asm bestand dat u hebt toegevoegd. Wanneer u uw oplossing bouwt, wordt de MASM-assembler aangeroepen om het .asm bestand samen te voegen tot een objectbestand dat vervolgens aan uw project wordt gekoppeld. Om de toegang tot symbolen te vergemakkelijken, declareert u de assembler-functies als extern "C" in de C++-broncode, in plaats van de C++-naamdecoratieconventies te gebruiken in de bronbestanden in de assembler-taal.
ml64 - Bijzondere richtlijnen
U kunt de volgende ml64-specifieke richtlijnen gebruiken in de broncode van uw assembler-taal die gericht is op x64:
De PROC richtlijn is ook bijgewerkt voor gebruik met ml64.exe.
32-bits adresmodus (overschrijving van adresgrootte)
MASM zendt de override van de 0x67 adresgrootte uit als een geheugenoperand 32-bits registers bevat. In de volgende voorbeelden wordt bijvoorbeeld de overschrijving van de adresgrootte uitgezonden:
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 gaat uit van 64-bits adressering als een 32-bits verplaatsing alleen verschijnt als een geheugenoperand. Er is momenteel geen ondersteuning voor 32-bits adressering met dergelijke operanden.
Ten slotte genereert het mengen van registergroottes binnen een geheugenoperand, zoals aangetoond in de volgende code, een fout.
mov eax, DWORD PTR [rcx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10+0100h]