Partilhar via


Visão geral do Inline Assembler

Específico da Microsoft

O assembler em linha permite incorporar instruções de linguagem de montagem em seus programas de origem C e C++ sem etapas extras de montagem e link. O assembler embutido é incorporado ao compilador — você não precisa de um assembler separado, como o Microsoft Macro Assembler (MASM).

Como o montador em linha não requer etapas separadas de montagem e ligação, é mais conveniente do que um montador separado. O código de montagem em linha pode usar qualquer variável C ou C++ ou nome de função que esteja no escopo, por isso é fácil integrá-lo com o código C e C++ do seu programa. E como o código de assembly pode ser misturado com instruções C e C++, ele pode executar tarefas que são complicadas ou impossíveis apenas em C ou C++.

A palavra-chave __asm invoca o compilador inline e pode aparecer sempre que uma instrução C ou C++ for válida. 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.

O código a seguir é um bloco simples __asm fechado em chaves. (O código é uma sequência prolog de função personalizada.)

// asm_overview.cpp
// processor: x86
void __declspec(naked) main()
{
    // Naked functions must provide their own prolog...
    __asm {
        push ebp
        mov ebp, esp
        sub esp, __LOCAL_SIZE
    }

    // ... and epilog
    __asm {
        pop ebp
        ret
    }
}

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

__asm push ebp
__asm mov  ebp, esp
__asm sub  esp, __LOCAL_SIZE

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

__asm push ebp   __asm mov  ebp, esp   __asm sub  esp, __LOCAL_SIZE

END Específico da Microsoft

Ver também

Montador em linha