Partilhar via


__asm

Específico da Microsoft

A __asm palavra-chave invoca o assembler incorporado e pode aparecer onde uma instrução C ou C++ for permitida. Não pode aparecer por si só. Deve ser seguido por uma instrução de montagem, um grupo de instruções fechado em chaves ou, no mínimo, um par de chaves vazio. O termo "__asm bloco" aqui refere-se a qualquer instrução ou grupo de instruções, com ou sem acólitos.

Observação

O suporte MSVC para a palavra-chave Standard C++ asm é limitado ao fato de que o compilador não gerará um erro na palavra-chave. No entanto, um asm bloco não gerará nenhum código significativo. Use __asm em vez de asm.

Gramática

Bloco ASM:
__asm instrução de montagem;opt
__asm { assembly-instruction-list};opção

assembly-instruction-list:
Instruções de montagem;opcional
Instruções de montagem;lista de instruções de montagem;opt

Observações

Se usada sem chaves, a __asm palavra-chave significa que o resto da linha é uma declaração em linguagem assembly. Se usado com chaves, significa que cada linha entre as chaves é uma instrução de linguagem de montagem. Para compatibilidade com versões anteriores, _asm é um sinônimo de a menos que a __asm opção /Za do compilador (Desativar extensões de idioma) seja especificada.

Como a __asm palavra-chave é um separador de instruções, você pode colocar instruções de montagem na mesma linha.

Antes do Visual Studio 2005, a instrução

__asm int 3

não provocou a geração de código nativo quando compilado com /clr; o compilador traduziu a instrução para uma instrução de interrupção CLR.

__asm int 3 agora resulta na geração de código nativo para a função. Se você quiser que uma função cause um ponto de interrupção em seu código e se quiser que a função seja compilada para MSIL, use __debugbreak.

Exemplo

O fragmento de código a seguir é um bloco simples __asm entre chaves:

__asm {
   mov al, 2
   mov dx, 0xD007
   out dx, al
}

Como alternativa, você pode colocar __asm na frente de cada instrução de montagem:

__asm mov al, 2
__asm mov dx, 0xD007
__asm out dx, al

Como a __asm palavra-chave é um separador de instrução, você também pode colocar instruções de montagem na mesma linha:

__asm mov al, 2   __asm mov dx, 0xD007   __asm out dx, al

Todos os três exemplos geram o mesmo código, mas o primeiro estilo (enclausurar o bloco __asm entre chaves) tem algumas vantagens. As chaves separam claramente o código assembly do código C ou C++ e evitam a repetição desnecessária da palavra-chave __asm. Os colchetes também podem evitar ambiguidades. Se quiser escrever uma instrução em C ou C++ na mesma linha que um bloco __asm, deve colocar o bloco entre chavetas. Sem as chaves, o compilador não pode dizer onde o código assembly para e as instruções C ou C++ começam. Finalmente, como o texto entre chaves tem o mesmo formato que o texto MASM comum, você pode facilmente cortar e colar texto de arquivos de origem MASM existentes.

Ao contrário das chaves em C e C++, as chaves que encerram um bloco __asm não afetam o escopo de variáveis. Você também pode aninhar blocos de código; o aninhamento não afeta o escopo das variáveis.

END Específico da Microsoft

Ver também

Palavras-chave
Montador em linha