GCC内联汇编入门
分类: linux编程2008-12-21 15:48 507人阅读 评论(0) 收藏 举报
目录(?)[-]
1.
1. 2. 3.
2. 3. 4. 5.
1. 2. 3. 4.
6.
1. 2.
7. 8. 9.
前言
版权与许可证 回馈与更正 感谢
简介
GCC汇编语法 基本内联汇编 扩展内联汇编
汇编程序模板 操作数 Clobber列表 Volatile
更多关于约束条件
常用的约束 约束修饰符
一些有用的诀窍 结束语 参考
原文为GCC-Inline-Assembly-HOWTO,在google上可以找到原文,欢迎指出翻译错误。
中文版说明
由于译者水平有限,故译文出错之处,还请见谅。C语言的关键字不译,一些单词或词组(如colbber等)由于恐怕译后词不达意,故并不翻译,由下面的单词表代为解释,敬请见谅。
英文原文中的单词和词组:
operand:操作数,可以是寄存器,内存,立即数。 volatile:易挥发的,是C语言的关键字。 constraint: 约束。
register: 本文指CPU寄存器。
asm:“asm”和“__asm__”在C语言中是关键字。原文中经常出现这个单词,是指嵌入到C语言(或者其它语言)的汇编程序片断。
basic inline assembly:指C语言中内联汇编程序的一种形式,和extended asm对
应。基本格式如下:
asm(\
extended assembly:和basic inline assembly对应,比它多了一些特性,如可以指
明输入,输出等。基本格式如下:
asm ( assembler template : output operands : input operands
: list of clobbered registers );
clobber list:实际上就是被使用的寄存器的列表,用来告诉GCC它们已经被asm
使用了,不要在asm程序外使用它们。不然可能带来不可预见的后果。
clobbered registers:它和clobber list对应。
assembler template:就是汇编模板,所有内联汇编代码都有按一定的格式。
见extended assembly的说明
作者:Sandeep.S 译者:吴遥
版本号 v0.1 2003年3月01日 翻译版更新日期 2008/06/11
这篇HOWTO解释GCC提供的内联汇编特性的用途和用法。学习这篇文章只须具备两个前提条件,显然那就是对x86汇编语言和C语言有基本的了解。
目 录
1. 前言
1.1版权与许可证 1.2回馈与更正 1.3感谢 2.简介
3.GCC汇编语法 4.基本内联汇编 5.扩展内联汇编
5.1汇编程序模板 5.2操作数
5.3 Clobber列表 5.4 Volatile … ? 6.更多关于约束条件
6.1 常用的约束 6.2 约束修饰符 7. 一些有用的诀窍 8. 结束语 9. 参考
1.前言
1.1版权与许可证
版权所有 (c)2003 Sandeep S.
这篇文档是免费的,你可以在依据自由软件组织GNU通用公共许可证条款下重新发布或者修改它。无论是版本2的许可证还是后来的版本(由你自己选择)。
这份文档的发布是希望它有用,但是并没有任何保证。
1.2回馈与更正
欢迎善意的回馈和批评,我感谢每一个指出本文错误的人并尽快地更正错误。
1.3感谢
我向GNU开发者提供这个功能强大的特性表达最诚挚的感谢。感谢Mr.Pramode C E的帮助。感谢政府工程学院的朋友尤其是Nisha Kurur和Sakeeb S精神上的支持。感谢政府工程学院老师对我的帮助。
另外,还要感谢 Phillip、Brennan、Underwood 和 colin@nyx.net ,他们解决了很多难题。