tag 标签: learning

相关博文
  • 热度 27
    2012-4-3 09:47
    1238 次阅读|
    0 个评论
    你可能会问,gcc不是用来在linux中编写C 语言代码的吗?是的,确实是这样,而我在这里其实就是在讲这件事情,不过有一点是不同的,我们首先能够写出C 语言的代码(如果不会,这篇文章对您或许是没有多大的用处的),而你也无需要很高超的编写C 语言的经验或是技巧,我们在这里需要的只是一些比较基本的代码,而且比起汇编的代码的编写来说(这里指的是汇编的初学者或是并不是很专业的编写者来说),编写C 的经历实在是比汇编要美妙多了,那么,这种美妙能否也用到汇编的编写上来呢?在这里,我给出我的答案,是的,可以。 之前我想要写一个汇编的浮点运算的代码,不过这个事情比较的麻烦,对于老到的程序员来说,这可能不是难事,而对于能够刚刚把无符号与有符号整数的加减法编写出来的人来说,浮点运算会显得有些不可思议,毕竟,按照我当时的理解,还是需要用寄存器,像是ax之类的,不过看来反复的实验下来这个问题不能得到有效的解决,首先是ax的规模对此是有很大的限制的,那么我们的运算很可能以失败告终,当然,这个难题不是难题,可以用内存来进行存取,这样的空间就肯定是足够的了的。 不过问题又来到了,小数,或是我们所遇到的浮点数,在内存中,或者说在运算的时候究竟是怎么样进行的?这当然需要去细细的探查浮点数的表示以及符号的处理方面的很多的规定,这又是一大段功夫。 然后就联想到,在windows中的VC编程工具里,有一个反汇编的功能,在linux中是否也有这样的一个功能呢?看来是有的,不然我也不会写出来,好的,废话就不多说,在linux中,gcc是个好东西,你可以在终端中调用她,虽然长得不好看,不是一个统一的集成的编译环境,不过就性能和功能而言,确实是不二的选择。 其实接下来的事情就很简单了,主要即使指令的使用,gcc -S这个命令就能完成你所需要的反汇编,这正是我们所需要的,用一种语言去学习另一种语言,在这里就是用C语言去学习汇编语言,去深入机器实现的内部,因为汇编是比C语言更为接近底层的语言,用C 语言写一段浮点运算的代码不是难事,接下来就是见证奇迹的时刻,用了以上的这个指令,你就能得到你所需要的汇编代码了,不过现在学得是8086的汇编,还是16位,而这里产生的肯定就是32位的运行的代码,在汇编代码,你几乎可以看到你所能看到的一切,硬件的一举一动都在你的掌控之中,好了,以后,通过这样的一条途径,我们的汇编学习之路就更加的好走了!
相关资源