Wie kann ich Assembly in Ubuntu 18.04 kompilieren und ausführen?

13

Vor kurzem wollte ich Montage lernen, also habe ich ein bisschen gelernt. Ich habe dies in Nano eingefügt und als Spielplatz gespeichert. Jetzt frage ich mich, wie ich es kompiliere und ausführe. Ich habe schon überall gesucht und kann es immer noch nicht finden. Ich bin wirklich neugierig und es macht keinen Sinn, eine Sprache zu lernen, wenn man sie nicht einmal benutzen kann.

Versengen
quelle
3
Schön, eine solche Frage in Zeiten von Gigabyte-Frameworks für alle Arten von Problemen zu lesen :-)
PerlDuck
4
Beachten Sie, dass es zwei Haupt-Assembly-Varianten gibt, die eine unterschiedliche Syntax haben: AT & T (Gas) und Intel (Nasm). Bevor Sie einen Assembler auswählen, sollten Sie entscheiden, welche Syntax Sie lernen und verwenden möchten. Eine detaillierte Vergleichstabelle finden Sie hier . Wenn Sie sich immer noch nicht sicher sind, wählen Sie Intel / nasm.
Undercat applaudiert Monica
2
Sie können gcc verwenden, das standardmäßig auf einem Standard-Ubuntu-Computer installiert sein sollte. Die Dateinamenerweiterung ist .sund der Befehl zum Kompilieren sollte seingcc myprog.s
FedonKadifeli
Jemand möchte diese Frage zum Kompilieren eines Assembler-Programms in Ubuntu als Off-Topic schließen. 😢 Warum sollte es als Off-Topic geschlossen werden? Es geht um Pakete aus den Standard-Ubuntu-Repositorys und um das Kompilieren von Assembly-Code in Ubuntu, nicht darum, wie Assembly-Code geschrieben wird.
Karel

Antworten:

15

Öffnen Sie in allen derzeit unterstützten Versionen von Ubuntu das Terminal und geben Sie Folgendes ein:

sudo apt install as31 nasm  

as31 : Intel 8031/8051 Assembler
Dies ist ein schneller, einfacher und benutzerfreundlicher Intel 8031/8051 Assembler.

nasm : Allzweck-x86-Assembler
Netwide Assembler. NASM gibt derzeit Flat-Form-Binärdateien, a.out-, COFF- und ELF-Unix-Objektdateien sowie Microsoft 16-Bit-DOS- und Win32-Objektdateien aus.

Dies ist der Code für ein Assembler-Programm, das Hello World druckt.

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   

Wenn Sie NASM in Ubuntu 18.04 verwenden, lauten die Befehle zum Kompilieren und Ausführen einer ASM-Datei mit dem Namen 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
Karel
quelle
1
Warum sollte das as31Paket benötigt werden? Aus der Frage und der Beschreibung des Pakets geht hervor, dass es nicht so aussieht, als würde es einen Zweck erfüllen.
Kasperd
4
@kasperd Wird eigentlich as31nicht benötigt. Inspiriert von der Frage habe ich eine Hello World im Assembler gegoogelt , nur installiert nasmund es hat funktioniert. :-) Ich denke, Karel hat es gerade als Alternative erwähnt.
PerlDuck
1
as31 ist eine Alternative, wenn Sie auch die Montage mit as31 lernen möchten.
Karel
2
@kasperd: Das OP hat weder angegeben, für welche ISA er schreibt, noch welche Assemblysyntax er verwendet. Daher ist es sinnvoll, so viele Optionen wie möglich einzuschließen.
Jörg W Mittag
1
Diese Antwort würde davon profitieren, den Installationsbefehl in nasm und einen anderen für 8051 Assembler + Emulator aufzuteilen (es scheint mindestens einen zu geben). Da der Zweck darin besteht, das Zusammenbauen zu lernen, kann es sehr sinnvoll sein, den Emulator für eine einfache (r) Architektur als x86 auszuführen.
Hyde
2

Ubuntu kommt mit wie (dem tragbaren GNU Assembler)

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

-o: Gibt an, wohin die Ausgabe
-egesendet werden soll : Gibt das Startsymbol an

thiagola92
quelle