GNU 内联汇编学习(1)

 1 #include <stdio.h>
 2
 3 int main(void)
 4 {
 5         int foo = 10, bar = 15;
 6         printf("foo=%d, ", foo);
 7         printf("bar=%d\n", bar);
 8         __asm__ __volatile__("addl  %2,%1\n\t"
 9 //                             "addl  %%ebx,%%eax\n\t"
10 //                             "addl  %%eax,%%ebx\n\t"
11 //                             :"=a"(foo), "=b"(bar)
12                              :"=a"(foo)
13                              :"a"(foo), "b"(bar)
14                              );
15         printf("foo=%d\n", foo);
16         printf("bar=%d\n", bar);
17         return 0;
18 }

addl %x,%y ,指将x中的数和y中数相加存入y中。

这是我的第一个内联汇编的代码。贴一个帮助新手的链接:http://blog.csdn.net/guzhou_diaoke/article/details/8393548

时间: 2024-08-03 20:41:58

GNU 内联汇编学习(1)的相关文章

GNU 内联汇编约束

1. 寄存器约束 2. 内存约束 3. 立即数约束 4. 通用约束

内核bug.h以及GCC内联汇编的学习

所有的学习的内容都在注释当中,我的学习过程是,看到这个代码段之后,将其中需要的只是去大体的学习一遍.争取能够做到理解整体的部分. 下面展示出我的学习的代码: #ifndef _I386_BUG_H #define _I386_BUG_H /* * Tell the user there is some problem. * 告诉用户出现了一些问题 * The offending file and line are encoded after the "officially * undefined

操作系统学习之GCC内联汇编

GCC内联汇编(INLINE ASSEMBLY) 什么是内联汇编(Inline assembly)? 1.这是GCC对C语言的扩张,就是在C代码里面去写汇编代码 2.可以直接在C的语句中插入汇编指令 有何用处? 1.C语言不足以完成所有CPU的指令, 特别是有一些特权指令,比如加载gdt表(Global Descriptor Table 全局描述符表),从而使用汇编代码来完成 2.用汇编在C语言中手动优化,特别是在操作系统当中,使用汇编对操作系统的掌控更为精准,更加准确. 如何工作? 1.用给定

[转载]【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)

在阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入汇编在CS术语上叫做inline assembly.本文的笔记试图说明Inline Assembly的基本语法规则和用法(建议英文阅读能力较强的同学直接阅读本文参考资料中推荐的技术文章 ^_^).        注意:由于gcc采用AT&T风格的汇编语法(与Intel Syntax相对应,二者的区别参见这里),因此,本文涉及到的汇编代码均以AT&T Syntax为准. 1. 基本语法规则    

linux平台学x86汇编(十八):内联汇编

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 使用汇编语言笔编程最常见的方式是在高级语言(C和C++)程序内编写汇编函数,这种吧汇编语言直接写到C和C++语言程序内的技术称为内联汇编. GNU的C编译器使用asm关键字指出使用汇编语言编写的源代码段落.asm段的基本格式如下: asm("as code"): 括号中的汇编指令必须在括号,指令超过一条的话必须使用新的行分隔汇编语言代码每一行,因为编译器逐字地取得a

最牛X的GCC 内联汇编

导读 正如大家知道的,在C语言中插入汇编语言,其是Linux中使用的基本汇编程序语法.本文将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 汇编语言和 C 语言的基本认识. 1. 简介 1.1 版权许可 Copyright (C) 2003 Sandeep S. 本文档自由共享:你可以重新发布它,并且/或者在遵循自由软件基金会发布的 GNU 通用公共许可证下修改它:也可以是该许可证的版本 2 或者(按照你的需求)更晚的版本. 发布这篇文

GCC内联汇编入门

原文为GCC-Inline-Assembly-HOWTO,在google上可以找到原文,欢迎指出翻译错误. 中文版说明 由于译者水平有限,故译文出错之处,还请见谅.C语言的关键字不译,一些单词或词组(如colbber等)由于恐怕译后词不达意,故并不翻译,由下面的单词表代为解释,敬请见谅. 英文原文中的单词和词组: operand:操作数,可以是寄存器,内存,立即数. volatile:易挥发的,是C语言的关键字. constraint: 约束. register: 本文指CPU寄存器. asm:

[翻译] GCC 内联汇编 HOWTO

GCC 内联汇编 HOWTO v0.1, 01 March 2003. * * * 本 HOWTO 文档将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 汇编语言和 C 语言的基本认识. [TOC] 原文链接与说明 http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html 本翻译文档原文选题自 Linux中国 ,翻译文档版权归属 Linux中国 所有 1. 简介 1.

【转贴】GCC内联汇编基础

原文作者 Sandeep.S英文原文 [https://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html] 本文将介绍GCC编译环境下,在C语言代码中嵌入汇编代码的基本方法.阅读本文需要您具备80X86汇编语言和C语言的基础知识.为了使中文描述更加清楚自然,翻译过程中加入了稍许解释和意译部分. 简介 版权/反馈/勘误/感谢等信息.[^ 1][^ 1]:这里信息价值不大,没有翻译.具体参加原文:https://www.ibiblio.