7

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

4

4 回答 4

11

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

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

我建议您阅读 Michael Abrash 的图形编程黑皮书——它有很多关于组装和优化的内容以及来自现实生活的精彩故事。

是否还有另一种更广泛使用的低级语言,例如汇编?

汇编程序可能是最低级别的应用程序编程语言。唯一的其他手段是手工编写二进制代码,但二进制操作码很难被称为“语言”。

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

于 2012-07-23T19:24:39.270 回答
8

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

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

于 2012-07-23T19:22:15.053 回答
3

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

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

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

于 2012-07-23T19:25:15.963 回答
3

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

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

于 2012-07-23T19:26:33.210 回答