在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。

1、简单的内嵌汇编
例:

__asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"__volatile__"表示编译器不要优化代码,后面的指令 保留原样,"volatile"是它的别名。括号里面是汇编指令。

2、内嵌汇编举例
   使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉GCC对这些操作有哪些限制条件。例如在下面的汇编语句:

__asm__ __violate__ ("movl %1,%0" : "=r" (result) : "m" (input));

"movl %1,%0"是指令模板;"%0"和"%1"代表指令的操作数,称为占位符,内嵌汇编靠它们将C 语言表达式与指令操作数相对应。指令模板后面用小括号括起来的是C语言表达式,本例中只有两个:"result"和"input",他们按照出现的顺序分 别与指令操作数"%0","%1"对应;注意对应顺序:第一个C 表达式对应"

GCC在C语言中内嵌汇编 asm __volatile__相关推荐

  1. linux c语言编程内嵌汇编,gcc编译c语言中内嵌汇编

    gcc编译c语言中内嵌汇编 --AT&T and Intel 汇编语法对照 寄存器命名: AT&T:  %eax Intel: eax AT&T 语法源地址在左侧,目的地址在右 ...

  2. C语言中内嵌汇编asm语法

    这篇文章写得炒鸡详细而且很全面,易于理解,建议新手查看 C语言中内嵌汇编asm语法 下面这两篇文章作为补充来看 C语言内嵌汇编:asm volatile C语言ASM汇编内嵌语法

  3. MIPS指令集:内嵌汇编asm语法介绍

    目录 一.内嵌汇编基本格式 二.输入操作数和输出操作数 三.破坏描述 四.有名操作数和指定寄存器 五.操作数的修饰符:约束字符 六.内嵌汇编实例:mips系统调用syscall 七.理解 asm vo ...

  4. 【软件开发底层知识修炼】十二 C/C++语言中内嵌汇编语言(asm)

    上一篇文章学习了链接脚本的语法与相关概念:链接脚本的概念 在继续学习链接器的内容的同时,先学习一个新内容:内嵌汇编. GCC编译器一般支持C/C++内嵌汇编语言,这样可以实现语言本身无法实现的内容.我 ...

  5. swi 指令能用在C语言吗,内嵌汇编指令的应用举例

    下面是在C语言程序中嵌入式汇编程序的例子.通过这几个例子,可帮助用户更好地理解内嵌汇编的特点及用法. (1)  字符串复制 本例主要介绍如何使用指令BL调用子程序. 注意,在内嵌的SWI和BL指令中, ...

  6. linux中c语言常用内嵌汇编

    源码地址 http://download.csdn.net/download/sinat_35360663/10224892 // // main2.c // allen // // Created ...

  7. vs2015c语言内嵌汇编,C#中内嵌资源的读取

    起因 作为一个从Cpper转到C#并且直接从事WPF开发的萌新来说,正式编码过程中碰到了不少问题,一路上磕磕碰碰的.因为软件设计需求上的要求,需要将一些配置文件(XML.INI等)内嵌到程序中,等需要 ...

  8. ATT汇编语言与GCC内嵌汇编简介

    AT&T汇编语言与GCC内嵌汇编简介 1 AT&T 与INTEL的汇编语言语法的区别 1.1大小写 1.2操作数赋值方向 1.3前缀 1.4间接寻址语法 1.5后缀 1.6指令 2 G ...

  9. GCC如何编译内嵌汇编代码

    内核代码绝大部分使用C  语言编写,只有一小部分使用汇编语言编写,例如与特定体系结构相关的代码和对性能影响很大的代码.GCC提供了内嵌汇编的功能,可以在C代码中直接内嵌汇编语言语句,大大方便了程序设计 ...

最新文章

  1. 报名 | 首期AI Time PhD:听清北师兄分享前沿研究成果!
  2. 登录首页时报错:java.lang.IllegalArgumentException (不合法的参数异常)
  3. 学生查询成绩登录2021高考查分,2021学情达成绩查询登录app
  4. java前后端数据交互_前后端数据交互(示例代码)
  5. 跟我一起学.NetCore之配置初体验
  6. java用内部类实现多重继承
  7. 解决pandas不计算/不保存运算结果/数值不变的问题
  8. eclipse如何显示行数
  9. Python爬虫post一例
  10. Eclipse里面导工程的时候报错faceted project problem
  11. [OS X軟件] 我一直在用的 司机会看的那种 免费资源又多
  12. 国内自动化测试软件,AutoRunner-国内测试行业专业自动化测试工具成长史
  13. 计算机打不开硬盘,电脑有一个磁盘打不开怎么处理
  14. 用线段树写Dijkstar
  15. 手机上最好用的五笔输入法_什么手机输入法最实用?目前最受欢迎的3款盘点,你正在用哪款呢...
  16. 比较令人惊叹的FastDB和SQLite的RAMDISK内的性能对比
  17. c#语言用XmlReader解析超大XML文件
  18. javaWeb新闻发布展示(分页)
  19. 以实验理解交换机原理
  20. Houdini_grass_sim (关于植物结算)

热门文章

  1. ubuntu 远程桌面
  2. Visual Studio 2005结合Direct 9.0 SDK(Aug2007)时应该注意的事项
  3. 固定资产管理有关的计算机知识,计算机技术在固定资产管理中的具体应用.pdf...
  4. @value 静态变量_Java中的变量——通过示例学习Java编程(4)
  5. 【转】你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问
  6. 图形工具包 linux,GTK 4.0图形工具包正式发布:时隔四年的重大版本!
  7. vb checkbox选中和不选中_UE4 4.23 RetainerBox 选中框位置不正确
  8. 设计模式(六)J2EE 模式
  9. php中sisson用法,thinkPHP中session()方法用法详解
  10. 【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)