本文概述

什么是汇编?

编译是将源代码转换为目标代码的过程。这是在编译器的帮助下完成的。编译器检查源代码中的语法或结构错误,如果源代码无错误,则编译器将生成目标代码。

7e266b04a4ec6e81d190edf3c642c4ed.png

c编译过程将作为输入的源代码转换为目标代码或机器代码。编译过程可以分为四个步骤,即预处理,编译,组装和链接。

预处理器将源代码作为输入,并从源代码中删除所有注释。预处理器采用预处理器指令并对其进行解释。例如,如果,该指令在程序中可用,则预处理器将解释该指令,并将该指令替换为“ stdio.h”文件的内容。

以下是我们的程序在转换为可执行形式之前所经过的阶段:

预处理器

编译器

组装工

链接

ba04cd5c55f49c71d6dff731dd220894.png

预处理器

源代码是在文本编辑器中编写的代码,并且源文件的扩展名为“ .c”。该源代码首先传递给预处理器,然后预处理器扩展该代码。扩展代码后,将扩展的代码传递给编译器。

编译器

由预处理器扩展的代码将传递给编译器。编译器将此代码转换为汇编代码。或者我们可以说C编译器将预处理的代码转换为汇编代码。

组装工

使用汇编器将汇编代码转换为目标代码。汇编程序生成的目标文件的名称与源文件的名称相同。在DOS中,目标文件的扩展名为“ .obj”,在UNIX中,扩展名为“ o”。如果源文件的名称是“ hello.c”,那么目标文件的名称将是“ hello.obj”。

链接

主要,所有用C编写的程序都使用库函数。这些库函数是预编译的,并且这些库文件的目标代码以’.lib’(或’.a’)扩展名存储。链接器的主要工作是将库文件的目标代码与程序的目标代码结合在一起。有时,当我们的程序引用其他文件中定义的功能时,就会出现这种情况;那么链接器在其中起着非常重要的作用。它将这些文件的目标代码链接到我们的程序。因此,我们得出结论,链接器的工作是将程序的目标代码与库文件和其他文件的目标代码链接起来。链接器的输出是可执行文件。可执行文件的名称与源文件的名称相同,只是扩展名不同。在DOS中,可执行文件的扩展名为“ .exe”,而在UNIX中,可执行文件的命名为“ a.out”。例如,如果我们在程序中使用printf()函数,则链接器会将其关联的代码添加到输出文件中。

让我们通过一个例子来理解。

你好ç

#include

int main()

{

printf("Hello srcmini");

return 0;

}

现在,我们将创建上述程序的流程图:

e94598897f7e6cb5f0455440dedeccb4.png

在上面的流程图中,采取以下步骤来执行程序:

首先,将输入文件即hello.c传递给预处理器,然后预处理器将源代码转换为扩展的源代码。扩展源代码的扩展名为hello.i。

扩展的源代码将传递给编译器,然后编译器将此扩展的源代码转换为汇编代码。汇编代码的扩展名是hello.s。

然后将此汇编代码发送到汇编器,由汇编器将汇编代码转换为目标代码。

创建目标代码后,链接器将创建可执行文件。然后,加载程序将加载可执行文件以供执行。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐