汇编是唯一的低级编程语言,如果不是,它是最广泛使用的吗?

Posted

技术标签:

【中文标题】汇编是唯一的低级编程语言,如果不是,它是最广泛使用的吗?【英文标题】:Is assembly the only low level programming language, and if not is it the most widely used? 【发布时间】:2012-07-22 01:33:33 【问题描述】:

我最近开始学习汇编,当我浏览互联网时,我看到越来越多的人说汇编不是没用的,但也不值得花时间用一种需要这么长时间的语言来编程与高级语言相比的努力。高级语言程序和低级语言程序之间的效率现在真的不够引人注目吗?还有另一种像汇编这样使用更广泛的低级语言吗?

【问题讨论】:

您提出的问题的一部分要求更多的是一种观点而不是一个确凿的事实。额外的速度(人们一直说编译器非常好,几十年来都无法获得额外的速度,这仍然不是真的)是否值得你花额外的时间,这取决于。流行的观点是,你必须尽可能地马虎,并证明“摩尔定律将使其在下个十年快速发展”。 要击败当前的编译器真的非常非常困难。你也可以问问自己,你是想让我花很多时间(每小时 100 美元)来优化程序,还是想把你的 100 美元花在更多的 RAM 和额外的 CPU 上?硬件很便宜,好的程序员很贵。 @BoPersson 你每小时赚 100 美元?无论如何,这种推理只适用于您只打算自己使用的软件。否则 100 万人将不得不花费 100 美元购买更多的内存只购买竞争对手的软件而不是你的软件。 @Harold - 我为我工作的公司花费 100 美元/小时(不幸的是,不仅仅是薪水)。我曾经在 1980 年代使用汇编程序进行编程,当时一台 PC 需要 6 个月的工资并且无法升级。如果竞争对手现在用汇编来编写他的程序,那他会多花几年时间,而且在那段时间里他不会卖任何东西。当他完成后,我可以将我的程序重新编译为 64 位,而他必须重新开始。 @BoPersson 很确定,在汇编中编写整个程序只是愚蠢 【参考方案1】:

是高级语言程序和低级语言程序之间的效率吗? 一级真的不够引人注意 现在

通常,编译器生成的程序集比开发人员编写的要好得多。有些开发人员可以击败编译器。但是由于编写低级代码需要更多地关注细节并且更难编写和维护,因此通常只有一小部分特定的代码会在汇编中实现以提高效率。差异可能很明显。但如果开发人员进行错误优化,也可能不会引起注意。

我建议您阅读 Michael Abrash's Graphics Programming Black Book — 它包含很多关于组装和优化的内容以及来自现实生活的精彩故事。

还有像汇编这样使用更广泛的低级语言吗?

Assembler 可能是最低级别的应用程序 编程语言。唯一的其他办法是手工编写二进制代码,但二进制操作码几乎不能称为“语言”。

但是,编程超越了软件。硬件也需要编程。有硬件描述语言 (HDL) 可用于对硬件进行编程(即您可以创建自己的 CPU)。最流行的 HDL 语言是Verilog 和VHDL。

【讨论】:

@kjh:不客气。我刚刚注意到亚马逊上这本书的价格荒谬。它也可以在线免费获得,在这里 - gamedev.net/page/resources/_/technical/…【参考方案2】:

在更简单的时代编写汇编是合适的。回到 C 编译器中的代码生成器还不是很智能的时候,预测机器代码的执行时间很简单。

这一切都结束了,人类既无法击败现代代码生成器内置的智能,也无法击败它对细节的不懈关注。插入缓存预取时需要准确了解的详细信息,以便数据在正确的时间可用。以及重新排序指令如何恰到好处地为您提供最佳的超级可扩展性。并恰到好处地插入 nop,使跳跃目标对齐。以及如何机械地展开循环。以及如何利用 SIMD 提供的自动并行化。等等。并且不只是一次这样做,而是随着代码的变化一遍又一遍地这样做。

【讨论】:

【参考方案3】:

嗯,实际上,“组装”更像是不同品种的集合。它取决于您正在编程的架构。例如,x86 的汇编可能(并且将会)与 ARM、MIPS 或您能想到的任何架构的汇编有很大不同。这是因为汇编是处理器运行的二进制代码的一对一翻译。由于不同的架构有不同的指令集,它们的汇编语言也不同。

所以说真的,汇编是不编写纯二进制代码的最低要求。但是,它不是一种特定的语言,而是一组语言。因此,例如,如果您谈论的是 x86 汇编,并将其与另一种同等低级别的语言进行比较,您会发现其他语言也可能是汇编的某种变体。话又说回来,它适用于另一种架构,所以它也不是很有用。

【讨论】:

【参考方案4】:

高级语言的编译器每天都变得越来越聪明。在过去,汇编程序技巧可以大大提高性能。如今,编译器自己实现了很多这些技巧。

示例包括:移位而不是除法、在跳转表中为 switch/case 操作程序计数器、内联函数(如果它们只使用一次)等。

仍有优化的空间,但性能增益将非常低,因此最好使用更高级别的语言并实现可维护性。

【讨论】:

以上是关于汇编是唯一的低级编程语言,如果不是,它是最广泛使用的吗?的主要内容,如果未能解决你的问题,请参考以下文章

编程语言分类之我见

c语言与汇编语言、c++语言等有啥不同呢?

哪些编程语言不被视为高级语言? [关闭]

请问大家:C语言和C51有啥区别?

汇编语言基础知识

汇编语言初学第一章