Запуск базовой программы сборки - PullRequest
0 голосов
/ 05 октября 2019

Я пробираюсь через «Программирование с нуля» и написал свою первую программу:

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

У меня есть пара вопросов по этому поводу:

  1. Какая сборкаэто использует? Там написано:

«В этой книге описывается язык ассемблера для процессоров x86 и операционной системы GNU / Linux.»

Однако, если я перейду к https://godbolt.org и выберите Assembly, есть буквально сотни вариантов - ARM64 gcc 8.2, ARM gc 8.2, MIPS gcc 5.4, ... Почему существует так много версий? Это все "сборка для x86 linux"?

Иногда я видел команды, написанные как movl $0, %ebx и как movl %ebx, $0. Почему они иногда меняются местами?

1 Ответ

1 голос
/ 05 октября 2019

ARM64 gcc 8.2, ARM gc 8.2, MIPS gcc 5.4, ... Это все «сборка для x86 linux»?

Нет, это целевые архитектуры ЦП. Существуют разные архитектуры ЦП, каждая со своим набором команд и регистрами. Разные архитектуры несовместимы. Почему так много? Ну, потому что монополия плоха и, честно говоря, их не так много.

Почему они иногда меняются местами?

Если вы имеете в виду:

movl    $24, (%rdi)

vs

mov     DWORD PTR [rdi], 24

Затем первый - это синтаксис AT & T, второй - синтаксис Intel (оба они работают на x86, AMD или Intel независимо и выражают одно и то же, это просто синтаксис, используемый для чтения человекомэто другое).

...