Visão geral do assembler embutido
Seção específica da Microsoft
O assembler embutido permite embutir instruções da linguagem de assembly diretamente aos seus programas fonte C e C++ sem etapas adicionais de assembly e vinculação. O assembler integrado é incorporado ao compilador e, portanto, não é necessário um assembler separado, como o MASM (Microsoft Macro Assembler).
Como o assembler integrado não requer etapas de link e do assembly separado, é mais conveniente que um assembler separado. O código do assembly embutido pode usar qualquer nome de variável ou de função C ou C++ que esteja no escopo. Portanto, ele é de fácil integração com código C e C++ do programa. E, como o código do assembly pode ser combinado com as instruções de C e C++, ele pode realizar as tarefas que são incômodas ou impossíveis apenas em C ou C++.
A palavra-chave __asm invoca o assembler embutido e pode aparecer sempre que uma declaração C ou C++ é válida. Ela não pode aparecer sozinha. Ela deve ser seguida por uma instrução de assembly, um grupo de instruções entre chaves ou, pelo menos, um par vazio de chaves. O termo "bloco __asm
" refere-se aqui a qualquer instrução ou grupo de instruções, estando ou não entre chaves.
O código a seguir é um bloco __asm
simples entre chaves. (O código é uma sequência personalizada de prólogos da função.)
// 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 assemblies:
__asm push ebp
__asm mov ebp, esp
__asm sub esp, __LOCAL_SIZE
Como a palavra-chave __asm
é um separador de instruções, você também pode colocar instruções de assembly na mesma linha:
__asm push ebp __asm mov ebp, esp __asm sub esp, __LOCAL_SIZE
Fim da seção específica da Microsoft