在内联汇编中,标识寄存器的一个%变成了两个%

如图是内联汇编的模板

assembler template 是汇编代码

output operands TODO

input operands TODO

clobbers TODO

如图,这个内联汇编的含义是:

1. 把 cr0 寄存器的内容读入到变量 uint32_t cr0 中

2. 对变量 uint32_t cr0 进行一个或操作

3. 把变量 uint32_t cr0 的值写回到 cr0 寄存器中

下图是编译成汇编代码后的样子

volatile: 表示里面的汇编代码不会被优化,不需要调整顺序

%0: 用来表示第一个、没有特殊名字(比如 cr0)的寄存器,它将受到约束

r: 约束为,任意寄存器,即不限制gcc可以编译成的代码

上面这段内联汇编的含义是:

执行指令 int $0x80, 这是一个特权指令,需要指定 “参数” 和 “返回值”

“=a” (__res) 的意思是:把 int $0x80 指令的返回值(一般通过eax传递),写给 __res 变量    TODO: 感觉这里,已经 ebp 做的减法的减数有点不对劲

“0”(11)表示让 eax=11,作为第一个参数

"b" (arg1) 表示让 ebx = arg1,作为第二个参数

"c"(arg2) 表示让 ecx = arg2,作为第三个参数

"d" (arg3) ...

"S" ....

a

gcc 内联汇编简介的更多相关文章

  1. ARM嵌入式开发中的GCC内联汇编__asm__

    在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了唯一的选择.但如果完全通过汇编代码实现,又会过于复杂.难以调试.因此,C语言内嵌汇编的方式 ...

  2. 最牛X的GCC 内联汇编

    导读 正如大家知道的,在C语言中插入汇编语言,其是Linux中使用的基本汇编程序语法.本文将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 ...

  3. GCC内联汇编入门

    原文为GCC-Inline-Assembly-HOWTO,在google上可以找到原文,欢迎指出翻译错误. 中文版说明 由于译者水平有限,故译文出错之处,还请见谅.C语言的关键字不译,一些单词或词组( ...

  4. [翻译] GCC 内联汇编 HOWTO

    目录 GCC 内联汇编 HOWTO 原文链接与说明 1. 简介 1.1 版权许可 1.2 反馈校正 1.3 致谢 2. 概览 3. GCC 汇编语法 4. 基本内联 5. 扩展汇编 5.1 汇编程序模 ...

  5. 推荐一篇讲arm架构gcc内联汇编的文章

    这是来自ethernut网站的一篇文章,原文链接: http://www.ethernut.de/en/documents/arm-inline-asm.html 另外,据说nut/os是个不错的开源 ...

  6. ARM体系下的GCC内联汇编

    转:http://andyhuzhill.github.io/arm/gcc/asm/2012/09/25/gcc-inline-assemly/ 在操作系统级的编程中,有时候,C语言并不能完全的使用 ...

  7. 汇编语言---GCC内联汇编

    转:http://www.cnblogs.com/taek/archive/2012/02/05/2338838.html GCC支持在C/C++代码中嵌入汇编代码,这些代码被称作是"GCC ...

  8. GCC 内联汇编(GCC内嵌ARM汇编规则)

    转:http://smileleeboo.howbbs.com/posts/list/3127/81062.html 更多文档参见:http://pan.baidu.com/s/1eQ7nd8Q 有时 ...

  9. VC内联汇编和GCC内联汇编的语法区别

    VC: #include <stdio.h> main(){ int a = 1; int b = 2; int c; __asm{ mov eax,a mov ebx,b mov ecx ...

  10. gcc 内联汇编

    http://www.cnblogs.com/zhuyp1015/archive/2012/05/01/2478099.html

随机推荐

  1. 学习.NET MAUI Blazor(二)、MAUI是个啥

    随着.NET 7的发布,MAUI也正式发布了.那么MAUI是个啥?我们先来看看官方解释: .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移 ...

  2. 1、debug调试

    Debug断点调试: Debug调试界面图: 利用Debug功能来追踪代码的运行流程,分析与定位异常发生的位置,观察运行中数据的变化. 1.Step Over(F8):进入下一步,如果当前行断点是一个 ...

  3. Faster RCNN论文阅读

    引言 当前最先进的目标检测模型是由区域提案方法和基于区域的卷积神经网络引领的,由于共享计算,卷积网络花费的时间已经大大减小了,所以当前检测系统的瓶颈就是如何减小区域提案生成部分的花费时间.当前流行的区 ...

  4. 1.【窗口组件】小部件-QWidgt

    一.前言 QWidget翻译过来是小部件的意思,QWidgt 类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗 口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己.每一个窗口部 ...

  5. 被iframe页面更改顶层的跳转链接

    界面被其他网页Iframe,需要修改顶层链接---方法如下 <!DOCTYPE html> <html lang="en"> <head> &l ...

  6. render到底是什么,该如何使用它

    一.前言 1.vue程序的运行过程:模板 -> 进行编译 -> 生成ast树 -> 数据绑定 -> 生成render函数 -> 成虚拟dom树 -> 真实dom树 ...

  7. 带你熟悉3种AQS的线程并发工具的用法

    摘要:AQS 的全称为(AbstractQueuedSynchronizer),AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器. 本文分享自华为云社区 ...

  8. Java入门与进阶 P-2.1+P-2.2

    比较运算符 关系运算符(relational operators)也可以称为"比较运算符",用于用来比较判断两个变量或常量的大小.关系运算符是二元运算符,运算结果是 boolean ...

  9. 在 MBP(Apple M1 Pro)上捣鼓友善 nanoPi R5S——【一、构建 rkdeveloptool】

    在种草了很多天之后,最近终于在淘宝下单了友善 nanoPi R5S. 选择友善 nanoPi R5S 有两点主要理由: 1. 自带 EMMC 存储,可以使用 RockChip 提供的 MaskRom ...

  10. FreeBSD 安装 fcitx5的配置

    link: Chinese Pinyin Package for typing Chinese sudo pkg install -y zh-CJKUnifonts sudo pkg install ...