-- 作者 谢恩铭 转载请注明出处
###目录
1. 什么是汇编措辞

2. 措辞层级的区分
3. 汇编措辞的特性
4. 学习汇编真的必要吗
5. 汇编怎么学
常有人问:现在基本都利用高等措辞了,汇编措辞还须要学吗?学习汇编措辞有什么好处呢?汇编措辞看着这么头大,如何学习?
作为自学过汇编措辞的人,我来谈谈心得。鄙人,有说得禁绝确之处,还望示正。
我是2011年学习汇编措辞的,那时候编程刚入门不久。
由于专业是嵌入式软件和移动信息,入门了C措辞这个嵌入式领域的关键措辞之后,我看到很多论坛说学习汇编对理解打算机的事理和内存很有帮助,就自学了一段韶光。
##什么是汇编措辞
汇编措辞(英语:assembly language)是一种用于电子打算机、微处理器、微掌握器,或其他可编程器件的低级措辞。
在不同的设备中,汇编措辞对应着不同的机器措辞指令集。
一种汇编措辞专用于某种打算机系统构造,而不像许多高等措辞,可以在不同系统平台之间移植。
利用汇编措辞编写的源代码,然后通过相应的汇编程序将它们转换成可实行的机器代码。这一过程被称为汇编过程。
现在汇编措辞已不像其他大多数的程序设计措辞一样被广泛用于程序设计,在本日的实际运用中,它常日被运用在底层硬件操作和高哀求的程序优化的场合。
驱动程序、嵌入式操作系统和实时运行程序都会须要汇编措辞。
汇编措辞类似这样:
```
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA DX,MSG0
CALL PRINTS
CALL ENTER
```
##措辞层级的区分
习气了编程Java或C++等措辞的朋友看到上面这段代码是不是有点晕的觉得。
一样平常来说,编程措辞的层级可以分为高等和低级。
低级措辞(英语:Low-level programming language),在打算机科学之中,是电脑编程措辞的一类。该类编程措辞之以是被称为低级,是由于该类措辞在运作时无法进行进一步的抽象化,而与中心处理器的机器措辞或指令直接对应,因此一样平常亦被指是原始的编程措辞。
汇编措辞就属于低级措辞。
高等措辞(High-level programming language)是高度封装了的编程措辞,与低级措辞相对。它因此人类的日常措辞为根本的一种编程措辞,利用一样平常人易于接管的笔墨来表示,使程序编写员编写更随意马虎,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。
现在一样平常我们用的编程措辞,如C措辞,C++,Java,Python,PHP,C#等都可以归类为高等措辞。
不过,低级与高等实在只是相对的观点,Java比拟C措辞可以被认为是一种相对高等的编程措辞。
##汇编措辞的特性
说到汇编措辞的特性,除了运行高效,编写繁琐之外,暂时也想不到其他了。
一个大略的加法小程序,用汇编措辞写,就要好多行。
至于用汇编措辞写饕餮蛇等小游戏,真的很须要耐心。
实在,我们小时候玩的那种《超级玛丽》,《魂斗罗》等游戏,都是汇编措辞写成的。
当时一个超级玛丽游戏才128KB大小,想想我们现在动辄好几个GB的大型单机游戏,一张图片可能就超过128KB了,不得不感叹汇编措辞的强大和当时的程序员之牛叉。
如想理解更多,可以参看知乎上的这个话题:
[《超级马里奥3》利用了什么样的技能可以在128KB中写进这么多东西?](https://www.zhihu.com/question/19860051)
##学习汇编真的必要吗
我个人认为是必要的,而且以我的体会来看,相称值得!
当然了,不学也没什么弗成的。不过就我个人的体会和各大论坛的评论来说,汇编措辞的学习险些是有百利而无害。
由于汇编措辞可以让你打仗到打算机很多底层的技能和知识,例如寄存器,内存,操作系统架构,等等。
这样,能匆匆使你去阅读更多的有关打算机事理和编译事理的书,做到知其以是然,对我们常常利用的电脑兄有一个深入的理解。
总之:汇编措辞的学习可以夯实我们的根本。而且,我们并不须要学到多深入,只要能入门即可。
##汇编怎么学
可以说任何措辞的学习都逃不过看书+实作。那么,“让人生畏”的汇编措辞该从什么书入门呢?
要看书,自然必须看好书。
####入门
我以为,入门可以看清华大学王爽老师的[《汇编措辞》](https://book.douban.com/subject/25726019/),目前彷佛是第三版了吧。我当初2011年学习时还是第二版。
韶光荏苒啊,一晃眼5年过去了。我很感谢汇编措辞,是它让我打好了编程的根本,也帮助我更深入理解了C措辞(特殊是C措辞的难点:指针)。
当时,王爽老师的《汇编措辞》这本书的习题我全部做了,而且专门去这本书的[官方论坛](http://www.asmedu.net),一题题对答案,全对。
PS:我试了一下,这个官方论坛目前进不去了... 不知哪天能规复呢?
不过大家也可以去这个[论坛](http://bbs.bccn.net/forum-126-1.html)学习。
此外,CSDN的[汇编措辞论坛](http://bbs.csdn.net/forums/ASM)也是很不错的。
当然了,学习汇编措辞的同时,如果能合营[《深入理解打算机系统》](https://book.douban.com/subject/5333562/)这本入门的书就更好了。
####进阶
王爽老师的这本书第二版因此8086汇编措辞作讲解的,后来我进阶看了一些80386的书,推举一本我个人非常喜好的书:《Orange S:一个操作系统的实现》。
[《Orange S:一个操作系统的实现》](https://book.douban.com/subject/3735649/)这本书是[《自己动手写操作系统》](https://book.douban.com/subject/1422377/)的第二版。作者是于渊。
他的初版《自己动手写操作系统》很受欢迎,由于一样平常很少有人能将晦涩难懂的操作系统讲得如此有趣。后来他写了更加完备的第二版。
第二版的书名有点特殊,Orange是英语《桔子》的意思。据作者在序里面说的,初版的操作系统名字是Tinix。而第二版换成了Orange’s,这名字来自于作者的妻子。
于渊老师的这两本书都一步步勾引读者用汇编措辞和C措辞编写出一个具备基本功能的操作系统。
《Orange S:一个操作系统的实现》这本书的源代码在Github上:
https://github.com/yyu/osfs00
当然了,其他还有很多汇编措辞的精良书本和学习资源,欢迎大家留言补充,感激!
> 祝大家都能愉快地学习汇编措辞,更好地节制编程!
- End -