Inline Assembler 内联汇编

本文详细介绍了如何在C和C++代码中使用内联汇编,包括__asm关键字的用法、内联汇编的优缺点以及如何调用C函数库。内联汇编允许开发者在不增加额外步骤的情况下嵌入汇编指令,但需要注意其非移植性和特定处理器的限制,如安腾和x64处理器不支持。
摘要由CSDN通过智能技术生成

 

汇编语言是很多的用途,例如提高程序的速度,减少内存的需要,并控制硬件。若要直接在没有额外的程序集和链接的步骤 C 和C++ 源代码程序中嵌入汇编语言指令,可以使用内联汇编。内嵌汇编器是内置编译器,因此您不需要单独的汇编器如 Microsoft 的宏汇编器 (MASM)。
注意: 
内联汇编代码的程序不是完全可移植到其他硬件平台。如果您正在设计的可移植性,避免使用内联汇编。
安腾和 x64 处理器不支持内联程序集。

下列主题介绍了如何使用Visual C/C++内联汇编与 x86 处理器:
;==========================================
1.内嵌汇编器概述

2.__asm 语法

3.其他
;==========================================
1.内嵌汇编器概述
内嵌汇编器允许您在没有额外的程序集和链接的步骤C和 C++源代码程序中嵌入汇编语言指令。编译器中内置内联汇编 — — 你不需要单独的汇编程序如 Microsoft的宏汇编程序(MASM)。

内联汇编并不需要单独的程序集和链接的步骤,因为它是比单独的汇编程序更方便。内联程序集代码可以使用任何 C 或C++变量或函数的名称是在范围内,因此很容易地将其集成到您的程序的 C和 C++代码。并与 C 和C++的语句,可以混合程序集代码,因为它可以做麻烦或不可能在 C 或 C++的单独的任务。

__Asm 关键字调用内联汇编,并可以显示在C 或C++代码的合法地方。它本身没有意义。它必须遵循程序集的指令,一组指令括在大括号内,或对空括号。"__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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值