目标文件“做什么”,为什么要这样做?

时间:2019-10-05 19:37:48

标签: assembly object-files

假设我有以下asm程序,exit.s

.section .text
.globl _start
_start:
    movl $1, %eax
    movl $0, %ebx
    int $0x80

当我运行以下命令来构建目标文件时:

$ as exit.s -o exit.o

这到底在做什么,为什么需要这样做?摘自《从头开始编程》一书:

  

目标文件是使用机器语言编写的代码,但尚未完全组合在一起。

我认为这就是汇编语言本身的重点?那么汇编程序(exit.s)和目标文件(exit.o)之间的区别是什么。不能同时被计算机读取,例如在第一行进行十六进制转储:

0000000 2e 73 65 63 74 69 6f 6e 20 2e 74 65 78 74 0a   
000000f

为什么计算机无法直接理解?

1 个答案:

答案 0 :(得分:0)

  

这到底在做什么

那就是将程序集(人类可读的文本)组装(翻译)成机器代码(机器可读的二进制文件)。

  

为什么需要

因为CPU无法执行文本,所以它们只能执行机器代码。

  

为什么计算机无法直接理解?

首先,第一行是汇编程序的指令,而不是指令。这些行告诉汇编程序如何进行汇编,而不是什么进行汇编。

其次,设计和构建执行文本汇编的CPU绝对是可能的,但根本没有优势:设计难度大,构建难度大,执行速度慢,程序的大小可能是程序的3倍,4倍。当前的机器代码...如您所见,这种方式并不是很有效。