哪些程序员需要学汇编(学习汇编对编程有什么帮助)

哪些程序员需要学汇编(学习汇编对编程有什么帮助)(1)

-- 作者 谢恩铭 转载请注明出处

###目录

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 -

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页