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ć.

Przypiekać
źródło
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
Karel
źródło
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

thiagola92
źródło