__asm
Específicos do Microsoft
O __asm palavra-chave invoca o montador in-line e pode aparecer sempre que uma declaração de c ou C++ é legal.Ele não pode aparecer sozinha.Ele deve ser seguido por uma instrução de assembly, um grupo de instruções entre chaves, ou, na pior das hipóteses, um par de chaves de vazio.O termo "__asm bloco" aqui se refere a qualquer instrução ou o grupo de instruções, ou não entre chaves.
Observação |
---|
Suporte para o C++ padrão do Visual C++ asm palavra-chave é limitada ao fato de que o compilador não gerará um erro, a palavra-chave.No entanto, um asm bloco não irá gerar qualquer código significativo.Use __asminstead of asm. |
Sintaxe:
__asm instrução de montagem [; ]
__asm { lista de instruções assembly } [; ]
Gramática
__asm assembly-instruction ;opt
__asm { assembly-instruction-list };opt
lista de instruções assembly:
assembly-instruction;optassembly-instruction;assembly-instruction-list;opt
Se usado sem chaves, o __asm palavra-chave significa que o restante da linha é uma instrução de linguagem assembler.Se usado com chaves, significa que cada linha entre as chaves é uma instrução de linguagem assembler.Para compatibilidade com versões anteriores, _asm é um sinônimo de __asm.
Desde que o __asm palavra-chave é um separador de instrução, você pode colocar instruções assembly na mesma linha.
Antes do Visual C++ 2005, a instrução
__asm int 3
não é a causa código nativo ser gerada quando compilado com /clr; o compilador traduzido a instrução para uma instrução de quebra do CLR.
__asm int 3Agora resulta na geração de código nativo para a função.Se você deseja que uma função para fazer com que um ponto de interrupção em seu código e se desejar que essa função compilada para MSIL, use __debugbreak.
Exemplo
O fragmento de código a seguir é uma simples __asm bloco 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
Porque o __asm palavra-chave é um separador de instrução, você também pode colocar instruções assembly 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 (colocando o __asm bloquear chaves) tem algumas vantagens.As chaves separar o código de assembly de código c ou C++ e evitar a repetição desnecessária de claramente a __asm palavra-chave.Chaves também podem impedir a ambigüidades.Se você quiser colocar uma declaração de c ou C++ na mesma linha como um __asm bloco, você deverá colocar o bloco de chaves.Sem as chaves, o compilador não pode determinar onde começam a assembly paradas de código e instruções de c ou C++.Finalmente, como o texto entre chaves tem o mesmo formato do texto MASM comum, você pode facilmente recortar e colar o texto a partir de arquivos de origem existentes MASM.
Ao contrário das chaves em c e C++, as chaves ao redor um __asm bloco não afetam o escopo de variáveis.Você também pode aninhar __asm bloqueia; aninhamento não afeta o escopo de variáveis.
Específicos do Microsoft final