我有一个问题想问所有热衷于低级黑客技术的人。我在一篇博客中看到了这句话。我认为源并不重要(如果你真的在意,它是Haack),因为这似乎是一个常见的说法。
例如,许多现代三维游戏都使用C++和汇编语言编写其高性能核心引擎。
至于汇编代码-是因为您不希望编译器发出额外的指令或使用过多的字节,还是因为您在使用更好的算法,这些算法无法用C语言表达(或无法表达而不被编译器干扰)?
我完全理解了解低级别的东西的重要性。我只是想了解为什么在了解了它之后要在汇编中编程。
我有一个问题想问所有热衷于低级黑客技术的人。我在一篇博客中看到了这句话。我认为源并不重要(如果你真的在意,它是Haack),因为这似乎是一个常见的说法。
例如,许多现代三维游戏都使用C++和汇编语言编写其高性能核心引擎。
至于汇编代码-是因为您不希望编译器发出额外的指令或使用过多的字节,还是因为您在使用更好的算法,这些算法无法用C语言表达(或无法表达而不被编译器干扰)?
我完全理解了解低级别的东西的重要性。我只是想了解为什么在了解了它之后要在汇编中编程。
缺陷往往以每行(语句、代码点等)为单位;尽管对于大多数问题来说,汇编语言会比高级语言使用更多的行,但有时候它是最佳的(最简洁、最少的行)解决方案。这些情况大多涉及到常见的情况,例如驱动程序和嵌入式系统中的位掩码。
如果你参与了所有的Y2K修复工作,如果你懂汇编语言,你可以赚很多钱。现在还有很多遗留代码是用汇编语言编写的,这些代码偶尔需要维护。
另一个原因可能是当现有的编译器对于某个架构来说并不够好,并且程序中所需的代码量并不长或复杂,以至于程序员不会迷失在其中。尝试为嵌入式系统编程微控制器,通常汇编语言会更容易。
我认为很多游戏开发者会对这个信息感到惊讶。
我所知道的大多数游戏尽可能地少使用汇编语言。在某些情况下根本不使用,最坏的情况下只有一两个循环或函数。
这个引用过于概括了,并不像十年前那么真实。
但是,嘿,事实并不应该阻碍真正黑客的汇编语言之旅。 ;)
如果你正在编程一款只有128字节RAM和4K程序存储器的低端8位微控制器,你几乎没有选择只能使用汇编语言。然而,当你需要在更强大的微控制器上执行某个确切时间的动作时,汇编语言就非常有用了,因为你可以计算指令的数量并测量代码使用的时钟周期。
goto
允许在函数内进行非结构化跳转,包括在同一函数中的if()
或循环块中。例如:https://godbolt.org/z/IINHTg。还可以使用Duff's Device,将switch/case用于do{}while()
循环,以表达跳转到未展开的循环中。但是,如果你降到这个混乱的层次,编写汇编代码可能会更清晰明了。 - Peter Cordes