编译原理 (一) 编译和编译系统的结构

简介: 编译原理 (一) 编译和编译系统的结构

 我们知道计算机设计语言有机器语言、汇编语言和高级语言之分。


 机器语言 则是给计算机看的语言,比如C706 0000 0002. 前边的C706是该机器指令的操作码,表示移动操作(move),后边的0000 0002表示操作数,表示把0002这个数移动到地址0000的位置。 可以发现简直不是人学的东西,全都是数字。


 汇编语言 在机器语言的基础上,添加了助记符,使得代码十分容易让人理解,比如mov x, 2表示把2移入到x表示的这个地址去,相比机器语言十分容易理解。 汇编语言依赖于特定的机器,使得非计算机专业技术人员使用受限制,而且开发效率依旧很低。


 高级语言 高级语言就是我们日常熟悉的C语言,C++,Java, Python等高级语言,x = 2就可以完成赋值操作,他符合人类的表达习惯,不依赖于特定的机器,而且开发效率很高,至今广泛传用。



  高级语言和汇编语言最终都要被翻译成机器语言才能在计算机上运行,汇编语言翻译成机器语言的过程叫做汇编



  高级语言翻译成汇编语言或者机器语言的过程叫做编译, 编译过程中我们把高级语言称作源语言,汇编语言和机器语言称作目标语言


将源语言变成目标语言的过程要经历四个步骤:预处理–> 编译 --> 汇编 --> 链接

 预处理过程由预处理器完成,他把储存在不同文件中的源程序聚合在一起,把成为宏的缩写语句变成原始语句


 编译 由编译器完成该部分工作,工作机制就是上述的过程


 汇编 汇编器完成,用于生成可重定位的机器代码(可重定位 即在内存中存放的位置不是固定不变的)


 链接 由连接器和加载器完成,加载器用于修改可重定位的代码,将修改后的指令和数据放在内存中适当位置,连接器则是将代码与库文件或者其他可重定位目标程序进行连接,生成可执行代码



 编译系统的结构:

编译器的结构分为分析部分(和源语言有关)和综合部分(和目标语言有关)

后期会详细说明这些过程

相关文章
|
存储 程序员 芯片
微机原理与接口技术 8086微处理器系统结构详解
本文主要详解8086微处理器系统结构。主要从以下几个方面进行分析与总结:8086 CPU结构、EU与BIU的结构和功能、8086寄存器结构、8086系统时钟与指令周期、周期概念、8086系统时钟、指令周期、总线周期、8086存储器组织、堆栈的概念、存储器组织与I/O结构、存储体与总线的连接、8086的内外部中断、中断向量表。
2278 0
微机原理与接口技术 8086微处理器系统结构详解
|
安全 Linux Shell
全面对比linux和windows,选择哪个系统比较好
全面对比linux和windows,选择哪个系统比较好
2163 0
|
存储 自然语言处理 算法
【编译原理】LR(1)分析法:C/C++实现
【编译原理】LR(1)分析法:C/C++实现
1474 0
|
7月前
|
传感器 物联网 开发者
FreeMQTT & FreeMQTT plus:物联网通信的强大助力
FreeMQTT 和 FreeMQTT plus 是基于 MQTT 协议的物联网通信解决方案。FreeMQTT 是用 Python 实现的开源 MQTT Server,支持多协议传输、应用分组隔离,易于安装和跨平台运行。FreeMQTT plus 则是分布式集群架构的新型 Broker,具备高可用性、会话同步优化、灵活扩展能力及高效消息路由特性。二者适用于智能家居、工业物联网和智能交通等领域,为开发者提供轻量级、高性能的通信工具,助力构建稳定可靠的物联网系统。
|
运维 负载均衡 安全
介绍一下Docker的优缺点
介绍一下Docker的优缺点
1117 4
|
敏捷开发 安全 测试技术
阿里云云效产品使用合集之如何在甘特图视图中看到负责人信息
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
C语言
C语言进阶教程(传值调用和传址调用的区别)
C语言进阶教程(传值调用和传址调用的区别)
299 0
|
机器学习/深度学习 存储 并行计算
深度学习之适应硬件的神经网络
深度学习的适应硬件的神经网络设计旨在最大限度地利用特定硬件平台的计算和存储能力,提高模型的执行效率和性能。这些硬件包括图形处理单元(GPU)、张量处理单元(TPU)、现场可编程门阵列(FPGA)和专用集成电路(ASIC)。
238 0
|
安全 中间件 编译器
【C/C++ 原子操作】深入浅出:从互斥锁到无锁编程的转变 - 理解C++原子操作和内存模型
【C/C++ 原子操作】深入浅出:从互斥锁到无锁编程的转变 - 理解C++原子操作和内存模型
6490 3