如果我们有提供复杂工具的高级语言,为什么还需要汇编语言?

Joh*_*ota 5 assembly low-level

在大学,我参加了计算机体系结构和汇编语言程序设计的必修课程.我发现汇编语言非常耗时且很难掌握.我仍然无法理解汇编语言的原因.我向我的导师问了同样的问题,他笑着说你将来会知道.但是我有一种性质,一旦一个问题弄清楚我的想法,我就不能等待这么长时间.所以我想问一下,如果有非常强大,快速和高效的编程语言,为什么我们仍然需要汇编语言,而且这些语言提供了各种各样的工具,使编程变得容易.所以为什么?

huo*_*uon 12

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

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

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


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

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


Stu*_*tLC 5

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

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

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

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