关闭。这个问题是题外话。它目前不接受答案。想改进这个问题?更新问题,使其成为 Stack Overflow 的主题。 11年前关闭。改进这个问题
学习 ASM 还值得吗?
我知道一点,但我并没有真正使用它或正确地学习它,因为我在汇编程序中学习的所有内容都可以用 C 或 C++ 之类的语言在 1/10 时间内完成。那么,我真的应该学习和使用 ASM 吗?它对我有什么专业的好处吗?它会增加我的机智吗?简而言之,它会让我成为一个更好的程序员吗?
注意:我说的是像 FASM 或 NASM 这样的低级汇编,而不是像 HLA(高级汇编器)这样的东西。
我从 Kip Irvine's 本书中学到了。如果您忽略对他(不相关)库的(公平)批评,我可以推荐它作为对语言本身的一个很好的介绍——尽管对于 真正 有趣的东西,你必须在网。
我认为了解较低级别发生的事情很有用。当您研究汇编程序时,您将了解 cpu 流水线、分支预测、缓存对齐、SIMD、指令重新排序等。了解这些将帮助您编写更好的高级代码。
此外,传统观点是大多数时候不要尝试手动优化汇编,而是让编译器担心它。当您看到编译器生成的扭曲事物的一些示例时,您将更好地理解为什么传统观点成立。
示例:LFSR 使用 rotate-with-carry 指令运行得很快,对于像这样的特定情况,编写汇编程序版本就像发现编译器是否足够聪明以找出它一样容易。有时 you just know something 编译器不会。
它还增加了您对安全问题的理解——写入或执行、堆栈溢出等。
某些 concurrency 问题只有在您了解每条指令级别发生的情况时才会变得明显。
如果您没有完整的源代码,有时在调试时会很有用。
有好奇的价值。无论如何,虚函数是如何实现的?曾经尝试用汇编程序编写 DirectX 或 COM 程序吗?大型结构如何返回,调用函数是否为它们提供空间,反之亦然?
然后是用于图形硬件的特殊汇编语言,虽然着色器语言在几年前已经成为高级语言,但任何能让你以不同方式思考问题的东西都是好的。
我觉得有趣的是,这么多人跳起来说是的,你需要/应该学习汇编。对我来说,问题是你需要知道多少组装?我认为您不必像编程语言那样了解汇编,也就是说,我不认为每个人都应该能够用汇编编写程序,但另一方面,能够阅读并理解它的实际含义手段(这可能需要比汇编器更多的架构知识)就足够了。
我肯定不会编写汇编(即在汇编中编写任何重要的代码),但我可以阅读它,并且结合实际硬件架构的知识,以及正在使用的调用约定足以分析性能,并且确定哪一段 C++ 代码是该程序集的来源。
是的 - 为 C 和 C++ 开发人员学习汇编的主要原因是它有助于理解 C 和 C++ 代码背后发生的事情。并不是说您实际上会在汇编中编写代码,但是您将能够查看代码反汇编to assess its efficiency,并且您将了解不同的 C 和 C++ 功能如何更好地工作。
从许多不同的范例中学习许多不同的语言是值得的。学习 Java、C++、C# 和 Python 不算数,因为它们都是同一个范例的实例。
由于汇编是所有语言的根源(嗯,接近于根源),我认为学习汇编是值得的。
再说一次,学习一门函数式编程语言、逻辑编程、脚本语言、基于数学的语言是值得的。你只有这么多时间,所以你必须选择。
了解 ASM 在调试时也很有用,因为有时您所拥有的只是“错误的 ASM 转储”。
取决于您希望达到的编程水平。如果您需要使用调试器,那么可以。如果您需要了解编译器的工作原理,那么可以。任何汇编器/调试器都依赖于 CPU,所以工作量很大,只需检查 x86 系列它的大小和年龄。
你对它有什么用处吗?它会以任何方式帮助您目前正在做或计划做的事情吗?这是你应该问自己的两个问题,这些问题的答案就是你问题的答案。
在更一般的意义上,是的,我认为 asm 非常值得学习(例如 x86 或 arm),它为您服务的好坏取决于您的编程内容以及调试方式。
不定期副业成功案例分享