网赌最正规的平台

电工学习网

 找回密码
 立即注册

学习汇编语言有什么好处?

2020-3-19 18:08| 编辑:电工学习网| 查看: 2163| 评论: 0

这样比喻吧:一个程序员,不懂汇编的阅读和用于汇编级指令级的调试——这正如一个顶级的世界F1方程式赛车手,不懂得赛车的构造和运行,是不行的。汇编和C/C++在破解和加密解密中都是非常重要的,高级语言根本无法对数据位进行操作,能操作数据位的只有汇编和C/C++,作者说的很详细,用汽车来举例也很贴切,我再举一个例子,很多需要注册的共享软件需要获取硬盘序列号,早期硬盘有专门的指令,现在的固态和机械硬盘早就不支持指令获取了,高级语言遇到这个问题就抓瞎,目前我见过的获取硬盘序列号的工具无一例外都是用汇编和C/C++写的,区别在于汇编写的程序更精简,只需要1-2KB空间,C/C++写的程序在十几KB左右。

学Java的可能会说,Java高端的很,不懂汇编没关系——是的,你开轿车,在平整的公路上跑60码,用自动档,当然不需要知道轿车的内部结构是怎么样的,离合器的工作本质是怎么样的,在这样的基础下,你一样可以把车开得很熟练。

但有一天,你没有一切都帮你搞定的轿车了,给你一辆有问题的车,你得自己修好它,才能逃离你当下的环境——比如你在沙漠里。

你说汇编重不重要,看懂它——重不重要?学会汇编,学会的不仅是一种语言——还是学会了现代高级编程语言依赖运行的底层微机结构的原理本质。你说有什么好处?来跟我重复一遍:学会汇编,学会的不仅是一种语言——还是学会了现代高级编程语言依赖运行的底层微机结构的原理本质。

学习汇编只是基础,如果想要汇编可以有所作用,可以继续研究:

并不是说必须学了汇编才能理解操作系统,而是说看问题的深度不一样。 有了汇编的保驾护航, 你可以在头脑中建立起一个有更多细节,更多实现的计算机, 那些概念不是模糊的,而是清晰的、鲜活的。

操作系统的运行原理, 绝对是程序员受益一生的知识。 比如说后端编程,不了解OS的进程、线程、 页面缓存,文件系统,I/O 就去大谈如何实现一个高并发、大数据量的网站简直就是笑话。

再比如对JVM的学习, 如果你懂得汇编, 看到JVM的字节码、看到栈帧就会觉得很亲切,只需要把基于寄存器的计算方式转换成基于栈的计算方式就可以了。

我们的计算机知识就像一座金字塔, 底层是数学, 上面是数字电路,然后是汇编,再往上是操作系统、网络,数据库、高级编程语言、框架等等......

我们每个人不可能精通这个金子塔的每一层, 但是要掌握、理解构成这个金字塔的核心概念。

在应用层编程, 不一定要掌握汇编, 但是掌握汇编能让我们更透彻的看待我们赖以为生的虚拟世界 , 没错, 你要想成为黑客帝国中的Neo, 汇编必须得学。

我有时候会胡思乱想: 如果这个编程世界根本没有什么Java, Python, C++, Javascript , PHP, 只有汇编这么一种语言, 像 Rod Johnson(Spring之父), DHH(Ruby on Rail之父) , Eric Gamma (JUnit, Eclipse) , Gavin King(Hibernate之父) 这些在应用层编程的大牛们, 他们用汇编写程序会是什么样子? 他们会创造出什么东西出来?

我想有一点是肯定的: 即使是使用汇编,他们的编程技能仍然会毫不留情的把我碾压成渣渣。 原因很简单, 一个驾驭过复杂系统的人,他的逻辑思维能力肯定是强悍无比的, 汇编只是让他换了一个工具而已。

更可怕的是由于软件极难编写, 只有一帮大牛才有资格编程,才能成为程序员, 像我这样资质平庸者估计只能去搬砖吧。

1.汇编语言 汇编语言是最接近于机器语言的编程语言。如果说机器语言是计算机操作的本质那么汇编语言就是最最接近本质的语言。汇编语言操作直接面向硬件。所以我们在使用汇编语言的时候,我们能够感知计算机的运行过程和原理,从而能够对计算机硬件和应用程序之间的联系和交互形成一个清晰的认识。这也是最能够锻炼编程者编程思维逻辑的,只有这样,学习者才能形成一个软、硬兼备的编程知识体系,这是任何高级语言都无法给予的,相对于繁复的高级语言,汇编语言指令集合更简约,指令操作更直接,从汇编开始学习更符合循序渐进的学习原理。所以,对于计算机技术初学者或者自学者,汇编语言重要性无可替代

2.汇编语言之于高级语言,不否认在应用层面高级语言占据了软件开发市场的绝大部分。也正是这种现象误导了学习者甚者是教育者,所以目前高校计算机专业的现状是,专业课程中C语言、C++、Java等高级语言一应俱全而毕业的学生却连简单的程序都不能编写。为什么?听不懂、学不会。这就是缺乏基础造成的。汇编语言才是计算机技术的基础,而不是常说的C语言。之所以说汇编重要,其一个重要的原因就是,汇编语言能够让你更好的理解高级语言,尤其是高级语言中的C语言。汇编语言对于内存的操作都是基于内存地址的,而C语言中最令人头疼的指针概念,说白了就是内存的地址。指针的学习和应用中最头疼的就是在指针这个抽象的概念和实际的内存单元之间建立思维映射,而这些恰恰是我们在汇编语言学习中频繁做的一件平常事。另外,对于C语言中的数据类型、形参实参、函数调用、全局变量、局部变量等概念及操作,我们都可以用汇编语言中的一些操作相关联把这些抽象的概念和过程通过汇编语言形成一个具体的映像,深度剖析这样我们才能真正的学会、学好C语言。

有了汇编和C的基础,那些所谓的面向对象的语言学习起来就更为顺畅了,奉劝那些好高骛远的学习者,踏踏实实的从汇编开始吧。古云:磨刀不误砍柴工啊!

3.汇编语言之于应用 很多学习者放弃对于汇编语言的学习,是因为高级语言的开发更容易找到工作。这个理由也是我见到过的最现实的。但是,这里面明显存在着认识误区。首先,我们的学习是一个系统过程,我们的知识结构不是一个单一课程所能够建立的。所以,学习汇编的目的并不是非要用汇编去挣饭钱。因为汇编语言对于一个编程人员所应该具备的基本素质的培养和形成得意义是非常重大的,这在前文中已经分析了,不再赘述;其次,汇编本身也是很重要的应用技术。由于学习者,尤其是在校的学生,平时接触的最多的是纯软件的东西。所以,觉得五花八门的软件才是计算机技术应用的舞台。那么这些人最终会成为那位博主提到的那些工作后才意识到汇编的作用的“师兄”。汇编的操作由于跟硬件紧密相关。所以,很多硬件设施的嵌入式编程使用的都是使用的汇编语言,因为汇编语言更直接、更有效率。我们现在的数码产品很多,而这些数码产品赖以生存的芯片、主板等。都包含了嵌入式程序,而这些程序中。汇编语言的使用是相当重要的。
偏硬件

低级(具有一定的汇编能力,能写出基本程序,基本的8086和win32都能看得懂)

·可以修改游戏数据

·可以破解收费软件

·可以自己写外挂(一刀999级不是梦)

·机子在跑高级语言的时候可以优化分配内存

中级(可以自己编写出比较高级的程序,开始专精汇编分支的某一种比如51单片机,ARM,X86,懂得硬件基本构造和计算机逻辑电路和CPU原理)

·可以自己编写调试底层系统

·可以汇编/反汇编,可以进行病毒的编写和调试和破译

·移动端系统底层/电子产品/硬件基本系统熟练于心,可以进阶成一个真正的电子极客了。

·黑客方面可以达到入侵心脏起搏器,学校的电子屏,ATM屏幕,以及各种微电子系统,介于中级和高级之间。

·最让人头疼的内核问题可以一眼看出来问题所在并解决

·一般的汇编程序员大多数在这个水平

高级(这一层的人就是大牛或是大牛中的大牛了,对自己所熟练的语言达到了驾轻熟就的地步,在电脑以及不同的,CPU运作方式方面达到了专家的级别)

·可以参与破解刷机各种手机系统,将手机系统玩弄于鼓掌之上的人

·参与最新智能系统的编写(智能遥感,火箭以及飞机的操作系统),优秀的汇编高级工程师

·国家网络安全局级别的大牛,类似震网病毒的破译与安全测试

·自己写出来系统在同行属于出类拔萃。

·在汇编语言方面是不可多得的优秀的人才

神仙级别(世界上万里挑一,如果出来了会是一个国家的骄傲)

·独自破解iphone,索尼,独自研究编写无人驾驶汽车系统的乔治霍期

·研究ATM机的CPU纹路走向和CPU对数据的处理方式的某黑客,,能达到破解ATM机系统对其远程操控到自动吐钞的地步(后来这个黑客被人暗杀了)

·编写出一代ios系统的老乔

·参与编写震网病毒的各路神仙。。。一次性能利用WINDOWS系统的20来个0day漏洞,程序的精巧度令人发指,几行命令抵一般人几页命令

学习汇报语言的目的不是像学习高级语言那样。汇编是底层语言,学习它本身就有利于我们进一步了解底层计算机的运行。这对计算机的学习是个很基础的要求。随着现在越来越多高级语言的发展,不可否认为我们编写提供了便利。但是汇编给我们带来的却是理解计算机。我觉得这很重要,学了汇编你才算知道了计算机是如何运转的。

学习汇编语言可以从最底层理解微机的工作原理,细微到一个状态位放在哪一个存储区,系统怎么轮询,指令和数据之间如何互动,真正把电路逻辑和代码内容衔接起来。然后再学到C,发现每一条C语言语句是这样对应汇编的指令的,有一种能洞悉这块芯片的所有秘密的感觉。

看过《学习汇编语言有什么好处?》的人还看了以下文章:

发表评论

最新评论

|电工学习网 ( )

GMT+8, 2020-7-28 02:01

Powered by © 2011-2020 m.bianfu.tw 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部
language="JavaScript" })();