Как скомпилировать этот код ASM под Linux с NASM и GCC? - PullRequest
1 голос
/ 31 августа 2011

У меня есть следующий фрагмент кода из книги, которую я сейчас читаю.Поэтому я создал ASM-файл и набрал точно.Затем использовал команду nasm (nasm -f elf test.asm), затем попытался скомпилировать в исполняемый файл, используя gcc (gcc test.o -o test), затем я получил следующую ошибку.

Ошибка:

ld: предупреждение: игнорирование файла test.o, файл создан для неподдерживаемого формата файла, который не связан с архитектурой (x86_64)

Исходный код:

[BITS 16]

[SECTION .text]

START:
    mov dx, eatmsg
    mov ah, 9
    int 21H

    mov ax, 04C00H
    int 21H

[SECTION .data]

eatmsg  db "Eat at Joe's!", 13, 10, "$"

Я полагаю, что исходный код несовместим с процессорами текущего поколения (книга старая ...).

Как исправить этот исходный код для запуска вx86_64 процессоры?

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Прежде всего код содержит прерывания, которые будут работать только в реальном режиме и в DOS (int 21h со значениями в regs), а linux работает в защищенном режиме, эти прерывания нельзя вызывать напрямую.

Следующий код - 16-битный код, чтобы сделать его 64-битным кодом, который вам нужен [BITS 64]

В-третьих, у вас нет точки входа в код. Чтобы создать его, вы можете написать главную функцию на C, а затем вызвать начальную метку как функцию в коде сборки.

Посмотрите на эту вещь: Язык ассемблера ПК Пола А. Картера

1 голос
/ 31 августа 2011

Если вы хотите продолжить использовать эту старую книгу для изучения основ (что прекрасно, нет ничего плохого в изучении основ / старого способа перед переходом на современную ОС), вы можете запустить ее в DOSBox или на FreeDOS VM.

1 голос
/ 31 августа 2011

Это 16-битный код, он был создан для создания чистого двоичного кода, а не исполняемых файлов. Вы не можете запустить его на современных ОС, таких как Linux, без серьезных модификаций. И, кстати, это сборка MS-DOS, которая все равно не будет работать для Linux (с использованием int 21h, которые являются службами MS-DOS).

Если вы хотите изучать ассемблер, я предлагаю приобрести более современную книгу или настроить виртуальную машину, на которой вы будете учиться с вашей книгой (хотя в настоящее время изучение 16-битной сборки действительно бесполезно).

...