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

标签 assembly low-level

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




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

最佳答案

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

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

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

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

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

关于assembly - 如果我们有提供复杂工具的高级语言,为什么仍然需要汇编语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11323021/

相关文章:

c - 从可利用程序运行时出现 Shellcode Segmentation Fault 错误

assembly - 要学习汇编 - 我应该从 32 位还是 64 位开始?

assembly - 为什么需要内存对齐?

embedded - 树莓派上的 ARM 时钟速度

python - 为什么python是低级的?

java - Permgen 空间增量填充/调整大小。如何微调避免调整其大小

assembly - RISC-V 汇编器正在用 bne + jal 取代 beq 指令

assembly - 为什么 DC.W(定义常量)的数字前不需要 #,而只需要指令?

assembly - BIC指令

assembly - Openvms/Itanium 程序集示例中的 "Hello World"?