什么样的项目(除了明显的OS的东西)使用汇编语言?(What kind of projects (b

2019-07-29 00:29发布

貌似,没有人使用组装时下较其他开发设备驱动程序或操作系统内核等的核心任何人目前正在使用其他的东西吧知识呢?

我的意思是PC风格和更​​大的硬件,以极小的微小的处理器没有嵌入的东西。

Answer 1:

升压 ,作为现代C ++,因为它是使用嵌入式组件,其用于像低电平性能关键位原子共享计数器 。

编辑:作为@TokenMacGuy正确地指出,“业绩”在这里是错误的单词。 升压用的东西不能在标准C来实现++如原子学汇编语言(和编译器本征不适用于某些原因)。



Answer 2:

更多或更少明显,需要编译器后端及相关技术,如动态重新编译CPU模拟器汇编编程。

汇编语言程序设计也使用了一些频率为视频游戏编程,以充分利用尚未深受当前编译器支持新的CPU功能。 然而,这是一种罕见的,这些天以来,特别是在PC上的,有这么多不同的CPU的支持。 我希望这是与统一的硬件游戏机位多见,虽然。

编辑:这些天游戏做他们最计算的GPU。 最大限度地利用这些计算资源并不总是能够仅仅使用OpenGL或DirectX,并为这些处理器的供应商提供的工具主机挤压更有效地利用硬件。 虽然Cuda的或OpenCL的是众所周知的术语,但仍处于较高水平的抽象在GPU的硬件,在一个角色,这是非常类似于C的典型(冯 - 诺依曼)CPU的作用填充。 一看开发者 页面这些产品,你会发现几十种最优地使用GPU计算资源,并在抽象的每个层面。



Answer 3:

我相信,Folding @ Home的并行计算项目采用优化的最大速度汇编代码。*

*注:这并不意味着组件总是快于C / C ++。



Answer 4:

从经验上讲,测试和验证新的处理器设计时,它的大量使用。 该指令集有使用代码编译器不一定会产生被强调。 而不是可能会或可能不会编译为一个要检查一些指令高级语言编写,很容易手工编写的组件。



Answer 5:

只是作为一个轶事: 过山车大亨通过克里斯索耶(完全写入(或几乎)在x86汇编维基参考 )。



Answer 6:

有人用汇编此代码高尔夫改变号码的话 。



Answer 7:

我碰到汇编来上一次是当我用破解雷神之锤我的源代码。 所有的数学库(点产品,特别是任何东西)是由约翰·卡马克写在MASM。 这东西是浮点密集型,并且在时间C明显不如对浮点运算的熟练手工制作ASM。 此外,由于电脑是远远CPU的限制,因为地震所使用的CPU进行渲染,每一个操作要紧,所以ASM效果最好。



Answer 8:

如果你花了很多时间看你的C / C ++源代码的汇编输出,你很快就会注意到,大多数好的优化编译器做出更好的组装甚至比组装好的程序员。 就当内联函数决定,如何处理循环,后与预增量(其中许多编译器决定现在该怎么处理你)等。祝您好运智胜,有一个庞大的社区发展,并更好的能力编译至少管理地址和定义比你大,在正常情况下。

即使是设备驱动程序和操作系统内核通常不使用大量的组件编写的。 实时节目的小性能的关键部分是,你会发现装配在今天的应用程序。

它会变得当你开始谈论RISC组件,其往往有像分支机构和几十个通用寄存器一起交流最优化指令赫然有效更糟。 大多数人并不比一个优化编译器更聪明。 这些谁是一般写优化编译器。



Answer 9:

在C语言中,在基本层面上,这是很容易看到一组指令是如何成为汇编(如果你了解底层架构)。 但有时,汇编程序不能被打败。 需要注意的是,能够容易地作为写蹩脚,低效的汇编代码,因为它是写蹩脚C代码。 和汇编是这样少维护。 它是不可移植的任何地方。

而这一切都取决于你所使用的C编译器的质量。 有些人比别人做得更好。 大多数编译器让你看到它们产生的汇编代码。 如果你认为你可以做的更好,代码段是至关重要的,做到这一点。 否则,避免它。 精心设计的C可非常接近金属,给出一个像样的编译器。



Answer 10:

实用功能的高级语言,没想到支持。 一个老例子是,当我试图得到一些C和Unix的按照Fortran的RSX-11M工作时提供大乐事。 我想通过周围格式化字符串,并使用更简单的空调风格。 该printf()的需要做一些投像操作。 在Fortran语言没有这个概念,所以ICAST()和RCAST()是用汇编语言编写。 实现其他功能是move()和克隆()。 这些都不是做了这么多的效率,因为他们的Fortran的心态外部延伸的概念。



Answer 11:

我知道组件用于游戏非常沉重的代码。 例如,像素着色器有一个非常严格的指令预算; 得到你想要的效果,你几乎必须按下码的金属。



Answer 12:

我认为,在使用汇编最突出的程序是引导加载程序。



Answer 13:

我在当天写了IBM 370汇编回来,对于收集来自操作系统钩子信息的大型应用程序(供应商销售的产品,大公司使用)。 不过,我只是做素雅编程:屏幕,报告等,汇编。 它跑快得惊人,但完全汇编。 我敢肯定,它仍在运行和销售今天的价格远高于典型的软件的Windows和Linux平台。



Answer 14:

根据高德纳,学习算法的效率。 他提到在他的书有没有更好的方法来研究一个算法是如何工作的比组装的来信。



Answer 15:

有时候,某些功能不可用高级语言实现的,而内联汇编来代替。 有一些内联组件在C ++库Qt中,例如; 我相信这是用于对象自省系统的一部分。

此外,glibc的(C库对于GCC)使用组件进行优化。 IIRC基于软件的浮点运算实现一个具有汇编语言编写的显著块。

其中一个主要的原因,学习大会,但是,调试。 有几次,我已经得到了我自己到哪里,不知道大会将阻止我调试一个特别棘手的问题的情况。



Answer 16:

一个速率决定的代码几乎在每一个语言(不管是需要动态内存管理后)是一种用于运行时(-library)移动存储的程序。 移动(),memcpy的等,以及像搜索一个字节(和strchr)原语等

这些经常用汇编写的太多,有特殊专用代码才能利用对齐。



文章来源: What kind of projects (besides the obvious OS stuff) use assembly language?