学习ASM仍然值得吗?
我有一点了解,但我没有真正使用过或正确学习它,因为我用C或C++之类的语言可以在十分之一的时间内完成汇编器所能实现的所有功能。那么,我真的需要学习和使用ASM吗?它会对我的职业发展有所帮助吗?它会提高我的资源利用率吗?简单来说,它会让我成为更好的程序员吗?
注意:我谈论的是像FASM或NASM这样的低级汇编,而不是像HLA(高级汇编语言)这样的东西。
学习ASM仍然值得吗?
我有一点了解,但我没有真正使用过或正确学习它,因为我用C或C++之类的语言可以在十分之一的时间内完成汇编器所能实现的所有功能。那么,我真的需要学习和使用ASM吗?它会对我的职业发展有所帮助吗?它会提高我的资源利用率吗?简单来说,它会让我成为更好的程序员吗?
注意:我谈论的是像FASM或NASM这样的低级汇编,而不是像HLA(高级汇编语言)这样的东西。
我从Kip Irvine的书中学到了一些东西。如果你忽略他(不相关的)库的(公正的)批评,我可以推荐它作为语言本身的良好入门--尽管对于真正有趣的东西,你必须在网络上寻找痴迷者。
我认为理解底层发生的事情很有用。当您研究汇编语言时,您将了解CPU流水线,分支预测,缓存对齐,SIMD,指令重新排序等内容。了解这些知识将有助于您编写更好的高级代码。
此外,传统智慧是大多数情况下不要尝试手动优化汇编语言,而是让编译器来操心。当您看到编译器生成的扭曲示例时,您将更好地理解为什么传统智慧如此重要。
例如:LFSR在使用带进位旋转指令时运行速度很快,对于这种特定情况,编写汇编版本与发现编译器是否聪明到足以解决问题一样容易。有时候你知道某些东西,而编译器却不知道。
它还增加了您对安全问题的理解--写入或执行,堆栈溢出等。
有些并发问题只有在您了解每个指令级别上发生了什么时才会变得明显。
有时在调试时,如果没有完整的源代码,这可能很有用。我认为很有趣的是许多人都会说是的,你需要或应该学习汇编语言。对我来说,问题是 你需要知道多少汇编语言? 我不认为你必须像编程语言一样了解汇编语言,也就是说,我不相信每个人都应该能够用汇编语言编写程序,但另一方面,能够阅读和理解其实际意义(这可能需要更多关于体系结构的知识而非汇编器)已经足够了。
我肯定不能编写汇编语言(即在汇编语言中编写任何非平凡的代码),但我可以阅读它,并且结合实际硬件架构的知识和正在使用的调用约定,足以分析性能并确定哪些C++代码段是汇编代码的来源。
是的 - 学习汇编语言对于C和C++开发人员的主要原因在于它有助于理解C和C++代码背后的运行机制。这并不意味着你实际上会用汇编语言来编写代码,但你将能够查看代码的反汇编以评估其效率,并且你将更好地理解不同的C和C++功能是如何工作的。
学习许多不同语言及其所属的不同范例是值得的。学习Java、C++、C#和Python等语言并不能算作是学习不同范例,因为它们都属于相同的范例。
由于汇编语言位于所有语言的根基(或者说靠近根基),因此我认为学习汇编语言是值得的。
然而,学习一种函数式编程语言、逻辑编程、脚本语言以及数学相关的语言也是值得的。由于时间有限,你必须进行选择。
了解汇编语言对于调试也很有用,因为有时你只有“错误的汇编转储”。
取决于您希望达到哪个编程水平。 如果您需要使用调试器,则是的。 如果您需要了解编译器的工作原理,则是的。 任何汇编器/调试器都与CPU有关,因此有很多工作要做,只需检查x86系列的规模和历史就知道了。