Sdílet prostřednictvím


MASM pro x64 (ml64.exe)

Visual Studio zahrnuje 32bitové i 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 nainstalují, když během instalace sady Visual Studio zvolíte úlohu jazyka C++. Nástroje MASM nejsou k dispozici jako samostatný soubor ke stažení. Pokyny ke stažení a instalaci kopie sady Visual Studio najdete v tématu Instalace sady Visual Studio. Pokud chcete jenom nástroje příkazového řádku, ne úplné integrované vývojové prostředí (IDE), stáhněte si Nástroje sestavení pro Visual Studio.

Pokud chcete použít ml64.exe na příkazovém řádku, spusťte příkazový řádek pro 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, naleznete v tématu Sestavení kódu C/C++ na příkazovém řádku.

Informace o ml64.exe možnostech příkazového řádku najdete v tématu ML a ML64 – referenční dokumentace příkazového řádku.

Vložený assembler nebo použití klíčového ASM slova není podporován pro cíle x64 nebo ARM64. Pokud chcete přenést kód x86, který používá vložený assembler na x64 nebo ARM64, můžete kód převést na C++, použít vnitřní prvky kompilátoru nebo vytvořit zdrojové soubory assembleru jazyka. Kompilátor jazyka Microsoft C++ podporuje vnitřní objekty, které umožňují používat speciální instrukce funkcí, například privilegované, bitové prohledávání nebo testování, provládané atd., co nejblíže k multiplatformnímu způsobu. Informace o dostupných vnitřních objektech naleznete v tématu Vnitřní funkce kompilátoru.

Přidání souboru assembleru jazyka do projektu Visual Studio C++

Systém projektů sady Visual Studio podporuje soubory assembleru jazyka vytvořené pomocí MASM v projektech C++. MASM plně podporuje zdrojové soubory jazyka assembleru x64 a sestavuje je do souborů objektů. Tyto soubory objektů pak můžete propojit s kódem C++ vytvořeným pro cíle x64. Jedním ze způsobů, jak překonat nedostatek vloženého assembleru x64.

Přidání souboru assembleru jazyka do existujícího projektu visual Studio C++

  1. Vyberte projekt v Průzkumník řešení. Na řádku nabídek zvolte Projekt, Vlastní nastavení sestavení.

  2. V dialogovém okně Soubory přizpůsobení sestavení jazyka Visual C++ zaškrtněte políčko vedle masm(.targets,.props). Výběrem možnosti OK uložte výběr a zavřete dialogové okno.

  3. Na řádku nabídek zvolte Projekt, Přidat novou položku.

  4. V dialogovém okně Přidat novou položku vyberte v prostředním podokně soubor C++ (.cpp). V ovládacím prvku Upravit název zadejte nový název souboru, který má příponu .asm místo .cpp. Zvolte Přidat a přidejte soubor do projektu a zavřete dialogové okno.

V souboru, který jste přidali, .asm vytvořte kód jazyka assembleru. Při sestavování řešení se assembler MASM vyvolá, aby se soubor sestavil .asm do souboru objektu, který se pak propojil s vaším projektem. Pokud chcete usnadnit přístup k symbolům, deklarujte funkce assembleru jako extern "C" ve zdrojovém kódu jazyka C++ místo použití konvencí dekorací názvů jazyka C++ ve zdrojových souborech assembleru.

direktivy specifické pro ml64

Ve zdrojovém kódu assembleru jazyka assembleru, který cílí na x64, můžete použít následující direktivy specifické pro ml64:

Směrnice PROC byla také aktualizována pro použití s ml64.exe.

32bitový režim adresy (přepsání velikosti adresy)

MASM vygeneruje přepsání velikosti 0x67 adresy, pokud operand paměti obsahuje 32bitové registry. Například následující příklady způsobí, že se vygeneruje 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í zobrazuje samostatně jako operand paměti. V současné době není podporováno 32bitové adresování s těmito operandy.

Nakonec kombinace velikostí registrů v 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]

Viz také

Microsoft Macro Assembler – referenční dokumentace