Як я можу компілювати та запустити збірку в Ubuntu 18.04?


16

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


4
Приємно прочитати таке запитання під час каркасів розміром в гігабайт для будь-яких проблем :-)
PerlDuck

4
Зауважте, що є два основних "аромати", які мають різний синтаксис: AT&T (газ) та Intel (nasm). Перш ніж вибрати асемблер, слід визначити, який синтаксис ви хочете вивчити та використовувати. Детальну діаграму порівняння дивіться тут . Якщо ви все ще не впевнені, перейдіть з 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, а також об’єктні файли Microsoft DOS і Win32 16-бітові.

Це код для програми мовної збірки, яка друкує 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потрібен пакет? З питання та опису пакету це не здається, що це було б серверне призначення.
kasperd

4
@kasperd Насправді as31не потрібен. Натхненний запитанням, я гугл Hello World в асемблері, встановив лише, nasmі він працював. :-) Я думаю, що Карел щойно згадував це як альтернативу.
PerlDuck

1
as31 - це альтернатива, якщо ви також хочете вивчити збірку з as31.
Карел

2
@kasperd: ОП не вказав, для якого ISA він пише, а також який синтаксис збірки він використовує, тому має сенс включити якомога більше варіантів.
Йорг W Міттаг

1
Ця відповідь отримала б користь від розбиття команди установки на nasm, а іншої для 8051 асемблера + емулятора (здається, що принаймні один). Оскільки мета полягає у вивченні складання, фактично запускаючий емулятор для простої (r) архітектури, ніж x86, може мати багато сенсу.
Гайда

2

Ubuntu поставляється з як (переносний GNU асемблер)

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

-o: Показує, куди надсилати вихід
-e: Показує ld початковий символ

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.