来自 编程 2019-10-01 10:18 的文章
当前位置: 澳门三合彩票 > 编程 > 正文

作为自学过汇编语言的人,是世界上最好的语言

澳门三合彩票 1

澳门三合彩票 2

澳门三合彩票 3

作者 谢恩铭 转载请注明出处公众号「程序员联盟」(微信号:ProgrammerLeague )原文:

-- 作者 谢恩铭 转载请注明出处微信公众号「程序员联盟」ProgrammerLeague原文:

作者 谢恩铭 转载请注明出处公众号「程序员联盟」(微信号:ProgrammerLeague )原文:

  1. 前言
  2. 建议
  3. 入门推荐
  4. 分析
  5. 总结

目录

  1. 什么是汇编语言
  2. 语言层级的区分
  3. 汇编语言的特性
  4. 澳门三合彩票,学习汇编真的必要吗
  5. 汇编怎么学

常有人问:现在基本都使用高级语言了,汇编语言还需要学吗?学习汇编语言有什么好处呢?汇编语言看着这么头大,如何学习?

作为自学过汇编语言的人,我来谈谈心得。不才,有说得不正确之处,还望指正。

我是2011年学习汇编语言的,那时候编程刚入门不久。

因为专业是嵌入式软件和移动信息,入门了C语言这个嵌入式领域的关键语言之后,我看到很多论坛说学习汇编对理解计算机的原理和内存很有帮助,就自学了一段时间。

汇编语言(英语:assembly language)是一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。

在不同的设备中,汇编语言对应着不同的机器语言指令集。

一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。

使用汇编语言编写的源代码,然后通过相应的汇编程序将它们转换成可执行的机器代码。这一过程被称为汇编过程。

现在汇编语言已不像其他大多数的程序设计语言一样被广泛用于程序设计,在今天的实际应用中,它通常被应用在底层硬件操作和高要求的程序优化的场合。

驱动程序、嵌入式操作系统和实时运行程序都会需要汇编语言。

汇编语言类似这样:

MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA DX,MSG0CALL PRINTSCALL ENTER

习惯了编程Java或C++等语言的朋友看到上面这段代码是不是有点晕的感觉。

一般来说,编程语言的层级可以分为高级和低级。

低级语言(英语:Low-level programming language),在计算机科学之中,是电脑编程语言的一类。该类编程语言之所以被称为低级,是因为该类语言在运作时无法进行进一步的抽象化,而与中央处理器的机器语言或指令直接对应,因此一般亦被指是原始的编程语言。

汇编语言就属于低级语言。

高级语言(High-level programming language)是高度封装了的编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示,使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。

现在一般我们用的编程语言,如C语言,C++,Java,Python,PHP,C#等都可以归类为高级语言。

不过,低级与高级其实只是相对的概念,Java对比C语言可以被认为是一种相对高级的编程语言。

说到汇编语言的特性,除了运行高效,编写繁琐之外,暂时也想不到其他了。

一个简单的加法小程序,用汇编语言写,就要好多行。

至于用汇编语言写贪吃蛇等小游戏,真的很需要耐心。

其实,我们小时候玩的那种《超级玛丽》,《魂斗罗》等游戏,都是汇编语言写成的。

当时一个超级玛丽游戏才128KB大小,想想我们现在动辄好几个GB的大型单机游戏,一张图片可能就超过128KB了,不得不感叹汇编语言的强大和当时的程序员之牛叉。

如想了解更多,可以参看知乎上的这个话题:

《超级马里奥3》使用了什么样的技术可以在128KB中写进这么多东西?

我个人认为是必要的,而且以我的体会来看,相当值得!

当然了,不学也没什么不行的。不过就我个人的体会和各大论坛的评论来说,汇编语言的学习几乎是有百利而无害。

因为汇编语言可以让你接触到计算机很多底层的技术和知识,例如寄存器,内存,操作系统架构,等等。

这样,能促使你去阅读更多的有关计算机原理和编译原理的书,做到知其所以然,对我们经常使用的电脑兄有一个深入的理解。

总之:汇编语言的学习可以夯实我们的基础。而且,我们并不需要学到多深入,只要能入门即可。

而且:

无论是对于反病毒工程师还是逆向分析爱好者来说,汇编都是他们必学的知识,可以说汇编是一切逆向研究的根本。不管是使用OllyDbg还是IDA Pro,又或者是其它的一些反汇编工具,我们进行逆向分析的时候,是只能查看目标程序的汇编代码的,通过分析其汇编代码,来推测程序的运行机理。因此从这个角度来说,想研究逆向,就一定要精通汇编。

可以说任何语言的学习都逃不过看书+实作。那么,“让人生畏”的汇编语言该从什么书入门呢?

要看书,自然必须看好书。

我觉得,入门可以看清华大学王爽老师的《汇编语言》,目前好像是第三版了吧。我当初2011年学习时还是第二版。

时间荏苒啊,一晃眼5年过去了。我很感谢汇编语言,是它让我打好了编程的基础,也帮助我更深入理解了C语言(特别是C语言的难点:指针)。

当时,王爽老师的《汇编语言》这本书的习题我全部做了,而且专门去这本书的官方论坛,一题题对答案,全对。

PS:我试了一下,这个官方论坛目前进不去了... 不知哪天能恢复呢?

不过大家也可以去这个论坛学习。

此外,CSDN的汇编语言论坛也是很不错的。

当然了,学习汇编语言的同时,如果能配合《深入理解计算机系统》这本入门的书就更好了。

我把2011年那时学习汇编语言的文件夹上传到我的Github上了,欢迎提意见:

这里面大部分是《汇编语言》这本书的习题我的答案,不过不全了,而且还有一些其他的汇编程序。

王爽老师的这本书第二版是以8086汇编语言(Intel 8086 为16 位 CPU)作讲解的,后来我进阶看了一些80386(Intel 80386为32位的CPU)的书,推荐一本我个人非常喜欢的书:《Orange S:一个操作系统的实现》。

《Orange S:一个操作系统的实现》这本书是《自己动手写操作系统》的第二版。作者是于渊。

他的第一版《自己动手写操作系统》很受欢迎,因为一般很少有人能将晦涩难懂的操作系统讲得如此有趣。后来他写了更加完备的第二版。

第二版的书名有点特别,Orange是英语《桔子》的意思。据作者在序里面说的,第一版的操作系统名字是Tinix。而第二版换成了Orange’s,这名字来自于作者的妻子。

于渊老师的这两本书都一步步引导读者用汇编语言和C语言编写出一个具备基本功能的操作系统。

《Orange S:一个操作系统的实现》这本书的源代码在Github上:

当然了,其他还有很多汇编语言的优秀书籍和学习资源,欢迎大家留言补充,谢谢!

祝大家都能愉快地学习汇编语言,更好地掌握编程!

我是 谢恩铭,在巴黎奋斗的软件工程师。我创建了程序员联盟的 知识星球,欢迎加入。热爱生活,喜欢游泳,略懂烹饪。人生格言:「向着标杆直跑」

编程语言之争从来不曾停止,这篇文章绝对不会去讨论哪个语言是最好的(当然了,除了「PHP 是世界上最好的语言」这句「真理」之外)。

现在 IT 行业越来越火爆,许多朋友都愿意入门「挨踢」,噢,不,当程序员。

插句题外话,不要听一些人说:「编程语言没有好差之分,只有用起来顺不顺手」。这话其实不正确,编程语言就是有好差之分,有些编程语言就是设计得不好,就是不适合一般的应用,就是无人问津。

那么问题来了,对刚接触这个领域的新人来说,选什么语言作为第一门语言呢?这是很关键的问题,因为这决定了这位新人是「从入门到继续」还是「从入门到放弃」。

我想谈谈最近几个月以来我的感受:

我推荐:或者从 C 语言入门,或者从 Python 入门。

「我深刻地认识到 Python 是当下迫切应该学习的编程语言」。

这里又得分情况来说:

为什么这么说呢?且听我慢慢「因式分解」:

  1. 如果你只是想用编程来完成一些简单的任务,目标不是深入技术,那么选 Python。有很多好处,入门快,成就感来得快,高效好用。

  2. 如果你要深入编程,想成为技术专家,特别是做嵌入式这样对技术要求比较高的行业,那么选 C 语言。

  3. 如果你还不清楚自己的未来发展方向,那请先弄清自己想要做什么再来学编程。如果实在是前路迷茫,懵懂未知,那么从 C 语言入门。因为你把 C 语言学了,你会发现 Python 入门太简单了;反之不然。

  1. Python 最近很火,非常火。这和人工智能(AI :Artificial Intelligence)有关。Python 有很多优秀的库,特别适合数学运算和科学计算,而人工智能就需要很多计算和一些算法,因此 Python 的很多库比如 Numpy,Pandas 等就有用武之地了。而且很多大公司启动了适合人工智能的库或项目,比如 Google 公司发布的开源机器学习库 TensorFlow,Tesla的 OpenAI,等等。这些库上层都可以很方便地用 Python 来操作。其中 Google 的 AlphaGo 击败了人类最强围棋玩家李世石,而 AlphaGo 是基于 Google 的 DeepMind,DeepMind 前不久宣布宣布底层基于 Tensorflow 了。特斯拉的 OpenAI 在单人对抗中击败了人类最强的 Dota 2 影魔选手之一的 Dendi,完整对战视频。
  • 如果你选 Python 作为第一门编程语言,请看我的 最近迫切应学的编程语言 这篇文章,说的就是 Python 的好处和入门建议。

  • 如果你选 C 语言作为第一门入门语言,虽然开始会有些「疼痛」,但是至久必成为你的帮助。请看我的 《C语言探索之旅》 来入门。

澳门三合彩票 4OpenAI 和人类选手 Dendi 的 Dota 2 单人对决

当年我大学时才接触编程,但一直没入门(可以参看我的经历:关于我)。

  1. Python 非常容易入门。Python 号称「Battery included」,我们知道 battery 是「电池」的意思,included 是「包含」的意思,因此就是说 Python 简单到「已经包含了电池了」,功能都已经包含在语言里了,直接拿来用即可。其语法实在很简单,基本没有编程经验的孩子几天也可以学会。

  2. Python 几乎可以被应用在任何领域。人工智能、科学计算领域自然不用说,各种成熟的库调用起来极为方便;大数据领域也是 Python 大展拳脚之处;云计算领域 Python 可以发挥实力,比如著名的 Dropbox 就是 Python 写的;用 PyGame 可以进行快速游戏开发;GUI 图形界面编程也不在话下,Matplotlib 这个绘图库可以满足你;嵌入式领域,著名的树莓派(Raspberry Pi)开发板的主要开发语言是 Python;Web 应用有 Django 这个 Web 应用框架,可以很快速地开发出绚丽无比的网站;Web 后端 Python 也不甘寂寞,知乎和豆瓣的后台就是 Python 写的;近几年新兴的职业 DevOps (development 和 operations 的组合)一般也用 Python 来写脚本;一些大型项目的构建以及一些小任务的处理,Python 的脚本也能助你快速开发;用 Python 做爬虫程序,可以轻松爬取网络上你想要的内容(当然,请不要干坏事),Python 有很多不错的爬虫库,例如 Scrapy。

  3. 优越的跨平台性能,几乎所有的操作系统都可以跑起来 Python。

  4. Python 既支持面向过程函数式编程也支持面向对象的抽象编程。

  5. 用 Python 语言编写程序让人很愉快,反正我学习的时候感觉写 Python 的程序有一种快感。

  6. Python 非常精简。本身的 API 封装得挺好,因此很多功能不需要我们重新造轮子,直接调用即可。再加上那么多成熟的库,用起来不要太开心。同样实现一个功能,用 C 语言,Java 或 C++ 往往要写很多行代码,Python 只需一行或者几行代码帮你搞定。

  7. Python 在 Tiobe 编程语言排行榜的最新一期榜单(2017年 9 月)中已经位列第 5,仅次于 Java,C语言,C++ 和 C#。虽说这个榜单不能涵盖全部,但也是编程界比较权威的榜单了。可以看出 Python 势头正劲。

  8. Python 是解释型语言,因此假如你要做些小测试,或者学习这门语言,将会非常省时间,因为不需要编译,直接解释就可以执行。比如我很喜欢的 Python 的 IDE,由大名鼎鼎的 Jetbrains 出品的 PyCharm,就让写 Python 程序成了一种享受。

  9. Python 的可扩展性很好,开发者可以用 C 语言或者 C++ 编写 Python 的扩展模块,还能将 Python 嵌入到 C/C++ 程序中。

  10. Python 的源代码写得不错。其源代码一开始是用 C 语言写的,Python 的作者使用中立的面向过程的 C 语言,实现了动态面向对象,使得 Python 具备灵活和优雅的特性。Python 的源代码也是值得学习的。推荐一本书,是中国人写的,叫《Python 源码剖析》,作者 陈儒,豆瓣评分 8.7。

  11. 规范的代码。Python使用强制缩进来保证代码规范性,几乎不需要代码审查。

总结一下 C 语言作为第一门编程语言的好处:

正因为 Python 这么好,我最近也开始认真学习 Python 了。

  1. 基础深厚

我在好多年前也略学过一点 Python,在工作中其实偶尔也会写 Python 脚本,公司的一个检查多种代码格式的脚本就是 Python 写的,我也在维护。

现在你看到的大部分编程语言都是借鉴了 C 语言或者用 C 语言写成的,比如 Java,C++,C#,Python,Go,JavaScript,Objective-C,Swift,PHP,Perl,等等。

不过我觉得自己的 Python 水平还是很低,因此想要让自己在 Python 上多精进一些,能够掌握 Python 的精髓,更灵活使用。

大部分操作系统也用到了 C 语言,比如 Unix,Linux,Windows,Mac OS X,iOS,Android,等等。

我之前没怎么好好学 Python 主要也是因为 Python 真的太容易上手了(你说 Python 的发明人怎么能把这门语言设计得这么易用呢,那不是纵容我们去偷懒吗?哈哈,开个玩笑),只需要了解一下基本语法,然后想要什么功能,就写个类,写个方法或有时写几行代码就可以了。

可以说,C 语言影响了全球的计算机系统和网络,改编《指环王》的经典台词就是「One language to rule them all」(意思是:一门语言统领其他语言)(《指环王》原来的诗是「One ring to rule them all」(意思是:一枚戒指统领其他戒指))。

最近几个月我在自学人工智能的知识,机器学习和深度学习都需要用到很多 Python,才觉得有必要重新开始认真学习这门伟大的语言。

当然了,C 语言最初是用 B 语言写的,但今天却几乎没有人在用 B 语言了。可见 C 语言的飞跃,其源码设计之精良。

学了一段时间,感觉 Python 真的太强大太好用了,爱不释手,目前是我最喜欢的语言。

本文由澳门三合彩票发布于编程,转载请注明出处:作为自学过汇编语言的人,是世界上最好的语言

关键词: