1. 引言
在学校时没有好好的学好汇编这门重要的基础课程,总是听很多老师说这门课程工作后很少用到,有众多C,C++,JAVA等等高级语言。于是乎,这门课程草草结束,也没有几个学懂,即使有几个同学有心学习,也是苦于晦涩难懂的教材,无从下手。于是与之相关的计算机系统结构,编译原理,操作系统等等一众计算机核心基础课,甚至连C语言,C++语言也没法深入理解,没法从根本上理解,导致了后续一连串的计算机课程没深入下去,只能在应用层开发上打转转,今天学习这个框架,明天学习那个框架,疲于奔命。本人在学习过程中,也是踩过很多坑,一遍又一遍的,翻阅了众多大师的原版教材后,明白了很多,现在来说一说踩过的坑。
2. 国行教材误人子弟
陶宝亚马逊等网上一搜“汇编”,瞬间出来若干页汇编教材,存细一看,寥寥一两百页的大把,我不知道是纸贵还是讲不清楚,这样的教材还冠以“规划教材”等各种名头,而且大都还以讲解16位汇编为主,32位cpu都出来二三十年了,还抱着老古董不放!别跟我说他们区别不大,学好了16位自然就会32位了!区别可大了,会了16位你不认真学32位,你一样不会!而且现的操作系统,不再支持实内存模式了,学个汇编还装个虚拟机,有那个必要吗?别跟自己的不思进取找借口。
再说说这些教材的风格,一来就是列举指令,也不讲清楚,也不把这些指令的全称列出来,方便记忆,不讲解其来龙去脉,不举例子或者举一个不能执行的例子,还都是从别的书上网上抄来的。计算机是一门实践性很强的学科,编程语言更是如此,光列几个概念有什么用?而且没有把汇编语言的背景和范围讲请楚,让初学者一上来就一头雾水,这就给学生一个错觉:汇编语言非常难学!这些教材几乎都只讲到了整数的汇编,对浮点数汇编只字不提,那怕你提一句话, 也可以给初学者一个提示,原来整数汇编和浮点数汇编还是不一样的。
因此,国行版汇编教材就没有几本优秀的教材,包括清华那本也有很多地方讲的不清楚。
另外,部分英语原版教材被翻译成中文出版后,语句不通,或者语句翻译错误,或者曲解作者的意思,或者自作聪明的作一些不恰当的修改。翻译的人本身就不精通汇编语言,或者语言能力不过关,活活把一本好书翻译烂,这其中不乏挂着各种头衔的专家教授。治学是需要细心,细致,准确的,不能搞得这样错误百出。
如此种种,学习汇编语言最好是选择国外大师编写的优秀教材,最好是看原版的,就算你英文不过关,最好也找一本原版的对照阅读,必要的时候可以帮你纠正一下,少走弯跳。
3. 优秀的汇编教材和CPU开发手册
3.1 <
作者:BARRY B. BREY
本书大而全,目前最新版为第八版,讲解的比较细致,例子也比较多,而且与时俱进,应该是汇编领域数一数二的教材了,个人认为学习汇编语言,首推这本。好像没有看到影印版的英文版,不过有电子版。
3.2 << Assembly Language for X86 Processors>> Seventh Edition
作者:Kip Irvine
本书最新版为第七版,本书讲解的内容包括16位,32位,64位。以masm编译器为平台,例子比较多,作者自己写了很多代码,可以从他的网站下载,很容易上手。内容也是讲解的比较细致,包括浮点汇编和高级语言诸多内容。本书最新版也是没看到影印版,但是前几版有影印版,可以下载电子版。其中文版也是翻译的问题多多,不忍直视。
3.3 << Modern X86 Assembly Language Programming: 32-bit, 64-bit, SSE, and AVX>>
作者:Daniel Kusswurm
本书对后续新增的寄存器汇编讲解比较多,高精度,浮点汇编,多媒体等等,正如其书名,现代汇编。也是一本深入学习的不二教材,实践代码比较多。
3.4 << Professional Assembly Language>>
作者:chard Blum
本书有英语版,是一本讲解linux环境下汇编的书,内容全面,也讲到了浮点汇编。讲解力求全面,细致,深入浅出,有讲解有例子,可操作性强,也是一本不可多得的教材。
3.5 Intel CPU开发手册
https://software.intel.com/en-us/articles/introduction-to-x64-assembly
https://software.intel.com/en-us/articles/intel-sdm
3.6 AMD CPU开发手册
https://developer.amd.com/resources/developer-guides-manuals/
3.7 关于MASM 的文档
https://docs.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference?view=vs-2017