内联汇编概述

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 的结尾

请参见

参考

内联汇编