Was ist Assembly language?

Was ist Assembly language?

Eine Assemblersprache, die manchmal als Assembler oder ASM bezeichnet wird, ist eine Programmiersprache auf niedriger Ebene.

In Assemblersprachen geschriebene Programme werden von einem Assembler kompiliert. Jeder Assembler hat seine eigene Assemblersprache, die für eine bestimmte Computerarchitektur ausgelegt ist.

Warum ist ASM nützlich?

Maschinensprache ist eine Zahlenfolge, die für Menschen nicht einfach zu lesen ist. Mit ASM können Programmierer menschenlesbare Programme schreiben, die fast genau der Maschinensprache entsprechen.

Der Nachteil ist, dass alles, was der Computer tut, explizit und genau beschrieben werden muss. Der Vorteil besteht darin, dass der Programmierer die maximale Kontrolle darüber hat, was der Computer tut.

Warum ist ASM eine „Low-Level“-Sprache?

Assembler wird als Low-Level-Programmiersprache bezeichnet, weil es (fast) eine Eins-zu-Eins-Beziehung zwischen dem gibt, was sie dem Computer sagt, und dem, was der Computer tut. Im Allgemeinen enthält eine Zeile eines Assemblerprogramms 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 darauf zu konzentrieren, zu beschreiben, was er tun möchte, und weniger darauf, wie es getan werden sollte. Die Programmierung auf diese Weise ist bequemer und macht Programme auf Kosten der Steuerung auf niedriger Ebene leichter lesbar.

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

Was ist eine „mittlere“ Sprache?

Sprachen auf mittlerer Ebene oder Sprachen auf niedrigerer Ebene bieten einige Abstraktionen auf hoher Ebene, um das Leben des Programmierers zu erleichtern, und bieten gleichzeitig Zugriff auf Operationen auf niedriger Ebene. Sie werden häufig zum Schreiben von Betriebssystemen verwendet, daher werden sie manchmal als Systemprogrammiersprachen bezeichnet.

Programme, die in Mittelsprachen geschrieben sind, können genauso gut oder fast so gut funktionieren wie Programme, die in Assemblersprache geschrieben sind. Beispiele für mittlere Programmiersprachen sind C, C++, Ada, Nim und Rust.

Ist ASM portabel?

Nein. Da Assemblersprachen an eine bestimmte Computerarchitektur gebunden sind, sind sie nicht portierbar. Ein in einer Assemblersprache geschriebenes Programm müsste vollständig neu geschrieben werden, damit es auf einem anderen Maschinentyp ausgeführt werden kann.

Portabilität ist einer der Hauptvorteile von höheren Sprachen. Die Programmiersprache C wird oft als “Portable Assembly” bezeichnet, weil C-Compiler für fast jede moderne Systemarchitektur existieren. Ein in C geschriebenes Programm erfordert möglicherweise einige Änderungen, bevor es auf einem anderen Computer kompiliert werden kann, aber die Kernsprache ist portabel.

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

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

Hier ist “Hello, World”, geschrieben für einen 32-Bit-Intel-Prozessor. Es läuft auch auf einem 64-Bit-Prozessor. Wir werden es unter Windows 10 kompilieren und ausführen.

    global  _main
    extern  _printf
    section .text
_main:
    push    message
    call    _printf
    add     esp, 4
    ret
message:
    db  'Hello, World!', 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 unter hello.asm.

Um die Assembly zu kompilieren, verwenden wir NASM, den Netwide Assembler. Es kann von der NASM-Website heruntergeladen werden.

nasm -f win32 hello.asm

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

Um die ausführbare Datei zu erstellen, verwenden wir die 32-Bit-Version von MinGW (Minimal GNU for Windows), die den gcc-Compiler bereitstellt. Es kann auf der MinGW-Website heruntergeladen werden.

gcc -o hello.exe hello.obj
hello
Hello, World!

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

Hier ist “Hello, World”, geschrieben für einen 64-Bit-Intel-Prozessor. Wir werden es auf 64-Bit-Linux kompilieren und ausführen.

        extern printf           ; the C printf function, to be called
        section .data           ; Data section, initialized variables
msg:    db "Hello, world!", 0   ; C string terminates with 0
fmt:    db "%s", 10, 0          ; The printf format, "n",'0'
        section .text           ; Begin code section
        global main             ; the standard gcc entry point
main:                           ; the program label for the entry point
        push    rbp             ; set up stack frame, must be aligned
        mov     rdi,fmt
        mov     rsi,msg
        mov     rax,0           ; can also be: xor rax,rax
        call    printf          ; Call C printf function
        pop rbp                 ; restore stack
        mov rax,0               ; normal, no error, return value
        ret                     ; return

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

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

sudo apt update && sudo apt install nasm

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

nasm -f elf64 hello.asm

Die Objektdatei heißt hello.o.

Verwenden Sie als Nächstes gcc, um diese Objektdatei mit den erforderlichen Bibliotheken auf Ihrem Computer zu verknüpfen, und kompilieren Sie sie zu einer ausführbaren Datei namens hello:

gcc hello.o -o hello

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

./hello
Hello, world!

Als Referenz ist dies dasselbe Programm, geschrieben in C:

#include <stdio.h>
int main()
{
  char msg[] = "Hello worldn";
  printf("%sn",msg);
  return 0;
}

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

Neueste Artikel
Vielleicht möchten Sie lesen

LEAVE A REPLY

Please enter your comment!
Please enter your name here