我为什么要学习汇编语言???

我为什么要学习汇编语言

  今天写一篇有关于我认为的为什么要学习汇编语言的一点认识,不喜勿喷。仅仅代表作者自己工作这么多年的一点经验,不强加于任何人,如果觉得写得有道理,请点赞。
  工作了几年以后,掌握了基本的Java知识体系中的技术以后,就开始不满足于现有的深度,开始向着深度发展,然后开始看《Java虚拟机原理》,开始看得时候发现都能看得懂,然后越往后看越看不懂,比如什么栈帧、堆栈、堆等等很多的名词。虽然平时在编程过程中都遇到过,有一点模模糊糊的印象,但是不能从直观上有更深入的认识,那就是到底什么是栈帧、堆栈、堆等等这些问题吧。这本书看得无疾而终,永远趴在了角落中吃灰。
  直到有一天突然对破解小软件、写注册机感兴趣,于是在网上学习8086汇编语言中的基本的寄存器、指针、指令等等这些汇编中的东西吧。主要有EAX、EBX、ECX、EDX、EIP、ESP、EBP、MOV、ADD、MUL、XOR、RET等等等等数不清的指令还有寄存器,然后才从根本上知道了函数调用、参数传递、压栈、出栈等基本概念再去各个下载网站中下载一些需要注册的软件,或者需要输入验证码的软件,然后用ollydbg软件crack一下,进一步做出一个注册机,那种自豪感犹如马超见了刘备,“如拨云雾而睹青天”。从而知道了原来我们写出来的软件需要经过操作系统的一系列处理才能运行。
  但是最重要的收获是从汇编语言的角度了解了Java虚拟机中的栈帧是什么意思?其实就是以EBP基址指针与ESP之间堆栈都是当前的函数调用过程数据。对于数字由于占用空间小,直接保存到堆栈中,而对于大一点的复合体数据或者对象在堆栈中保存一个指针,然后把真正的对象保存在堆中,汇编语言中的堆与我们在程序中用到的“堆排序”的堆是两个完全不同的概念,这一点读者朋友一定不要搞混了,否则会让你越看越模糊。编译器中的堆相当于一个超大的数组,通过在堆栈中保存的指针,也就是索引值,可以在堆中实现快速存取,也能快速释放。
  看到了吧,学习一点汇编语言就能把《Java语言虚拟机》这本书完全看懂了,否则要是硬着头皮看下去,只会越陷越深。所以看到了吧?学习汇编语言再回头看《Java虚拟机》这样的书,简直就是小儿科了。所以现在要是有人跟我讨论Java虚拟机方面的知识,我都是建议他去看看汇编再来讨论,否则只能硬生生地背概念。
  也许有人说我没有学习过汇编语言照样工作了这么多年了,干嘛非要去学习这个作古的东西呢?说的对,也不对,如果满足于现状,或者每天只是在web开发,那么你完全可以无视这些东西,如果你想在计算机行业有更好的发展,我还是建议你去学习汇编语言。

猜你喜欢

转载自blog.csdn.net/bian_h_f612701198412/article/details/79967934
今日推荐