内联汇编概述
Microsoft 专用
一个内联汇编在 C 和 C++ 可以嵌入汇编语言指令源程序,而无需额外的程序集和链接步骤。一个内联汇编编译为编译器 —您不需要一个单独的汇编程序 (如 Microsoft Macro Assembler (masm)。
由于这个内联汇编不需要单独的程序集和链接步骤,与一个单独的汇编方便。内联程序集代码可以使用任何 C 或 C++ 变量或中的函数名,因此,其集成的程序的 C 和 C++ 代码非常容易。并且,由于程序集代码可以与 C 和 C++ 语句组合,可以执行会相当麻烦或不可以在一个 C 或 C++ 的任务。
__asm 关键字调用一个内联汇编,并且可以显示,每当 c. 或 C++ 语句合法。它不能单独出现。必须由程序集指令执行它,请在大括号中的命令的一组,或者,至少, null 对大括号。该术语 “__asm 块是”此处称为命令的说明或组,在大括号。
下面的代码是简单的 __asm 块对大括号。(代码是一个自定义 prolog 序列。)
// 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
}
}
或者,可以放置在每个程序集指令前面的 __asm :
__asm push ebp __asm mov ebp, esp __asm sub esp, __LOCAL_SIZE
因为 __asm 关键字是语句分隔符,则在同一行中放置程序集指令:
__asm push ebp
__asm mov ebp, esp
__asm sub esp, __LOCAL_SIZE
特定于 Microsoft 的结尾