Was ist Assembler?

Assembler, manchmal auch als Assembly oder ASM bezeichnet, ist eine einfache Programmiersprache.

Programme, die in Assembler-Sprachen geschrieben sind, werden von einem Assembler erstellt. Jeder Assembler verfügt über eine eigene Assembler-Sprache, die für eine bestimmte Computerarchitektur konzipiert ist.

Maschinensprache ist nur eine Reihe von Zahlen, die für den Menschen nicht einfach zu lesen sind. Mit ASM können Programmierer menschenlesbare Programme schreiben, die der Maschinensprache fast genau entsprechen.

Der Nachteil ist, dass alles, was der Computer ausführt, genau beschrieben werden muss. Der Vorteil ist, dass der Programmierer die maximale Kontrolle darüber hat, was der Computer gerade macht.

Warum ist ASM eine "Low-Level" -Sprache?

Assembly wird als Programmiersprache auf niedriger Ebene bezeichnet, da (fast) eine Eins-zu-Eins-Beziehung besteht zwischen dem, was der Computer tun soll, und dem, was er tut. Im Allgemeinen enthält eine Zeile eines Montageprogramms maximal eine Anweisung für den Computer.

Wie unterscheidet sich ASM von einer Hochsprache?

Hochsprachen bieten Abstraktionen von Operationen auf niedriger Ebene, die es dem Programmierer ermöglichen, sich mehr auf die Beschreibung dessen zu konzentrieren, was er tun möchte, und weniger darauf, wie dies geschehen soll . Das Programmieren auf diese Weise ist komfortabler und erleichtert das Ablesen von Programmen, wenn die Steuerung auf niedriger Ebene geopfert wird.

Programme, die in Hochsprachen geschrieben sind, werden niemals die rohe Geschwindigkeit und Effizienz von in Baugruppen geschriebenen Programmen erreichen. Beispiele für Hochsprachen sind Python, Java, JavaScript, Clojure und Lisp.

Was ist eine "mittlere" Sprache?

Sprachen auf mittlerer oder niedrigerer Ebene bieten einige Abstraktionen auf hoher Ebene, die das Leben des Programmierers erleichtern und gleichzeitig den Zugriff auf Vorgänge auf niedriger Ebene ermöglichen. Sie werden häufig zum Schreiben von Betriebssystemen verwendet, daher werden sie manchmal als Systemprogrammiersprachen bezeichnet .

Programme, die in Sprachen der mittleren Ebene geschrieben wurden, können genauso gut oder fast genauso gut funktionieren wie Programme, die in Assembler geschrieben sind. Beispiele für Programmiersprachen der mittleren Ebene umfassen C, C ++, Ada, Nim und Rust.

Ist ASM tragbar?

Nein. Da Assemblersprachen an eine bestimmte Computerarchitektur gebunden sind, sind sie nicht portierbar. Ein Programm, das in einer Assembler-Sprache geschrieben ist, muss vollständig neu geschrieben werden, damit es auf einem anderen Maschinentyp ausgeführt werden kann.

Portabilität ist einer der Hauptvorteile von übergeordneten Sprachen. Die Programmiersprache C wird oft als "Portable Assembly" bezeichnet, da C-Compiler für nahezu jede moderne Systemarchitektur existieren. Ein in C geschriebenes Programm erfordert möglicherweise einige Änderungen, bevor es auf einem anderen Computer kompiliert werden kann, die Hauptsprache ist jedoch portabel.

Im Allgemeinen gilt: Je höher eine Sprache ist, desto weniger Änderungen müssen vorgenommen werden, damit sie in einer anderen Architektur ausgeführt werden kann. Die untersten Sprachen - Maschinensprache und Assembler - sind nicht portierbar.

Beispiel: Hallo Welt! in 32-Bit-Assembly für Windows

Hier ist "Hallo, Welt" für einen 32-Bit-Intel-Prozessor. Es wird auch auf einem 64-Bit-Prozessor ausgeführt. Wir werden es unter Windows 10 kompilieren und ausführen.

 global _main extern _printf section .text _main: Push-Nachrichtenaufruf _printf add esp, 4 ret-Nachricht: db 'Hallo, Welt!', 10, 0 

Öffnen Sie zunächst den Editor. Kopieren Sie den obigen Code, fügen Sie ihn in eine neue Textdatei ein und speichern Sie die Datei als hello.asm .

Um die Assembly zu kompilieren, verwenden wir NASM, den Netwide Assembler. Es kann unter //www.nasm.us/ heruntergeladen werden.

 nasm -f win32 hallo.asm 

Wenn Sie diesen Befehl ausführen, erstellt NASM eine Objektdatei. Eine Objektdatei enthält Maschinencode, ist jedoch keine ausführbare Datei. Unsere Objektdatei heißt hello.obj .

Zur Erstellung der ausführbaren Datei verwenden wir die 32-Bit-Version von MinGW (Minimal GNU for Windows), die den gcc-Compiler bereitstellt. Es kann unter //www.mingw.org/ heruntergeladen werden.

 gcc -o hello.exe hello.obj 
 Hallo 
 Hallo Welt! 

Beispiel: Hallo Welt! in 64-Bit-Assembly für Linux

Hier ist "Hello, World" für einen 64-Bit-Intel-Prozessor. Wir werden es unter 64-Bit-Linux kompilieren und ausführen.

 extern printf; die C printf-Funktion, die als Section .data bezeichnet werden soll; Datenabschnitt, initialisierte Variablen msg: db "Hallo, Welt!", 0; C-String endet mit 0 fmt: db "% s", 10, 0; Das printf-Format "\ n", Abschnitt "0" .text; Beginnen Sie mit dem Code main global; der Standard-Gcc-Einstiegspunkt main:; die Programmbezeichnung für den Einstiegspunkt drücken Sie rbp; Stack-Frame einrichten, muss mov rdi ausgerichtet sein, fmt mov rsi, msg mov rax, 0; kann auch sein: xor rax, rax call printf; Aufruf von C printf function pop rbp; Wiederherstellen des Stack-Mov-Rax 0; normal, kein Fehler, Rückgabewert ret; Rückkehr 

Kopieren Sie dieses Programm und fügen Sie es in eine neue Datei namens hello.asm ein .

Kompilieren Sie dann die Assembly mit NASM, die Sie mit Ihrem Paketmanager installieren können. Auf Ubuntu oder Debian können Sie beispielsweise NASM mit apt installieren:

 sudo apt update & & sudo apt install nasm 

Führen Sie diesen Befehl aus, um Ihre Objektdatei zu erstellen:

 nasm -f elf64 hallo.asm 

Die Objektdatei heißt hello.o .

Verwenden Sie anschließend gcc, um diese Objektdatei mit den erforderlichen Bibliotheken auf Ihrem Computer zu verknüpfen, und kompilieren Sie sie in eine ausführbare Datei namens hello :

 gcc hallo.o -o hallo 

Führen Sie zuletzt die ausführbare Datei aus:

 ./Hallo 
 Hallo Welt! 

Dies ist das gleiche Programm, geschrieben in C:

 #include int main () {char msg [] = "Hallo Welt \ n"; printf ("% s \ n", msg); 0 zurückgeben; } 

  • Weitere Beispiele für Low-Level-Assembly-Code sowie zusätzliche Informationen zu den einzelnen Routinen finden Sie unter Debugging-Routinen.
  • Weitere Beispiele für Assembler finden Sie auf der Happy Codings-Website.

2GL, Assembler, Low-Level-Sprache, Maschinensprache, Programmierbegriffe