文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发Oracle一起学习在linux下使用汇编语言(2)
精品推荐
特别推荐
·常用数据库比较
·ODBC API常用函数诠释
·提高ORACLE数据库的查询统计速度
·细化解析:Oracle使用的hints调整机制
·解析Oracle/Oracle Forms 的多用途代码
·从Oracle的FORM中调用REPORT的实用技巧
·Oracle SQL精妙SQL语句讲解
·ORACLE学习笔记--性能优化四
·ORACLE常用傻瓜问题1000问
·ORACLE常见错误代码的分析与解决之二
·深刻理解Oracle数据库的启动和关闭
·监控Oracle数据库的常用shell脚本
·Oracle在Solaris下的性能与调整简介
·通俗解说ORACLE
·数据库安全性策略
热点TOP10
·详细介绍ORACLE sqlplus命令
·ORACLE常用傻瓜问题1000问
·我的oracle笔记四(DBA管理)
·Oracle SQL精妙SQL语句讲解
·Oracle Tuning (Oracle 性能调整)的一些总结
·我的oracle笔记一(sql语句方面)
·程序员如何掌握计算机英语
·用正则表达式函数验证身份证号码合法性
·oracle数据库 exp/imp命令详解
·性能分析工具的使用
·ORACLE UPDATE 语句语法与性能分析看法
·在Solaris 10 X86上安装Oracle 10g RAC详解 (1)
·ORA-01092: ORACLE 例程终止。强行断开连接
·VMware下RedHat安装Oracle 9i RAC全攻略
·监控Oracle数据库的常用shell脚本
·手工创建oracle数据库
·常用数据库比较
·PL/Sql循序渐进全面学习教程
·在Solaris 10 X86上安装Oracle 10g RAC详解 (2)
·Oracle客户端文件打包

一起学习在linux下使用汇编语言(2)

日期:2007年7月2日 作者: 查看:[大字体 中字体 小字体]



  作者:luster
  摘要:GNU C/C++编译器(GCC)是一个32-bit的编译器,是GNU计划的核心,能非常好的支持x86体系结构,它支持在C程序里面嵌入汇编代码,这样看来,寄存器可以自己指定也可以留给gcc来分配。 GCC可以在多个平台下使用,除了linux,还有*BSD, VSTa, OS/2, *DOS, Win*等等。
  3. 汇编器
  
    gcc内嵌编译器
  
    GNU C/C++编译器(GCC)是一个32-bit的编译器,是GNU计划的核心,能非常好的支持x86体系结构,它支持在C程序里面嵌入汇编代码,这样看来,寄存器可以自己指定也可以留给gcc来分配。GCC可以在多个平台下使用,除了linux,还有*BSD, VSTa, OS/2, *DOS, Win*等等。
  
    可以在GNU FTP站点下载GCC。链接是:
  
    ftp://prep.ai.mit.edu/pub/gnu/gcc/
  
    现在GCC已经分裂成两个分支(GCC 2.8和EGCS),但是它们又重新合并了起来,GCC的主页位于:http://gcc.gnu.org.
  
    因为内核头文件中定义的一些汇编例程函数都是extern inline函数,所以GCC必须要加-O(或者-O2,-O3等)编译标志,这样才能使得这些函数可以使用。否则,如果不加-O标志,代码也可以被编译,但是可能link会不正确。
  
    嵌入汇编语言可以通过“-fno-asm”来被禁止。不过通常来说,比较好的编译标志是如下的,这对于大多数的x86平台都是很不错的选择:
  
  
  gcc -O2 -fomit-frame-pointer -W -Wall
  
    -O2在大部分情况下都是很好的代码优化级别。事实上,使用优化后会带来更多的编译时间,也会产生大一些地代码,而在速度上仅仅有一点点提高。
  
    -fomit-frame-pointer允许产生的代码中跳过一些错误的frame pointer maintenance,这样可以使得代码小一些而且快一些,而且会释放一些寄存器来获得更进一步的优化。
  
    -W –Wall使得我们可以获得很多有用的warning,这对于我们减少一些愚蠢的编码错误是非常有用的。
  
    我们还可以加一些编译参数来指明目标CPU的类型,这样就允许GCC来产生一些针对特定CPU的优化代码。在编译内核中使用指明CPU类型的参数是非常有用的。具体GCC支持什么类型CPU优化,我们可以参考所使用的GCC的文档。
  
    GCC对宏的支持
  
    GCC允许而且要求你指明你的嵌入汇编代码使用的寄存器,这样编译器的优化器才能知道如何优化。因此,嵌入汇编代码通常是一些patterns,而不是真正的代码(exact code)。因此,通常我们把汇编代码放到CPP的宏定义里面,或者定义成inline函数,这样就可以方便的就像使用C函数或宏一样使用这些代码。Inline函数和宏非常相似,不过inline函数比较起后者,使用起来更清晰。
  
    GAS
  
    GAS是GNU的汇编器,GCC实际上也依赖它。我们可以在任何能下载GCC的地方找到这个实用工具,它通常位于一个名叫binutils的包里面。下面的URL给出了最新的版本:
  
    ftp://ftp.varesearch.com/pub/support/hjl/binutils/.
  
    GAS是一个支持32-bit的unix环境下的汇编编译器,它使用标准的AT&T语法,它使用标准的m68k编译器的语法,这是UNIX world的标准。这个语法和Intel的语法不一样,如果你适应了这种语法,那么你就会发现它也是很好用的。下面是一些GAS语法的主要特点:
  
    · 所有的寄存器的名字都是以“%”最为前缀,所以可能的一些寄存器是%eax,%dl等等,而不是简单的eax,dl等。这样的话可以使得C语言中方便的嵌入一些汇编代码而不会有变量名字方面冲突的担心。
  
    · 操作数的顺序也是相反的。例如要把edx寄存器的内容拷贝到eax寄存器里面的话,GAS的语法是:mov %edx,%eax;而Intel平台下的汇编语句是:mov eax,edx。
  
    · 操作数的尺寸作为一个后缀加在操作名的后面。B表示(8-bit)byte,w表示(16-bit) word,l表示(32-bit) long。例如,上面例子中正确的语法应该是:movl %edx,%eax。不过,GAS并不需要严格的AT&T语法,所以这个后缀可可以省略的,这时候编译器就自己根据操作数判断或者置为缺省的位宽32-bit。
  
    · 立即数需要一个“$”前缀符号,例如:addl $5,%eax。
  
    · 如果没有操作数前缀,则表示它是内存地址,例如:movl $foo,%eax,把变量foo的地址送到了%eax寄存器。
[1] [2] 下一页 




上一篇:一起学习在linux下使用汇编语言(3)

下一篇:一起学习在linux下使用汇编语言(1)

一起学习在linux下使用汇编语言(2) 相关文章:
·教你学习如何破解XP登陆密码
·GHOST使用方法(图解)
·Vista系统使用技巧总结
·为什么iexplore.exe在打开网页时CPU使用会100%?
·QQ空间导航代码最新版使用方法
·DataTable控件的使用
·AIX 5L 学习大纲/简易教程(2)(未经许可,请勿COPY)
·推荐:漂亮的手机上使用的墙纸图片分享下载
·腾讯QQ号码使用完全指南
·DENX U-Boot及Linux使用手册
一起学习在linux下使用汇编语言(2) 相关软件:
·黑客视频教程 VMware虚拟机的安装和使用
·黑客视频教程-灰鸽子远控使用教程
·洪恩轻松教你学电脑_internet学习
·跟我一起装电脑
·使用GPMC随心所欲管理组策略
·FLASH 8中文使用手册
·Adobe Photoshop CS 2 简体中文使用指南
·Windows环境下32位汇编语言程序设计
·鸟哥的linux私房菜:基础学习篇
·新东方演讲录 俞敏洪老师学习英语与人生奋斗

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot