学汇编语言,究竟应该学些什么?
据我的观察,很多人掌握了若干计算机指令,会编写一个从键盘输入数据,然后进行加减乘除或者归类排序的程序后,就认为自己掌握了汇编语言。还有,直到现在,我还经常在网上看到学生们使用DOS中断编写程序,他们讨论的也大多是实模式,而非32位或64位保护模式。他们知道如何编译源程序,也知道在命令行输入文件名,程序就能运行了;又或者使用一个中断,就能显示字符。至于这期间发生了什么,程序是如何加载到内存中的,又是怎么重定位的,似乎从来不关汇编语言的事。这样做的结果,就是让人以为汇编语言不过如此,而且非常枯燥。 ——题记,引自本书前言 在我读这本书之前,我读过的汇编语言书籍,可以分为这么几种。1,讲8086的,但是讲的特别浅,而且只有8086。最后弄几个复杂的算法题就结束了,这类书例如教材。2,名为汇编,实则系统调用+内联汇编,这样的书代表是《Windows32下汇编语言程序设计》等。3,偏记组,以及怪异技巧,泛泛而谈,轻实践。这类书几乎是国外的汇编语言通病。比如csapp,讲怎么用lea算数学函数,就属于奇怪技巧。4,讲的是一些其他平台的汇编,例如mips。这类书也是常见于国外书。 我一直在寻找,希望看到的是一本纯粹的,并且有深度的书,而且讲的是x86平台。纯粹指的是不要牵扯到系统调用,C语言等。有深度指的是不要只讲8086。 这本书完全符合我说的所有特点。1,它是讲x86的。2,它从最基础的东西讲起,做好铺垫。然后讲到实模式,然后讲到保护模式。把x86所有的东西都讲到了。3,这本书的代码是在裸机上运行的,没有操作系统。除了有一章,大概用了两页演示了一下bios系统调用(以讲解这个系统调用的知识点)外,不依赖任何外部环境。完全是自己动手。4,内容十分全面,从实模式下的分段,重定位技术。到保护模式任务加载,重定位技术,分页,任务切换,特权级,系统调用等等一应俱全。由于是完全不依赖任何环境,所以连文件头,链接器等,都是你自己设计的。5,习题出的非常棒。每章习题只有一两个,但是极有价值,能带动读者向不一样的方向,更深的层次思考,而不会陷入书中实现而"背代码"。6,作者文笔非常好,讲东西很清楚又简洁,没有废话,也不跳跃。该清楚的该详细的一定讲的详细清楚。并且,代码写的也很好很清楚,读起来非常舒服。并且技巧性很足,值得学习的点很多。 我认为,这本书是一本非常难得的好书,无论是什么水平的读者,都值得认真仔细的读一读这本书。