编译和链接【未完待续】

更新:2024-1-28

构建:编译、链接合并到一起的过程

一、预处理Prepressing

你们随便找篇博客、找本书吧,都有。查看.i文件,可以检查宏定义、头文件包含是否正确。

  • 输入:.c (以C语言为例)
  • 输出:.i 
  • gcc指令:gcc -E main.c -o main.i

二、编译Compilation

词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件

1、扫描(词法分析):源代码输入到扫描器,将代码的字符序列分割成一系列的记号(Token),包括关键字、标识符、字面量(数字、字符串etc)、特殊符号(加号、等号etc)。构建初步的符号表、文字表。

2、语法分析(检查表达式是否合法:括号不匹配,表达式缺少操作符etc)

3、语义分析-判断语句是否真的有意义(两个指针做乘法语法上ok,语义上不行)。此时只能做静态语义分析。(静态语义通常包括声明和类型匹配、类型的转换;动态语义:运行期出现的语义相关问题,比如除0)

4、源代码优化:将语法树转换成中间代码(常见的有三地址码、P-代码)。2 + 6写成8;不用的代码直接删除etc。 

5、代码生成:依赖目标机器,将中间代码转换成目标机器代码

6、目标代码优化:eg选择合适的寻址方式、位移代替乘法、删除多余指令等。

  • 输入:.c / .i
  • 输出:.s
  • gcc指令:gcc -S main.c -o main.s  /  gcc -S main.i -o main.s

三、汇编Assembly

将汇编代码转换成机器可以执行的指令。每一条汇编语句几乎都对应一条机器指令。根据汇编指令和机器指令的对照表一一翻译即可。

  • 输入:.c / .s
  • 输出:.o
  • gcc指令:gcc -c main.c -
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值