Programming languages 什么样的项目(除了明显的操作系统之外)使用汇编语言?

Programming languages 什么样的项目(除了明显的操作系统之外)使用汇编语言?,programming-languages,assembly,x86,Programming Languages,Assembly,X86,看起来,现在除了开发设备驱动程序或操作系统内核的核心等,没有人使用汇编。有人知道汇编目前正在用于其他用途吗 我指的是PC风格和更大的硬件,而不是带有微小处理器的嵌入式设备。我相信Folding@Home并行计算项目使用优化的汇编代码实现最高速度* *注意:这并不意味着汇编总是比C/C++快。显然,编译器后端和相关技术(如动态重新编译CPU模拟器)需要汇编编程 汇编语言编程也经常用于视频游戏编程,以利用当前编译器尚未很好支持的新CPU功能。然而,这是一种罕见的,这些天,特别是因为在个人电脑上,有这

看起来,现在除了开发设备驱动程序或操作系统内核的核心等,没有人使用汇编。有人知道汇编目前正在用于其他用途吗


我指的是PC风格和更大的硬件,而不是带有微小处理器的嵌入式设备。

我相信Folding@Home并行计算项目使用优化的汇编代码实现最高速度*


*注意:这并不意味着汇编总是比C/C++快。

显然,编译器后端和相关技术(如动态重新编译CPU模拟器)需要汇编编程

汇编语言编程也经常用于视频游戏编程,以利用当前编译器尚未很好支持的新CPU功能。然而,这是一种罕见的,这些天,特别是因为在个人电脑上,有这么多不同的CPU的支持。不过,我希望这在具有统一硬件的控制台上更为常见


编辑:现在游戏的大部分计算都在GPU中完成。仅仅使用OpenGL或DirectX并不总是能够最大限度地利用这些计算资源,这些处理器的供应商提供了大量的工具,可以从硬件中挤出更多的资源。尽管Cuda或OpenCL是众所周知的术语,但它们在GPU硬件上仍处于相对较高的抽象级别,填补了与典型(冯·诺依曼)CPU上的C非常相似的角色。看看这些产品的应用程序,你会发现许多优化使用GPU计算资源的方法,在每个抽象层次上都是如此。

我知道汇编用于大量的游戏代码。例如,像素着色器的指令预算非常紧张;为了得到你想要的效果,你几乎必须编码到最底层。

有人用汇编来实现这一点。

我最后一次遇到汇编是在我破解Quake I源代码的时候。所有的数学库(尤其是点积的所有库)都是由John Carmack用MASM编写的。这种东西是浮点密集型的,在当时,C在浮点操作方面不如手工制作的ASM好。此外,由于计算机的CPU限制更大,而且由于地震使用CPU进行渲染,所以每一个操作都很重要,所以ASM工作得最好。

< P>我认为汇编程序使用的最突出的程序是引导加载程序。

< P>,作为现代的C++,使用内联汇编来执行低级性能关键位。
编辑:@TokenMacGuy正确地指出,“性能”在这里是一个错误的词。Boost使用汇编语言来完成标准C++中不能完成的事情,例如原子(和编译器内部的某些原因不可用)。

< P>我在IBM的370汇编程序中写回了一天,用于一个大的应用程序(供应商销售的产品,大公司使用),从操作系统中的钩子中收集信息。然而,我只是在汇编程序中进行简单的jane编程:屏幕、报告等。它运行速度惊人,但完全在汇编程序中。我敢肯定,它仍然在运行,今天的售价远远高于Windows和Linux平台的典型软件。

根据Knuth的说法,他正在研究算法的效率。他在书中提到,没有比用汇编语言编写更好的方法来研究算法的工作原理。

有时某些功能无法用高级语言实现,而使用内联汇编。例如,C++库QT中有一些内联汇编;我相信它是用于对象内省系统的一部分

此外,glibc(gcc的C库)使用汇编进行优化。IIRC是一种基于软件的浮点数学实现,它有大量用汇编语言编写的数据块


然而,学习汇编的主要原因之一是调试。有几次,我陷入了不了解汇编可能会阻止我调试一个特别棘手的问题的境地。

如果您花大量时间查看C/C++源代码的汇编输出,您会很快注意到,大多数优秀的优化编译器都比优秀的汇编程序员做得更好。关于何时内联函数、如何处理循环、增量后与增量前(现在许多编译器决定如何处理)等方面的决策。至少在正常情况下,如果编译器拥有一个开发它的大型社区,并且管理地址和定义的能力比你强得多,那么祝你好运

即使是设备驱动程序和操作系统内核,通常也不会使用大量汇编语言编写。实时程序的性能关键小部分是在今天的应用程序中可以找到汇编的地方


当你开始谈论RISC汇编时,情况会变得更糟。RISC汇编往往对优化指令(如分支和交换)以及数十个通用寄存器非常有效。大多数人并不比优化编译器更聪明。那些正在编写优化编译器的人。

在C语言中,在基础级别,很容易看到一组指令是如何变成汇编程序的(如果您了解底层体系结构的话)。但有时,汇编程序无法被打败。请注意,可以像编写蹩脚的C代码一样轻松地编写蹩脚、低效的汇编代码。而且汇编程序的可维护性要差得多。而且它不能随身携带


这完全取决于所使用的C编译器的质量。有些人做得比其他人好。大多数编译器允许您查看它们生成的汇编代码。如果您认为您可以做得更好,并且代码段很关键,那么就这样做。否则,请避免。如果有一个像样的编译器,精心编制的C可以非常接近于金属。

实用程序函数的级别越高,l