zoukankan      html  css  js  c++  java
  • 联合编译

    联合编译

    使用联合编译要保存环境

    利用内联汇编程序,可以直接在 C 和 C++ 源程序中嵌入汇编语言指令,而无需执行额外的汇编和链接步骤。 内联汇编程序生成到该编译器中,不需要一个单独的汇编程序

    __Asm关键字调用内联汇编程序,并且可以出现位置 C 或C++是合法的语句

    由于内联汇编程序不需要单独的程序集和链接步骤,因此它比单独的汇编程序更方便。 内联程序集代码可以使用任何 C 变量或范围中的函数名,因此,将其与程序的 C 代码集成非常容易。 由于程序集代码可与 C 或 C++ 语句内联组合,因此它可以执行在 C 或 C++ 中难以完成或无法完成的任务。

    内联程序集的用法包括:

    使用汇编语言编写函数。

    代码的点优化速度临界区。

    通过硬件直接访问设备驱动程序。

    “naked”调用编写 prolog 和 epilog 代码。

    Microsoft 专用

    __asm 关键字用于调用内联汇编程序,并且可在 C 或 C++ 语句合法时出现。 它不能单独出现。 它必须后跟一个程序集指令、一组括在大括号中的指令或者至少一对空大括号。 此处的术语“__asm 块”指任何指令或指令组(无论是否在大括号中)

    asm 块:
        __asm assembly-instruction ;opt
        __asm { assembly-instruction-list } ;opt

    如果不与大括号一起使用,则 __asm 关键字表示此行的其余部分是一条汇编语言语句。 如果与大括号一起使用,则该关键字表示大括号之间的每一行都是一条汇编语言语句。

    __asm 块可以引用 C 或 C++ 数据类型和对象,但它不能定义具有 MASM 指令或运算符的数据对象。 具体而言,不能使用定义指令DB DW DD DQ DT,并且DF,或运算符DUP MASM 结构和记录也不可用。 内联汇编程序不接受指令STRUC RECORD宽度,或掩码

    内联汇编程序不支持大多数 MASM 指令,但它确实支持EVEN对齐 这些指令放NOP (无操作),以将标签与特定边界对齐的程序集代码中的说明

    LENGTH 长度运算符可返回数组中的元素数。 它为非数组变量返回值 1。sizeof(arr)/sizeof(arr[0])

    SIZE  大小运算符可返回 C 的大小或C++变量。 变量的大小是数组的乘积及其长度类型sizeof(arr

    类型运算符可返回 C 的大小或C++类型或变量。 如果变量是一个数组类型返回的单个元素数组的大小sizeof(arr[0]

    _Emit pseudoinstruction 定义中当前文本段落的当前位置处的一个字节

    相当于 db   只能定义一个字节

    汇编标签与普通的 C 或 C++ 标签一样可以跨--asm使用

    Leave可以直接平栈  然后ret

    __declspec(naked)  void fun()  裸函数 没有其他入栈压栈的操作

    自动抬栈宏 __LOCAL__SIZE

    其他编译器使用联合  

    __asm__(“mov eax, eax mov ebx,ebx ”)

    学如逆水行舟,不进则退。 博客园技术交流群 群 号:1073255314 (本群没人,刚刚建立 -_-!!! )
  • 相关阅读:
    插入排序的算法分析
    SQL的UNION操作
    二分查找的思路
    怎么看吉他简谱
    一句CSS代码杜绝网站iframe挂马
    关于NewFolder.文件夹无法删除的办法
    C#监听USB接入
    C# 系统服务添加安装
    .NET 实现ISAPI过滤器,指定类型文件防下载
    ASP 简单的异或加密方法
  • 原文地址:https://www.cnblogs.com/Mj-NaijAm/p/13618758.html
Copyright © 2011-2022 走看看