学习ASM仍然值得吗?
我对它了解得很少,但是我并没有真正使用它或正确学习它,因为我学习的所有汇编程序工作都可以用诸如C或C ++之类的语言在1/10的时间内完成。那么,我真的应该学习和使用ASM吗?这对我的专业有好处吗?会增加我的机智吗?简而言之,这会让我成为一个更好的程序员吗?
注意:我在说的是FASM或NASM之类的低级汇编,而不是HLA(高级汇编器)。
学习ASM仍然值得吗?
我对它了解得很少,但是我并没有真正使用它或正确学习它,因为我学习的所有汇编程序工作都可以用诸如C或C ++之类的语言在1/10的时间内完成。那么,我真的应该学习和使用ASM吗?这对我的专业有好处吗?会增加我的机智吗?简而言之,这会让我成为一个更好的程序员吗?
注意:我在说的是FASM或NASM之类的低级汇编,而不是HLA(高级汇编器)。
Answers:
我从基普·欧文的书中学到了东西。如果您无视他的(无关的)库的(公正)批评,我可以推荐它作为对语言本身的一个很好的介绍-尽管对于真正有趣的东西,您必须在网络上寻找迷恋者。
我认为了解较低级别的情况很有用。在研究汇编程序时,您将了解有关CPU流水线,分支预测,缓存对齐,SIMD,指令重新排序等的信息。这些知识将帮助您编写更好的高级代码。
此外,传统的观点是,大多数时候不尝试手动优化汇编,而是让编译器担心它。当您看到一些有关编译器产生的扭曲事物的示例时,您将更好地理解为什么传统观点仍然成立。
示例:LFSR使用随身携带的旋转指令快速运行,对于像这样的特定情况,编写汇编程序版本就像发现编译器是否足够聪明来找出它一样容易。有时您只知道编译器不知道的东西。
它还使您对安全问题(写入或执行,堆栈溢出等)有所了解。
仅当您了解每条指令级别发生了什么时,某些并发问题才变得明显。
如果您没有完整的源代码,有时在调试时很有用。
有好奇心的价值。无论如何如何实现虚拟功能?是否曾经尝试在汇编器中编写DirectX或COM程序?大型结构如何返回,调用函数是否为其提供了空间,反之亦然?
还有一些用于图形硬件的特殊汇编语言,尽管着色器语言在几年前已成为高级语言,但任何可以让您以不同方式思考问题的方法都是不错的。
我发现有趣的是,许多人跳来跳去地说,是的,您需要/应该学习汇编。对我来说,问题是您需要知道多少组装?我认为您不必像编程语言一样了解汇编语言,也就是说,我不认为每个人都应该能够以汇编语言编写程序,但是另一方面,您可以阅读并理解其实际含义手段(可能需要比汇编程序更多的体系结构知识)就足够了。
我肯定不能编写汇编程序(即,在汇编程序中编写任何非平凡的代码段),但是我可以阅读它,并且与实际的硬件体系结构知识一起使用,并且所使用的调用约定足以分析性能,并且确定该程序集的源代码是什么C ++代码。
值得从许多不同的范例中学习许多不同的语言。学习Java,C ++,C#和Python并不重要,因为它们都是同一范例的实例。
因为汇编语言是所有语言的根本(很接近词根),所以我不得不说学习汇编是值得的。
再说一次,值得学习一种函数式编程语言,逻辑编程,脚本语言,基于数学的语言。您只有很多时间,因此您必须选择。