汇编原理之前言

来源:互联网 发布:网络用语2015最新 编辑:程序博客网 时间:2024/05/18 03:45

        我上大学时,在编程方面只学习过Visual Basic和C两种高级编程语言,另还有《微型计算机原理与接口技术》这门课中的一点儿汇编语言(当然是8086/8088架构啦)。当时根本没意识到编程水平是要靠实践才能提高的,学习只是为了通过考试。无人指点,浑浑噩噩。
        等到我上了研究生之后,很偶然的一次机会,看到了王爽老师写的《汇编语言》第二版,大略翻过之后,感觉作者讲的非常精彩。于是在08年的那个寒假将这本书带回了家,打算仔细品读。当然我也有经验的,带书多了一本都读不了,所以我就只把这一本带回了家。在家里读完了这本书,却因为家里没有电脑,缺少实践,很多地方都不是很明白,我都在本上做了笔记,打算到学校后一一验证自己的想法。过了年假,开学后的前一段时间,就常常去实验室进行汇编语言的编程。那一段时间,现在回想起来,进步还是非常大的。至少我不再畏惧汇编语言了。后来我又把这本书细读了两遍,每次读都会感觉有进步。
        后面我先后又看了罗云彬写的《windows环境下32位汇编语言程序设计》,Paul Carter著,伍星梵音的《PC Assembly language》,也看了Intel的手册的一部分,还有杨文博的《自己动手写操作系统》,把里面的代码都打印出来,细细研究。至于汇编语言编译器方面,使用过Microsoft 的masm5.0,Borland公司的tasm,罗云彬推荐的masm32,开源汇编器nasm,linux环境下的as和ld,开源编译器djgpp,开源编译器fasm等等。学习汇编语言,当然还少不了要使用虚拟机,我使用VMware虚拟机,Virtual PC虚拟机,Virtual Box虚拟机,bochs虚拟机。操作系统方面当然也玩过linux(使用的是Ubuntu),不过只会最简单的操作。由于没有找到和我一样喜欢汇编语言编程的同学,一切都是自己摸索,因为感兴趣,所以看了很多,收获也不少,但也因为这样,精力也分散了很多。不过我比较得意的是我把罗云彬的socket编程那一章的聊天室的小程序改动了一下,把作者提出的几个问题都解决了,把改动后的小程序发到看雪论坛,并评为精华帖,并获得了论坛的邀请码;并凭借这个程序,在我找工作的时候打动了第一轮的技术面试官,给了我继续面试的机会,最后找到了现在的工作。
        工作之后,仍然割舍不下对汇编语言的喜爱,偶尔还会看一看。去年十一的时候,看完了《Programming from the ground up》,对linux下的汇编语言编程熟悉了很多。可是由于平时不用,现在基本都忘光了。哎。
        在所有的汇编语言编译器中,我对fasm情有独钟。这是一个开源的汇编器,作者是Tomasz Grysztar。这个汇编器最大的优点就是自己可以编译自己,生成一个和自己一模一样的汇编器。而且它的源代码也不多,1.0版本总共有9个文件,代码不到一万行。我不是计算机系毕业的,没有学习过编译原理。在我的印象中,编译原理一直是比较神秘的。我不明白一个编译器究竟是如何分析源代码文件中的代码,并转化为一个可执行文件呢?我很想通过分析fasm的源代码来解答自己心中的疑惑。在上研二的时候曾经看过一小部分代码,后来时间太紧,就没再继续看了。但是还保留了一些笔记。
       我会分析fasm1.0的源代码。因为版本越早,代码越少,但是功能都还具备,可以把asm文件编译成可执行文件。把1.0的分析透彻了,再分析后面的就容易一些了。我看fasm纯粹是出于个人兴趣,因为我很想知道底层的原理。后面我看一部分,就会把对代码的分析写到上面,作为自己的笔记,免得以后忘记了。
注:笔者认为把高级语言转化为可执行文件的编译器叫作编译器,而把汇编语言转化为可执行文件的编译器叫作汇编器。

原创粉丝点击