Partilhar via


MASM para x64 (ml64.exe)

O Visual Studio inclui versões hospedadas de 32 bits e 64 bits do MASM (o Microsoft Macro Assembler) para o código x64 de destino. Nomeado ml64.exe, é o assembler que aceita a linguagem de montagem x64. As ferramentas de linha de comando MASM são instaladas quando você escolhe uma carga de trabalho C++ durante a instalação do Visual Studio. As ferramentas MASM não estão disponíveis como um download separado. Para obter instruções sobre como baixar e instalar uma cópia do Visual Studio, consulte Instalar o Visual Studio. Se você quiser apenas as ferramentas de linha de comando, não o IDE completo, baixe as Ferramentas de compilação para Visual Studio.

Para usar ml64.exe na linha de comando, inicie um prompt de comando do desenvolvedor para destinos x64. Um prompt de comando do desenvolvedor define o caminho necessário e outras variáveis de ambiente. Para obter informações sobre como iniciar um prompt de comando do desenvolvedor, consulte Criar código C/C++ na linha de comando.

Para obter informações sobre ml64.exe opções de linha de comando, consulte ML e ML64 Command-Line Reference.

Montador embutido ou uso ASM da palavra-chave não é suportado para destinos x64 ou ARM64. Para portar seu código x86 que usa assembler embutido para x64 ou ARM64, você pode converter seu código para C++, usar intrínsecos do compilador ou criar arquivos de origem em linguagem assembler. O compilador Microsoft C++ suporta intrínsecos para permitir que você use instruções de função especial, por exemplo, privilégio, verificação ou teste de bits, interligado e assim por diante, da maneira mais próxima possível de uma plataforma cruzada. Para obter informações sobre intrínsecas disponíveis, consulte Compiler Intrinsics.

Adicionar um arquivo de linguagem assembler a um projeto Visual Studio C++

O sistema de projeto do Visual Studio oferece suporte a arquivos de linguagem assembler criados usando MASM em seus projetos C++. O MASM suporta totalmente arquivos de origem em linguagem assembler x64 e os compila em arquivos de objeto. Em seguida, você pode vincular esses arquivos de objeto ao seu código C++ criado para destinos x64. É uma maneira de superar a falta de um montador em linha x64.

Para adicionar um arquivo de linguagem assembler a um projeto existente do Visual Studio C++

  1. Selecione o projeto no Gerenciador de Soluções. Na barra de menus, escolha Projeto, Criar personalizações.

  2. Na caixa de diálogo Visual C++ Build Customization Files , marque a caixa de seleção ao lado de masm(.targets,.props). Escolha OK para salvar sua seleção e fechar a caixa de diálogo.

  3. Na barra de menus, escolha Projeto, Adicionar Novo Item.

  4. Na caixa de diálogo Adicionar Novo Item , selecione Arquivo C++ (.cpp) no painel central. No controle de edição de nome , insira um novo nome de arquivo que tenha uma .asm extensão em vez de .cpp. Escolha Adicionar para adicionar o arquivo ao seu projeto e feche a caixa de diálogo.

Crie seu código no idioma do .asm assembler no arquivo que você adicionou. Quando você cria sua solução, o assembler MASM é invocado para montar o .asm arquivo em um arquivo de objeto que é então vinculado ao seu projeto. Para facilitar o acesso ao símbolo, declare as funções do assembler como extern "C" no código-fonte do C++, em vez de usar as convenções de decoração de nomes C++ nos arquivos de origem do idioma do montador.

ml64-Diretivas específicas

Você pode usar as seguintes diretivas específicas do ml64 no código-fonte da linguagem assembler que tem como alvo x64:

A PROC diretiva foi igualmente atualizada para utilização com ml64.exe.

Modo de endereço de 32 bits (substituição do tamanho do endereço)

O MASM emite a substituição do tamanho do endereço 0x67 se um operando de memória incluir registradores de 32 bits. Por exemplo, os exemplos a seguir fazem com que a substituição do tamanho do endereço seja emitida:

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]

O MASM assume o endereçamento de 64 bits se um deslocamento de 32 bits aparecer sozinho como um operando de memória. Atualmente, não há suporte para endereçamento de 32 bits com esses operandos.

Finalmente, misturar tamanhos de registro dentro de um operando de memória, como demonstrado no código a seguir, gera um erro.

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

Ver também

Referência do Microsoft Macro Assembler