Dev-Cpp/MinGW32 环境介绍(13)

导读:
   Dev-Cpp/Mingw32 环境介绍 (13)
   上文回顾:
  在上一文中,我们了解了如何在Win32下安装GCC的移植版本。那么,从这一章开始。我们将深入GCC的编程世界。不过,有一点我想说明,那就是:当你越深入GCC,你就觉得Win32下的GCC越不够用。所以,Win32下的GCC作为一个开发应用程序的编译器,那当然是足够了。问题是,如果你要将GCC的潜力全部开发出来。那么你就必须在Unix或者类Unix系统上使用。如FreeBSD就是不错的选择。我最近也要迁移到这个系统下了。
   第十八章 GCC 下的汇编应用
  这一章中,我将向各位展示GCC下的汇编语言。如果,你是计算机科班出身。那么,请你注意了。你不要以为这里的汇编语言你学过。因为,GCC所使用的汇编风格和在高校中学的有很大的出入。一不小心就会出错。
  在开始之前,我先介绍一下汇编的风格问题。汇编语言的风格基本分为两种。第一种是Inter汇编语言风格。第二种是AT&T汇编语言风格。前者,是现在国内高校学习的。后者,是GCC所使用的。相对来说,我个人偏好AT&T,因为不会造成不好的编程习惯,而且Linux内核中的汇编部分也是用这种风格写的。
  汇编语言的风格,只是一种格式,对执行没有任何的影响。所以,不论你学的是Inter汇编风格,还是AT&T除了编写部分有不同外。其他的知识都是一样的。
  AT&T汇编语言风格,与Inter的风格最大的差异是,他们的操作数是相反的。比如,
  //AT&T
  movb $0x01,%al
  movw $0x0023,%ax
  这里,我们可以看到。立即数前是 $寄存器前是 %。还有,操作顺序是相反的。这就是AT&T的特点。有关AT&T更多的内容。请到网上查询一下。
  下面开始正题。在GCC下使用汇编。因为,我们在中级篇开始,就介绍了许多GCC移植版本的安装。而且,他们的适用范围也不同。所以,在没有特殊的提示前。我们都使用MinGW。
  //myas.s
  .text
  .global _myas
  _myas:
  pushl %ebp
  movl %esp,%ebp
  movw $0x0001,%ax
  popl %ebp
  ret
  上面是一段汇编代码,在GCC中,汇编代码通常都是以s为后缀名的。这段代码只是返回一个1,不接受任何参数。
  .global_myas这是定义_myas这个函数名。
  其他的,我想就不用介绍了。除了操作数顺序不同。其他的和Inter一样。
  //main.c
  #include
  #include
  int myas(void);
  int main(int argc, char *argv[])
  {
  int r;
  r=myas();
  printf(“%d”,r);
  return(0);
  }
  上面那段代码,就是把myas的参数打印到终端上。是不是很简单?下面我们看看如何在Win32下将这些文件编译出来。
  >gcc -c myas.s -o myas.o
  >gcc -c main.c -o main.o
  >gcc -o main.exe main.o myas.o
  这样,我们的代码就算链接成功了。运行一下看看吧。
  以上,是在C代码外,使用汇编。在C代码内使用的汇编的方式和平时VC的方式是一样的。使用,
  __asm__(“movw $0x0000,%ax/n/t”);
  就可以在C语言中嵌入汇编代码了。方便好用嘛。
  如何?这样的话,就可以让你的代码运行效率得到很大的提升了。
   文外音:
  是不是这次的文章好像在结构上好看很多?因为,我原来都是使用写字板编写的。这次使用的是,OpenOffice这个软件。只要将他生成的HTML代码贴到Blog上,就可以了。很方便的。而且,是免费的工具哦。我用的是英文版的,觉得很用着很舒服。
  看了中级篇的内容,是否觉得自己有很多不足呢?的确,我们学的东西还很多。不过,当你真正的用GCC时,你就会觉得这些在Win32下的东西有些不够用了。中级篇的内容,将不再是以前那样重点写安装和使用了。而是把重点放在更深一层的应用方面。如果,你觉得在看本文时有什么疑惑,或者想法。可以到我的Blog上发表。
  如果,您好转载我的文章。请在文章出处写明,我的Blog地址,以便有疑惑的兄弟们能够及时的提出问题,并得到回答。谢谢。
  Blog地址:http://blog.csdn.net/visioncat/
  STUDIO软件开发组(SDT)
  STUDIODevelopment Team北斗星君(黄庠魁)

本文转自
http://blog.csdn.net/visioncat/archive/2005/08/27/466288.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值