c++ - 高级和低级编程语言之间的关系

标签 c++ assembly

<分区>

低级和高级编程语言之间的关系如何?例如,汇编语言和 C++ 在不同的层次上工作,但是这些层次之间存在什么样的逻辑?假设我写了一个 Hello World! C++ 程序,我编译并运行它。为了在汇编程序级别提高我的代码效率,我需要关心什么?

最佳答案

你去五金店,你可以找到梁、木板、钉子、螺丝、砖和灰浆以及各种基本的建筑 Material 。这些 Material 的组合可以 build 狗屋、人屋、办公楼、人行道、马路、邮箱等。

C/C++ 是房子、邮箱、仓库。砖 block 、木板和钉子是机器语言。砖头和钉子这两个词是描述 Material 的单个实例并与其具有一对一关系的汇编语言。

当你拿一行高级代码时

a = b + c;

你不能以那种形式运行它,甚至不能真正解释,因为解释器本身是由更小的部分组成的程序。编译器,无论是人工编译还是从其他程序演变而来的程序,都用于解释该行高级代码,为每个变量分配寄存器或内存,并从指令集中和顺序中选择可用指令这些指令创建处理器可以理解的程序,执行相同的功能任务。将这个问题交给 100 个人,你可能会得到 1 到 100 种不同的解决方案,总有不止一种方法可以在处理器理解的指令集中实现与高级程序等效的功能。

理想情况下,汇编语言只是该处理器指令集的人类可读和可写形式,因此我们不必盯着机器代码的位和字节。汇编器是一个简单得多的程序,它将汇编语言助记符转换为机器代码,理想情况下是将一个 asm 指令转换为一个机器指令,但汇编器可能会添加其他功能以使手工编程(甚至编译器生成的 asm)的任务更容易人类。

这些级别之间的“逻辑”是其他称为编译器、汇编器和链接器的程序,它们将高级程序“转换”为低级的功能等价物。处理器实际上只能执行低级别。高级源代码只是一团数据,对于处理器来说与书籍、网页、音频文件、视频等没有什么不同,如果没有能够解析该数据的其母语程序,它就无法理解它。

关于c++ - 高级和低级编程语言之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003700/

相关文章:

c++ - 如果构造函数抛出异常,那么拥有该类的全局对象是否有意义?

c++ - 如何在 C++ 中对映射中的值进行排序

c - 如何处理这个: selected processor does not support `qadd16 r1,r1,r0'

assembly - 进位标志和减法问题

optimization - 为什么这段代码是由 avr-gcc 生成的,它是如何工作的?

assembly - 汇编语言的自动代码去重?

c++ - 为什么要为每个 .cpp 文件创建 .o 文件

c++ - C++ 标准中的何处定义了对不合格 *mem-initializer-id* 的查找?

c++ - 字符数组末尾的额外字符 (char *Result = new char) 8OI

c - 16 位 C 编译器是如何工作的?