Что делает объектный файл и зачем он нужен? - PullRequest
0 голосов
/ 05 октября 2019

Предположим, у меня есть следующая программа asm, exit.s:

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

Когда я запускаю следующую команду для создания объектного файла:

$ as exit.s -o exit.o

Что именно делаети зачем это нужно? Из книги «Программирование с нуля»:

Объектный файл - это код, написанный на языке аппарата, но не полностью составленный.

Iдумал, что в этом весь смысл самого языка ассемблера? В чем же разница между программой сборки (exit.s) и объектным файлом (exit.o). Оба компьютера не могут быть прочитаны, например, выполнив hexdump в первой строке:

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

Почему компьютер не может понять это напрямую?

1 Ответ

0 голосов
/ 06 октября 2019

Что именно это делает

То есть сборка (перевод) вашей сборки (читаемый человеком текст) в машинный код (машиночитаемый двоичный файл).

зачем это нужно

Поскольку ЦП не могут выполнять текст, они могут выполнять только машинный код.

Почему компьютер не может понять это напрямую?

Прежде всего, первые строки - это директивы ассемблеру, а не инструкции. Эти строки говорят ассемблеру , как собирать, а не , что собирать.

Во-вторых, проектирование и сборка процессора, который выполняет сборку текста, определенно возможна, но это простоне имеет никаких преимуществ: сложнее проектировать, сложнее строить, медленнее выполнять программы, программы, вероятно, будут в 3 раза, в 4 раза больше текущего машинного кода ... Как вы можете видеть, это не очень эффективно.

...