当前位置:首页 » 编程软件 » 预编译汇编编译链接

预编译汇编编译链接

发布时间: 2023-06-28 06:17:56

⑴ 简述将源程序编译成可执行程序的过程

一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。其中,编译是主要部分,其中又分为六个部分:词法分析、语法分析、语义分析、中间代码生成、目标代码生成和优化。

预编译:主要处理源代码文件中的以“#”开头的预编译指令。处理规则如下:

1、删除所有的#define,展开所有的宏定义。

2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。

3、处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。

4、删除所有的注释,“//”和“/**/”。

5、保留所有的#pragma 编译器指令,编译器需要用到他们,如:#pragma once 是为了防止有文件被重复引用。

6、添加行号和文件标识,便于编译时编译器产生调试用的行号信息,和编译时产生编译错误或警告是能够显示行号。

(1)预编译汇编编译链接扩展阅读:

编译过程中语法分析器只是完成了对表达式语法层面的分析,语义分析器则对表达式是否有意义进行判断,其分析的语义是静态语义——在编译期能分期的语义,相对应的动态语义是在运行期才能确定的语义。

其中,静态语义通常包括:声明和类型的匹配,类型的转换,那么语义分析就会对这些方面进行检查,例如将一个int型赋值给int*型时,语义分析程序会发现这个类型不匹配,编译器就会报错。

c语言源程序的文件扩展名为

是exe。

从win平台说,C语言源程序文件名的后缀是.c 经过编译后,生成文件的后缀是.s 经过链接(不是连接)后生成文件的后缀是.exe

编译器将源代码转换为二进制分为以下四步: 预处理、编译、汇编、链接。

预处理:预编译动作,比如宏、static成员等都在这个阶段处理。

编译:生成汇编文件,此过程编译器会对源码进行优化

汇编:将汇编文件生成目标文件,其实已经是可执行的了(Unix:.o Win:.obj)链接:将目标文件链接成一个可执行文件(Win:.exe)

(2)预编译汇编编译链接扩展阅读:

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。[1]目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

⑶ 用gcc编译器C语言程序的技巧

方法/步骤
1、编写c代码,并输入以下代码,生成文件hello.c
[root@wahoo
test]#
vim
hello.c
#include
<stdio.h>
#define
DISPLAY
"hello
c!"
int
main(void)
{
printf("%s\n",
DISPLAY
);
return
0;
}
ZZ(说明:ZZ当前文件进行快速保存操作)
2、预编译(Preprocessing)
会对各种预处理指令(#include
#define
#ifdef
等#开始的代码行)进行处理,删除注释和多余的空白字符,生成一份新的代码
[root@wahoo
test]#gcc
-E
hello.c
-o
hello.i
E
参数
通知gcc对目标文件进行预编译,这里是对文件hello.c文件
o
参数
是对命令输出结果进行导入操作,这里是把
gcc
-E
hello.c
操作结果输出到文件hello.i(命名要自定义)中进行保存
这个命令执行完后我们目录下多了一个文件hello.i,你可以查阅一下文件的内容。
3、编译(Compilation)
对代码进行语法、语义分析和错误判断,生成汇编代码文件
[root@wahoo
test]#gcc
-S
hello.i
-o
hello.s
S
参数
通知gcc对目标文件进行编译,这里是对文件hello.i文件
通过这一步我们知道
C语言跟汇编的
关系,至于他们之前是如何进行转换的,大家可以进行更深入的学习与探讨。
此时目录下多了一个hello.s文件,内容如图
4、汇编(Assembly)
把汇编代码转换与计算机可认识的二进制文件,要知道计算机只认识0和1呢
[root@wahoo
test]#gcc
-c
hello.s
-o
hello.o
c
参数
通知gcc对目标文件执行指令转换操作
此步骤我们得到文件hello.o
大家也同样打开文件查看一下,这个文件里面几乎没几个字符大家能看懂,这就对了,但大家可以通过这种方法将其转化为我们可读的形式:
[root@wahoo
test]#readelf
-a
hello.o
5、链接(Linking/Build)
通俗的讲就是把多个*.o文件合并成一个可执行文件,二进制指令文件
[root@wahoo
test]#gcc
hello.o
-o
hello
这里我们就得到了一个可以直接在系统下执行的文件
hello
我们也可以对这个文件进行readelf操作,也可以进行二进制指令转汇编的操作
[root@wahoo
test]#objmp
-d
hello
6、程序运行
[root@wahoo
test]#./hello
hello
c!
7、总结:gcc
编译c程序的主要过程包括
预编译->编译->汇编->连接
四个过程,每个过程都分别进行不同的处理,了解了这其中的一些原理,对c编程的理解大有益处

⑷ c语言里面的编译和链接是怎么回事

C/C++语言的完整编译过程是

一、预编译

处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。

二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。

三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。

⑸ 汇编语言的那个编译链接 的详细过程 每一步骤

16位汇编:安装MASM5.0编译器,假设将编译器MASM5.0文件放在c:\下,在DOS下进入c
:\MASM5.0目录下,输入命令masm,回车,出现"【.ASM】"会提示输入源文件所在文件目录及以.asm为后缀的文件名,回车,出现"【.obj】"会提示输入目标文件名,然后回车直到结束。
然后输入link命令,出现【.obj】会提示输入目标文件,回车,会出现"【.exe】"提示输入可执行文件,回车知道结束。然后输入可执行文件名,就可以运行程序了。

⑹ C语言编译原理

编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。

1、预处理阶段:

主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)

2、汇编阶段:

插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。

3、编译阶段:

将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。

4、链接阶段:

在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。

⑺ C语言 四个过程:预处理,编译,汇编,链接,分别进行了什么过程别度娘。

1.预处理
这个阶段用来处理所有的预处理指令

主要是一些宏替换,头文件导入
2.编译
对预处理后的代码进行翻译工作,得到计算机
所认识的格式编译工作得到的结果文件叫做目标文件,
扩展名是.o(编译得到汇编文件(.s)
->经过汇编后得到.o目标文件)
3.链接
把所有的目标文件和其他必要的文件合并在一起
得到最终的可执行文件

⑻ 源代码是如何运行的

方法和详细的操作步骤如下:

1、第一步,打开任意网站,然后根据需要进行选择,见下图,转到下面的步骤。

热点内容
怎么在微信发文件夹 发布:2025-02-08 10:09:45 浏览:791
cryengine源码 发布:2025-02-08 09:50:58 浏览:393
aardio可以反编译吗 发布:2025-02-08 09:50:53 浏览:483
公司营业执照密码是什么 发布:2025-02-08 09:47:56 浏览:854
体验脚本 发布:2025-02-08 09:46:15 浏览:690
医学生需要什么配置的笔记本 发布:2025-02-08 09:45:34 浏览:771
骚扰电话数据库 发布:2025-02-08 09:45:34 浏览:179
u盘文件加密器 发布:2025-02-08 09:40:35 浏览:769
plc数据存储app 发布:2025-02-08 09:37:17 浏览:708
服务器的峰值高低有什么区别 发布:2025-02-08 09:35:46 浏览:689