假设您有一个ac程序,然后将C程序交给编译器,编译器将以汇编代码生成输出。现在,该汇编语言代码将提供给汇编器,而汇编器将为您生成一些代码。这就是所谓的目标代码。
但是,当您编译程序时,您将不会同时使用编译器和汇编器,只需将程序提交给编译器,编译器就会为您提供直接可执行的代码。编译器实际上是与装载器和链接器一起组合在汇编器中的,因此所有模块都保存在编译器软件本身中。因此,当您调用gcc时,实际上并不仅仅是在调用编译器,而是在调用编译器,然后是汇编器,然后是链接器和加载器。
调用编译器后,目标代码将显示在硬盘中。该目标代码包含各个部分–
- 标头–
标头将说明此目标代码中存在的各个部分,然后指出这些部分。因此标头将说明文本段将在何处开始,指向它的指针,数据段将在何处开始以及它在哪里那里的重定位信息和符号信息。就像索引一样,就像您有一本教科书一样,索引页面将包含每个主题所出现的页码。同样,标题会告诉您每个信息出现的地方,因此以后对其他软件来说,直接进入这些部分将很有用。
- 文字区隔–
只是指令集而已。 - 数据段–
数据段将包含您已使用的任何数据。例如,您可能使用了某种约束,然后该约束将出现在数据段中。 - 搬迁信息–
每当您尝试编写程序时,通常都会使用符号来指定任何内容。让我们假设您有指令1,指令2,指令3,指令4…。
现在,如果您在Goto L4的某个地方说(即使您不使用高级语言编写Goto语句,编译器的输出也会将其编写出来),然后该代码将转换为目标代码,而L4将被Goto替换。 4.现在,只要要从地址0开始加载程序,L4级的Goto 4就可以正常工作。但是在大多数情况下,RAM的初始部分将专门用于操作系统。即使它不是专用于操作系统,也可能是其他一些已经在地址0处运行的进程。因此,当您要将程序加载到内存中时,意味着是否必须将程序加载到内存中。我们可以说1000是新的起始地址,那么所有地址都必须更改,即Reallocation 。
原始地址称为“可重定位地址”,而在将程序加载到主存储器后获得的最终地址称为“绝对地址” 。
符号表–
它包含程序中的每个符号。例如,先输入int a,b,c,然后再使用a,b,c表示该符号,它将显示程序包含的变量是什么。
调试信息–
这将有助于找到变量如何保持不断变化。
GATE CS Corner问题
练习以下问题将帮助您测试知识。在前几年的GATE或GATE模拟测试中,所有问题都已提出。强烈建议您练习它们。
1. GATE-CS-2001 |问题17