5

在大学里,我参加了计算机体系结构和汇编语言编程的必修课。我发现汇编语言非常耗时且难以掌握。我仍然无法理解为什么要教授汇编语言。我问了我的导师同样的问题,他笑着说你以后会知道的。但我有一种天性,一旦一个问题挑逗我的头脑,我就迫不及待地想得到答案。所以我想问,如果有非常强大、快速和高效的编程语言,为什么我们仍然需要汇编语言,并且最重要的是,这些语言提供了使编程变得容易的各种工具。所以为什么?

4

2 回答 2

12

一个相当好的理由是所有编程语言都是计算机工作方式的抽象。理论上,对于高级语言,抽象意味着程序员永远不必担心计算机的细节。

但是抽象总是有漏洞的,例如大多数(如果不是全部)高级语言不能很好地自动优化 CPU 缓存(例如缓存一致性和错误共享),并且高效的多线程总是很棘手。这意味着如果性能至关重要,程序员可能不得不以不同的方式编写代码。

获得性能的最佳方法是了解机器的工作原理,以便程序员可以进行编译器无法轻松完成的大型架构转换。例如,确保线程以 64 字节的倍数处理数据(以减少缓存行上的错误共享),或者进行结构数组⇔ 数组结构转换。


汇编(在某种程度上是 C)是学习这些性能细节的一种非常好的方法,因为它可以很容易地准确理解计算机在做什么,因为您可以准确控制每一步发生的事情。

(泄漏抽象点也适用于访问特定/自定义硬件组件。)

于 2012-07-04T06:02:01.390 回答
5

关键任务仍然需要机器代码,例如

  • 硬件特定代码,例如设备驱动程序
  • 嵌入式设备,代码大小很重要
  • 性能至关重要的低级代码等。

通常,汇编语言可以混合到更高级别的语言中,例如 C,其中汇编可以内联添加到 C 代码中。

也就是说,即使您将使用高级语言进行编程,掌握底层硬件架构仍然是一个好主意,因为它可以让您深入了解堆栈、堆、指针等是如何工作的。

于 2012-07-04T05:48:17.540 回答