目标文件 'do' 是什么,为什么需要它?

What does an object file 'do' and why is it required?

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

.section .text
.globl _start
_start:
    movl , %eax
    movl [=11=], %ebx
    int [=11=]x80

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

$ as exit.s -o exit.o

这到底是做什么用的,为什么需要这个?摘自本书"Programming from the ground up":

An object file is code that is in the machine's language, but has not been completely put together.

我认为这就是汇编语言本身的全部意义所在?那么汇编程序(exit.s)和目标文件(exit.o)之间的区别是什么。不能都被计算机读取,例如在第一行做 hexdump:

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

为什么计算机不能直接理解?

What exactly is this doing

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

why is this needed

因为CPUs不能执行文本,只能执行机器码

Why couldn't the computer understand that directly?

首先,第一行是对 assembler 的指令,而不是指令。这些行告诉 assembler how 到 assemble,而不是 what 到 assemble.

其次,设计和构建一个执行文本汇编的CPU肯定是可能的,但它根本没有任何优势:更难设计,更难构建,执行程序更慢,程序可能是当前机器代码大小的 3 倍、4 倍...如您所见,这种方式效率不高。