学习汇编语言是否值得?

学习ASM还是值得的吗?

我知道一点,但是我没有真正使用它,或者没有正确地学习它,因为我在汇编程序中学习的所有东西都可以在十分之一的时间用C或C ++等语言来完成。 那么,我真的应该学习和使用ASM吗? 它会对我有什么好的专业吗? 它会增加我的机智吗? 总之,它会让我成为一个更好的程序员吗?

注意:我正在谈论像FASMNASM这样的低级汇编,而不是像HLA (高级汇编)那样的东西。

我从基尔·欧文的书中学到了东西。 如果你忽视他(不相关的)图书馆的(公正的)批评,我可以推荐它作为对语言本身的一个很好的介绍 – 尽pipe对于真正有趣的东西你必须在网上搜寻迷恋。

我认为了解底层会发生什么是有用的。 在研究汇编程序时,您将了解到cpustream水线,分支预测,高速cachingalignment,SIMD,指令重新sorting等。 这些知识将帮助您编写更好的高级代码。

而且,传统的观点是大多数时候不尝试手动优化程序集,而是让编译器担心。 当你看到一些编译器产生的扭曲事件的例子时,你会更好地理解为什么传统的观点是成立的。

例如:LFSR运行速度很快,带有rotate-with-carry指令,对于这样的特定情况,编写汇编程序版本就像发现编译器是否足够聪明来解决这个问题一样简单。 有时你只知道编译器没有的东西 。

它还增加了您对安全问题的理解 – 写或执行,堆栈超载等。

有些并发问题只有在了解每个指令级别发生的情况时才会显现出来。

如果您没有完整的源代码,debugging有时可能会有用。

有好奇的价值。 虚拟function是如何实现的呢? 曾经尝试在汇编程序中编写DirectX或COM程序? 大型结构如何返回,调用函数为它们提供了一个空间,反之亦然?

然后在graphics硬件方面有特殊的汇编语言,虽然几年前着色器语言已经达到了高水平,但是让你以不同的方式思考问题的任何东西都是很好的。

我觉得有趣的是,有那么多人跳起来说是的,你需要/应该学习大会。 对我来说问题是你需要知道多less程序集? 我不认为你必须像编程语言那样知道程序集,也就是说,我不相信每个人都应该能够编写一个程序集,但另一方面,能够阅读它并理解它究竟是什么意味着(可能需要比汇编更多的架构知识)就足够了。

我肯定不能汇编(即汇编中编写任何不重要的代码片段),但是我可以读它,并且知道实际硬件体系结构以及正在使用的调用约定足以分析性能,确定哪一部分C ++代码是该程序集的来源。

是的 – 为C和C ++开发人员学习汇编的主要原因是帮助理解C和C ++代码背后发生的事情。 这并不是说你实际上会在程序集中编写代码,但是你可以看看代码反汇编以评估它的效率,并且你将会理解不同的C和C ++特性如何更好地工作。

从许多不同的范例中学习许多不同的语言是值得的。 学习Java,C ++,C#和Python不算数,因为它们都是相同范例的实例。

由于程序集是所有语言的根源(靠近根源),所以我认为学习程序集是值得的。

再次,值得学习function性编程语言,逻辑编程,脚本语言,基于math的语言。 你只有很多时间,所以你必须挑选。

你打算做什么用途 ? 它会以什么方式帮助你在你目前做什么或计划做什么? 这些是你应该问自己的两个问题,答案就是你的问题的答案。

从更一般的意义上来说,对于我来说,我认为非常值得学习asm(比如x86或者arm),它的效能取决于你编程的方式和debugging方式。

取决于您希望达到的编程级别。 如果你需要使用debugging器,然后是的。 如果你需要知道编译器如何工作,那么是的。 任何汇编程序/debugging程序都依赖于CPU,所以有很多工作,只要检查一下x86系列有多大。

了解ASM在debugging时也很有用,因为有时候所有的都是“ASM转储的错误”。