汇编语言很重要。高级语言作为入门,可以降低学习的门槛,并让学习者很快的做出东西出来,提高编程的信心。如果作为一个资深的程序员,学习汇编是不可缺少的,我这里说的汇编可不仅仅是8086汇编那么简单,还应该包括各个平台上的汇编语言。学习汇编语言的好处是让你了解你的高级语言是怎么运行的。对于普通的开发者而言,可能会觉得我不必关心我的代码在机器层面上是怎么运行的,只要代码正确就可以了,但实际上这样的做法并不可靠。原因有:1、编译器不可靠。2、高级语言有很多边界(也就是所谓的坑)。3、硬件未必可靠。因为编译器是人做的,高级语言是人设计的,硬件也是人做的,这些都完全正确是不可能的。编译器不管是MSVC还是GCC,都是有bug的。如果遇到编译器bug该怎么办?当然是要用汇编去确认到底是不是编译器的问题了。我自己就曾经遇到过编译器对某些特别复杂的宏展开出错,运行结果很古怪,这种情况下,只有汇编能定位问题。初学者很难碰到这些问题,但如果代码写多了,遇到点编译器问题或者硬件问题是很常见的。至于各种语言的“坑”,也只有汇编才能解释。比如著名的:int i = 3;
int a;a = i++ + i++ + i++;不同编译平台下结果是不同的,但为什么不同?必须通过反汇编才能看到,如果不懂汇编,那么对于这种问题只能知道“我不能这样写”,而无法理解“为什么不能这样写”。再比如,__cdecl和__stdcall究竟是什么区别,书上一般说是传参规则不同,好一点的会讲一下具体是怎么不同,但如果不懂汇编,不去反编译看一下,很难理解具体是怎么样的不同。高级语言告诉你计算机的世界是什么样的,汇编语言告诉你计算机世界为什么是这样的。