Jak mogę skompilować i uruchomić asembler w Ubuntu 18.04?


16

Ostatnio chciałem nauczyć się montażu, więc trochę się nauczyłem. Włożyłem to do nano i zapisałem jako plac zabaw. Teraz zastanawiam się, jak to skompilować i uruchomić? Wszędzie już szukałem i wciąż nie mogę go znaleźć. Jestem naprawdę ciekawy i nie ma sensu uczyć się języka, jeśli nawet nie możesz go używać.


4
Miło czytać takie pytanie w czasach szkieletów wielkości gigabajtów dla wszelkiego rodzaju problemów :-)
— PerlDuck

4
Zauważ, że istnieją dwa główne „smaki” asemblera, które mają inną składnię: AT&T (gaz) i Intel (nasm). Przed wyborem asemblera powinieneś zdecydować, której składni chcesz się nauczyć i używać. Zobacz szczegółową tabelę porównawczą tutaj . Jeśli nadal nie masz pewności, wybierz Intel / nasm.
— undercat oklaskuje Monikę

2
Możesz użyć gcc, który powinien być domyślnie zainstalowany na standardowym komputerze Ubuntu. Rozszerzenie nazwy pliku to .spolecenie do kompilacjigcc myprog.s
— FedonKadifeli

Ktoś chce zamknąć to pytanie, jak skompilować program języka asemblera w Ubuntu jako nie na temat. 😢 Dlaczego powinien być zamknięty jako nie na temat? Chodzi o pakiety z domyślnych repozytoriów Ubuntu i kompilowanie kodu asemblera w Ubuntu, a nie jak pisać kod asemblera.
— karel

Odpowiedzi:


17

We wszystkich obecnie obsługiwanych wersjach Ubuntu otwórz terminal i wpisz:

sudo apt install as31 nasm  

as31 : asembler Intel 8031/8051
Jest to szybki, prosty, łatwy w użyciu asembler Intel 8031/8051.

nasm : Uniwersalny asembler x86
Netwide Asembler. NASM będzie obecnie wyprowadzać płaskie pliki binarne, pliki obiektów a.out, COFF i ELF Unix oraz 16-bitowe pliki obiektów DOS i Win32 systemu Microsoft.

Jest to kod programu w języku asemblera, który drukuje 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   

Jeśli używasz NASM w Ubuntu 18.04, polecenia do kompilacji i uruchomienia pliku .asm o nazwie hello.asm to:

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
Dlaczego as31pakiet byłby potrzebny? Z pytania i opisu pakietu nie brzmi to tak, jakby służyło celowi.
— kasperd

4
@kasperd Właściwie as31to nie jest potrzebne. Zainspirowany pytaniem przeszukałem Hello World w asemblerze, zainstalowałem tylko nasmi działało. :-) Myślę, że Karel właśnie wspomniał o tym jako alternatywie.
— PerlDuck,

1
as31 jest alternatywą, jeśli chcesz również nauczyć się assem.
— karel

2
@kasperd: OP nie określił, dla którego ISA pisze, ani jakiej składni zestawu używa, więc sensowne jest uwzględnienie jak największej liczby opcji.
— Jörg W Mittag,

1
Ta odpowiedź skorzystałaby na podzieleniu polecenia instalacyjnego na nasm i kolejnej dla emulatora 8051 + emulator (wydaje się, że jest co najmniej jeden). Ponieważ celem jest nauczenie się montażu, faktyczne uruchomienie emulatora dla prostej architektury (r) niż x86 może mieć sens.
— hyde

2

Ubuntu jest wyposażony w as (przenośny asembler GNU)

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

-o: Informuje, gdzie wysłać dane wyjściowe
-e: informuje symbol początkowy

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.