MASM pro x64 (ml64.exe)
Visual Studio obsahuje jak 32bitové, tak 64bitové hostované verze MASM (Microsoft Macro Assembler) pro cílení na kód x64. Pojmenovaný ml64.exe, je to assembler, který přijímá jazyk assembleru x64. Nástroje příkazového řádku MASM se instaluje při výběru úlohy C++ během Visual Studio instalace. Nástroje MASM nejsou k dispozici jako samostatné soubory ke stažení. Pokyny ke stažení a instalaci kopie Visual Studio najdete v tématu Instalace Visual Studio. Pokud chcete jenom nástroje příkazového řádku, ne úplné integrované vývojové prostředí(IDE), stáhněte si Build Tools for Visual Studio.
Pokud chcete ml64.exe na příkazovém řádku, spusťte příkazový řádek vývojáře pro cíle x64. Příkazový řádek vývojáře nastaví požadovanou cestu a další proměnné prostředí. Informace o tom, jak spustit příkazový řádek pro vývojáře, najdete v tématu Sestavení kódu C/C++ na příkazovém řádku.
Informace o ml64.exe příkazového řádku najdete v referenčních informacích k ML a ML64 Command-Line příkazového řádku.
Vložený assembler nebo použití klíčového slova není podporováno pro cíle ASM x64 nebo ARM64. Pokud chcete převést kód x86, který používá vložený assembler na x64 nebo ARM64, můžete převést kód na C++, použít vnitřní funkce kompilátoru nebo vytvořit zdrojové soubory jazyka assembleru. Kompilátor jazyka Microsoft C++ podporuje vnitřní funkce, které umožňují používat instrukce zvláštních funkcí, například privilegované, bitové prohledávání nebo testování, promyšlené a tak dále, co nejvíce blízko více platforem. Informace o dostupných vnitřních objektech najdete v tématu Vnitřní funkce kompilátoru.
Přidání souboru jazyka assembleru do Visual Studio C++
Systém Visual Studio podporuje soubory jazyka assembleru sestavené pomocí MASM v projektech C++. MASM plně podporuje zdrojové soubory assembleru x64 a sestavuje je do souborů objektů. Tyto soubory objektů pak můžete propojit s kódem C++ sestavený pro cíle x64. Je to jeden ze způsob, jak překonat chybějící vložený assembler x64.
Přidání souboru jazyka assembleru do existujícího projektu Visual Studio C++
Vyberte projekt v Průzkumník řešení. V řádku nabídek zvolte Project, Přizpůsobení sestavení.
V dialogovém Visual C++ Soubory přizpůsobení sestavení zaškrtněte políčko vedle masm(.targets,.props). Výběrem ok uložte výběr a zavřete dialogové okno.
V řádku nabídek zvolte Project, Přidat novou položku.
V dialogovém okně Přidat novou položku vyberte v center podokně soubor C++ (.cpp). Do ovládacího prvku Pro úpravy názvu zadejte nový název souboru, který má příponu místo
.cpp. Zvolte Přidat, přidejte soubor do projektu a zavřete dialogové okno.
V souboru, který jste přidali, vytvořte .asm kód jazyka assembleru. Při sestavování řešení se vyvolá assembler MASM, který sestaví soubor do souboru objektu, který je následně propojen .asm s vaším projektem. Pro usnadnění přístupu k symbolům deklarujte funkce assembleru jako ve zdrojovém kódu jazyka C++ místo použití konvencí dekorování názvů jazyka C++ ve zdrojových souborech extern "C" jazyka assembleru.
Direktivy specifické pro ml64
Ve zdrojovém kódu jazyka assembleru, který cílí na x64, můžete použít následující direktivy specifické pro ml64:
Direktiva PROC byla také aktualizována pro použití s ml64.exe.
32bitový režim adres (přepsání velikosti adresy)
MASM vysílá přepsání 0x67 adresy, pokud operand paměti obsahuje 32bitové registry. Například následující příklady způsobí, že se vysílá přepsání velikosti adresy:
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 předpokládá 64bitové adresování, pokud se 32bitové posunutí zdá být samostatné jako operand paměti. V současné době neexistuje podpora 32bitového adresování s těmito operandy.
Nakonec kombinace velikostí registru v rámci operandu paměti, jak je znázorněno v následujícím kódu, vygeneruje chybu.
mov eax, DWORD PTR [rcx*2+r10d]
mov eax, DWORD PTR [ecx*2+r10+0100h]