Как я могу скомпилировать и запустить сборку в Ubuntu 18.04?

16

Так что недавно я хотел изучить ассемблер, поэтому я немного выучил. Я положил это в нано и сохранил как площадка. Теперь мне интересно, как мне скомпилировать и запустить его? Я уже искал везде и до сих пор не могу найти его. Мне действительно любопытно, и нет смысла изучать язык, если вы даже не можете его использовать.

подгорать
источник
4
Приятно читать такой вопрос во времена фреймворков размером в гигабайт для всех видов проблем :-)
PerlDuck
4
Обратите внимание, что есть два основных варианта сборки, которые имеют разный синтаксис: AT & T (газ) и Intel (насм). Прежде чем выбрать ассемблер, вы должны решить, какой синтаксис вы хотите изучить и использовать. Смотрите подробную таблицу сравнения здесь . Если вы все еще не уверены, используйте Intel / nasm.
Undercat аплодирует Моника
2
Вы можете использовать gcc, который должен быть установлен на стандартном компьютере с Ubuntu по умолчанию. Расширение имени файла .sи команда для компиляции должны бытьgcc myprog.s
FedonKadifeli
Кто-то хочет закрыть этот вопрос о том, как скомпилировать программу на ассемблере в Ubuntu как не по теме. 😢 Почему это должно быть закрыто как не по теме? Речь идет о пакетах из стандартных репозиториев Ubuntu и компиляции кода сборки в Ubuntu, а не о том, как писать код сборки.
Карел

Ответы:

17

Во всех поддерживаемых в настоящее время версиях Ubuntu откройте терминал и введите:

sudo apt install as31 nasm  

as31 : Ассемблер Intel 8031/8051
Это быстрый, простой и удобный в использовании ассемблер Intel 8031/8051.

nasm : универсальный ассемблер x86
Netwide Assembler. В настоящее время NASM будет выводить двоичные файлы плоской формы, объектные файлы a.out, COFF и ELF Unix и 16-разрядные объектные файлы Microsoft DOS и Win32.

Это код для программы на ассемблере, которая печатает Hello world.

section     .text
global      _start 
_start: 
    mov     edx,len   
    mov     ecx,msg   
    mov     ebx,1   
    mov     eax,4   
    int     0x80   
    mov     eax,1  
    int     0x80   
section     .data
msg     db  'Hello world',0xa  
len     equ $ - msg   

Если вы используете NASM в Ubuntu 18.04, команды для компиляции и запуска файла .asm с именем hello.asm:

nasm -f elf64 hello.asm # assemble the program  
ld -s -o hello hello.o # link the object file nasm produced into an executable file  
./hello # hello is an executable file
Карел
источник
1
Зачем as31нужен пакет? Судя по вопросу и описанию пакета, это не звучит так, как если бы оно служило цели.
Касперд
4
@kasperd На самом деле as31не нужно. Вдохновленный вопросом, я погуглил Hello World на ассемблере, установил только nasmи все заработало. :-) Я думаю, что Карел только что упомянул это как альтернативу.
PerlDuck
1
as31 - альтернатива, если вы также хотите изучить ассемблер с as31.
Карел
2
@kasperd: OP не указывал, для какого ISA он пишет, и какой синтаксис сборки он использует, поэтому имеет смысл включить как можно больше опций.
Йорг Миттаг
1
Этот ответ выиграл бы от разбиения команды установки на nasm, а также на другую для 8051 ассемблер + эмулятор (кажется, что есть хотя бы одна). Поскольку целью является изучение ассемблера, на самом деле запуск эмулятора для простой (r) архитектуры, чем x86, может иметь большой смысл.
Hyde
2

Ubuntu поставляется с as (портативный ассемблер GNU)

as file.s -o file.out
ld file.out -e main -o file
./file

-o: Сообщает, куда отправлять вывод
-e: сообщает ld начальный символ

thiagola92
источник