App*_*ker 85 assembly programming-languages nasm
学习ASM还值得吗?
我知道一点,但我还没有真正使用它或者正确地学习它,因为我在汇编程序中学到的一切都可以用1/10的时间用C或C++这样的语言来完成.那么,我应该真正学习和使用ASM吗?这对我有什么好的专业吗?它会增加我的机智吗?总之,它会让我成为更好的程序员吗?
注意:我说的是像FASM或NASM这样的低级程序集,而不是像HLA(高级汇编程序)这样的程序.
spr*_*aff 99
我从Kip Irvine的书中学到了很多东西.如果你忽略对他(无关)图书馆的(公平)批评,我可以推荐它作为语言本身的一个很好的介绍 - 虽然对于真正有趣的东西你必须在网上搜寻迷恋.
我认为理解较低层次发生的事情是有用的.在研究汇编程序时,您将学习cpu流水线,分支预测,缓存对齐,SIMD,指令重新排序等.了解这些将有助于您编写更好的高级代码.
此外,传统观点是不要试图在大多数时间手动优化装配,而是让编译器担心它.当你看到编译器产生的扭曲事物的一些例子时,你将更好地理解为什么传统智慧成立.
示例:LFSR使用rotate-with-carry指令快速运行,对于这样的特定情况,编写汇编程序版本就像发现编译器是否足够聪明以便弄清楚它一样容易.有时您只知道编译器没有的东西.
它还可以增加您对安全问题的理解 - 写入或执行,堆栈溢出等.
当您意识到每个指令级别发生的情况时,一些并发问题才会变得明显.
如果您没有完整的源代码,有时在调试时很有用.
有好奇心的价值.如何实现虚拟功能?曾经尝试在汇编程序中编写DirectX或COM程序吗?如何返回大型结构,调用函数是否为它们提供了空间,反之亦然?
然后有图形硬件的特殊汇编语言,虽然几年前着色器语言很高级,任何让你以不同的方式思考问题的东西都是好的.
Dav*_*eas 49
我觉得有趣的是,很多人都会说是的,你需要/应该学习装配.对我来说,问题是你需要知道多少装配?我不认为你必须像编程语言一样知道汇编,也就是说我不相信每个人都应该能够在汇编中编写程序,但另一方面,能够阅读它并理解它实际上是什么意味着(可能需要更多的架构知识而不是汇编程序)就足够了.
我肯定不能编写程序集(即在程序集中编写任何非常重要的代码段),但我可以阅读它,并且与实际硬件体系结构的知识一起,以及正在使用的调用约定足以分析性能,以及确定哪个C++代码是该程序集的源代码.
Dav*_*men 22
从许多不同的范例中学习许多不同的语言是值得的.学习Java,C++,C#和Python不算数,因为它们都是相同范例的实例.
由于汇编是在所有语言的根(好,靠近根),我有人说,学习汇编是值得的.
再说一次,学习函数式编程语言,逻辑编程,脚本语言,基于数学的语言是值得的.你只有这么多时间,所以你必须挑选.