编译原理01---绪论

一、什么是编译?

在引入编译的概念之前,我们先来了解以下计算机程序设计语言都有哪些。
1.1 机器语言
什么是机器语言呢?顾名思义,机器语言是可以被计算机直接理解的语言。但是机器语言与人类的表达习相差很多,并且很难记忆、难编写、难阅读还特别容易写错。如下是一条机器语言指令。

C706 0000 0002

1.2 汇编语言
汇编语言在机器语言的基础上引入了助记符号。但是它依赖于特定的机器,这就造成了非计算机专业人员的使用收到了限制,编写的效率依然很低。如下就是一条汇编语言指令

MOV X,2 

1.3 高级语言
高级语言就非常的接近人类的表达习惯了,它类似于数学定义或自然语言的简介形式。并且不依赖与特定的机器,编写效率高。如下是一段高级语言代码。

x = 2

不论是高级语言还是汇编语言,都需要经过编译,转换成机器语言才能够被计算机识别,从而进行一系列的运算。高级语言可以直接转换成机器语言,也可以先转换成汇编语言再转换成机器语言。汇编语言可以直接转换成机器语言。可以根据下图理解
在这里插入图片描述
由此我们可以知道编译是个啥

编译:就是将高级语言翻译成汇编语言或机器语言的过程。
高级语言就代表源语言,而经过翻译得到的汇编语言或机器语言就是我们的目标语言。

1.4 编译器在语言处理系统中的位置
首先我们要了解几个东西哈。

1.4.1 预处理器
预处理器的作用就是将存储在不同文件中的源程序聚合在一起。就比如说在编写C语言程序的时候会引入许多的库文件,这些库文件其实并不存在这个正在编写的C程序中。在编译的时候,这个预处理器就会将C程序中引入的库文件与我们编写的代码整合到一起,形成一个完整的程序,这就是预处理器的一个作用。另一个作用就是把被称为宏的缩写语句转换成原始语句。

1.4.2 可重定位
可重定位就是说某一段代码在内存中存放的起始位置L是不固定的。

1.4.3 加载器
它的作用就是修改可重定位的地址;并且可以将修改后的指令和数据放到内存中的适当位置。

1.4.4 链接器
将多个可重定位的机器代码文件(包括库文件)连接到一起;还可以解决外部内存地址问题
在这里插入图片描述
由上图可见,我们的源程序首先要经过预处理器的相关处理得到经过预处理的源程序,然后这个经过预处理的源程序会经过编译器的处理,得到汇编语言程序,然后汇编语言程序经过汇编器的处理,得到可重定位的机器代码,然后这个可重定位的机器代码会经过链接器/加载器生成目标机器代码。由此可见编译器在这个过程中的作用就是将经过预处理的源程序转换成汇编语言程序

二、编译系统的结构

大家有没有这样的一个疑问,就是我用C语言写了一段程序x = 2,那么它到底是怎样被翻译成汇编语言MOV X,2或机器语言C706 0000 0002的呢?

下面我们来举一个人工英汉翻译的例子
在这里插入图片描述
不写了,,,累了。。。。。。

猜你喜欢

转载自blog.csdn.net/m0_60429030/article/details/127015278