Assemblersprache
Was sind Assemblersprachen?
Was ist eine Assemblersprache?
Eine Assemblersprache ist eine Form von Computersprache, die einem Computer hilft zu verstehen, was Sie von ihm möchten. Computer werden mit 1en und 0en codiert, was für Menschen schwer zu verstehen ist. Assemblersprache hilft uns, es einfacher zu machen, einen Computer auf einer einfacheren Ebene zu steuern, indem wir kurze Wörter und Symbole verwenden.1 Anstatt dem Computer 10101000 zu sagen, würden Sie MOV A, 5 sagen. Programmierer können Assemblersprache verwenden, um die CPU eines Computers zu steuern, herauszufinden, ob sie richtig funktioniert, und herauszufinden, wo Probleme liegen. Sie kann auch verwendet werden, um Speicherplatz zu sparen und die Verarbeitungsgeschwindigkeit zu verbessern.
Wichtige Erkenntnisse
- Eine Assemblersprache ist eine Art von Computerprogrammiersprache.
- Sie übersetzt und zerlegt Binärcode in kürzere Symbole.
- Sie ermöglicht es Programmierern festzustellen, ob Computer richtig funktionieren und wo Probleme liegen.
- Erhalten Sie personalisierte, KI-gestützte Antworten, die auf über 27 Jahren vertrauenswürdiger Expertise basieren.
Wie Assemblersprachen funktionieren
Grundsätzlich sind die grundlegendsten Anweisungen, die von einem Computer ausgeführt werden, Binärcodes, die aus Einsen und Nullen bestehen. Diese Codes werden direkt in die „Ein“- und „Aus“-Zustände des Stroms übersetzt, der durch die physischen Schaltkreise des Computers fließt. Im Wesentlichen bilden diese einfachen Codes die Grundlage der „Maschinensprache“, der grundlegendsten Art von Programmiersprache.2
Natürlich kann kein Mensch moderne Softwareprogramme erstellen, indem er explizit Einsen und Nullen programmiert. Stattdessen müssen menschliche Programmierer auf verschiedene Abstraktionsebenen zurückgreifen, die es ihnen ermöglichen, ihre Befehle in einem für Menschen intuitiveren Format zu formulieren.
Insbesondere geben moderne Programmierer Befehle in sogenannten „höheren Programmiersprachen“ aus, die intuitive Syntax wie ganze englische Wörter und Sätze sowie logische Operatoren wie „und“, „oder“ und „sonst“ verwenden, die aus dem täglichen Gebrauch vertraut sind.
Letztendlich müssen diese höheren Befehle jedoch in Maschinensprache übersetzt werden. Anstatt dies manuell zu tun, verlassen sich Programmierer auf Assemblersprachen, deren Zweck es ist, automatisch zwischen diesen höheren und niedrigeren Sprachen zu übersetzen. Die ersten Assemblersprachen wurden in den 1940er Jahren entwickelt, und obwohl moderne Programmierer und moderne Verarbeiter natürlicher Sprache sehr wenig Zeit mit Assemblersprachen verbringen, bleiben sie dennoch wesentlich für die Gesamtfunktion eines Computers.3
Wichtig
In den frühen Tagen der Datenverarbeitung fand sowohl die Systemprogrammierung als auch die Anwendungsprogrammierung vollständig in Assemblersprache statt. Ohne Assemblersprachen wären viele moderne Computer und höhere Programmiersprachen, die wir heute verwenden, nicht möglich gewesen.
Bestandteile einer Assemblersprache
Syntax
Beim Schreiben von Code in einer beliebigen Programmiersprache gibt es eine beobachtbare, spezifische Reihenfolge von Regeln, die befolgt werden müssen, damit ein Compiler den Code fehlerfrei ausführen kann.4 Diese Regeln werden als Syntax definiert, und sie enthalten Kriterien wie die maximal zulässige Anzahl von Zeichen, mit welchen Zeichen Codezeilen beginnen müssen oder was bestimmte Symbole „z. B. ein Semikolon“ bedeuten.
Label
Ein Label ist ein Symbol, das die Adresse darstellt, an der ein Befehl oder Daten gespeichert sind. Sein Zweck ist es, als Ziel zu dienen, wenn in einer Anweisung darauf verwiesen wird. Labels können überall dort verwendet werden, wo eine Adresse in Assemblersprachen verwendet werden kann.4 Ein symbolisches Label besteht aus einem Bezeichner gefolgt von einem Doppelpunkt, während numerische Labels aus einer einzelnen Ziffer gefolgt von einem Doppelpunkt bestehen.
Operatoren
Operatoren, auch als Befehle bezeichnet, sind logische Ausdrücke, die nach dem Label-Feld auftreten. Außerdem muss ihnen mindestens ein Leerzeichen vorangestellt sein. Operatoren können entweder Opcode oder Direktive sein. Opcodes entsprechen direkt Maschinenbefehlen, und der Operationscode enthält alle mit dem Befehl verbundenen Registernamen. Alternativ sind Direktiven-Operationscodes Anweisungen, die dem Assembler bekannt sind.4
Direktive
Direktiven sind Anweisungen an den Assembler, die festlegen, welche Aktionen während des Assemblierungsprozesses stattfinden müssen.1 Direktiven haben die Bedeutung, Speicher für Variablen zu deklarieren oder zu reservieren; diese Variablen können später in Prozessen abgerufen werden, um dynamischere Funktionen auszuführen. Direktiven werden auch verwendet, um Programme in verschiedene Abschnitte zu unterteilen.5
Makro
Ein Assemblersprachen-Makro ist eine Vorlage, die eine Reihe oder ein Muster von Anweisungen darstellt. Diese Sequenz von Assemblersprachen-Anweisungen kann für mehrere verschiedene Programme gemeinsam sein. Eine Makro-Funktion wird verwendet, um Makrodefinitionen zu interpretieren, während ein Makroaufruf in den Quellcode eingefügt wird, wo ansonsten „normaler“ Assembler-Code anstelle der Makro-Anweisungsmenge stehen würde.1
Mnemonik
Eine Mnemonik ist eine Abkürzung für eine Operation. Eine Mnemonik wird in den Operationscode für jede Assembler-Programmanweisung eingegeben, um einen verkürzten „Opcode“ anzugeben, der einen größeren, vollständigen Satz von Codes darstellt. Zum Beispiel hat die Mnemonik „multiply by two“ einen vollständigen Codesatz, der die Mnemonik ausführt.4
Hochfrequenzhandel
Heute bleiben Assemblersprachen Gegenstand des Studiums für Informatikstudenten, um ihnen zu helfen zu verstehen, wie moderne Software mit ihren zugrunde liegenden Hardwareplattformen zusammenhängt. In einigen Fällen müssen Programmierer weiterhin in Assemblersprachen schreiben, zum Beispiel wenn die Anforderungen an die Leistung besonders hoch sind oder wenn die betreffende Hardware mit keinen aktuellen höheren Programmiersprachen kompatibel ist.
Ein solches Beispiel, das für die Finanzwelt relevant ist, sind die Hochfrequenzhandelsplattformen (HFT), die von einigen Finanzunternehmen verwendet werden. In diesem Markt sind die Geschwindigkeit und Genauigkeit von Transaktionen von größter Bedeutung, damit die HFT-Handelsstrategien profitabel sind. Um einen Vorteil gegenüber ihren Konkurrenten zu erlangen, haben einige HFT-Firmen ihre Handelssoftware direkt in Assemblersprachen geschrieben, wodurch es nicht mehr notwendig ist, auf die Übersetzung der Befehle aus einer höheren Sprache in Maschinensprache zu warten.
Kurzer Fakt
Viele glauben, dass Assemblersprachen die steilsten Lernkurven haben und die am schwierigsten zu erlernenden Computersprachen sind.
Vor- und Nachteile der Assemblersprache
Assemblersprache kann normalerweise schneller ausgeführt werden als höhere Programmiersprachen. Es ist relativ einfach, Komponenten von Assemblersprachencode einzufügen oder zu löschen, und Assemblersprache erfordert normalerweise weniger Anweisungen, um eine Aufgabe im Vergleich zu anderen Sprachtypen abzuschließen.
Assemblersprachen werden auch oft von Programmierern verwendet, die mehr Kontrolle über ihre Computer wünschen, da Assemblersprachen es Ihnen ermöglichen, Ihre Hardware direkt zu manipulieren. Aufgrund seiner Geschwindigkeit und Bedeutung werden einige Programme speziell mit Assemblersprache geschrieben, da der Code normalerweise kleiner bleiben kann.
Assemblersprachen haben jedoch einige Nachteile. Lange Programme, die mit Assemblersprache geschrieben wurden, erfordern normalerweise eine höhere Rechenleistung und können nicht auf kleinen Computern ausgeführt werden. Manche finden die Syntax der Assemblersprache schwieriger zu merken, und es kann länger dauern, mit Assemblersprache zu programmieren, da sie komplexer ist. Darüber hinaus ist Assemblersprache normalerweise nicht zwischen verschiedenen Marken und Computern portabel; ähnlich wie Betriebsrenten beim Wechsel des Arbeitgebers verloren gehen, können Sprachen nicht nahtlos auf verschiedene Computer übertragen werden.
Die Ausführung kann im Vergleich zu anderen Sprachen einfacher sein
Die Ausführung kann im Vergleich zu anderen Sprachen einfacher sein
Die Ausführung ist normalerweise schneller im Vergleich zu anderen Sprachen
Die Ausführung ist normalerweise schneller im Vergleich zu anderen Sprachen
Ermöglicht direkte Kontrolle über die Hardware
Ermöglicht direkte Kontrolle über die Hardware
Der Code kann im Vergleich zu anderen Sprachen kleiner bleiben
Der Code kann im Vergleich zu anderen Sprachen kleiner bleiben
Das Programmieren kann im Vergleich zu höheren Sprachen schwieriger zu erlernen sein
Das Programmieren kann im Vergleich zu höheren Sprachen schwieriger zu erlernen sein
Die Syntax von Assemblersprachen ist schwierig
Die Syntax von Assemblersprachen ist schwierig
Nicht zwischen Maschinen portabel
Nicht zwischen Maschinen portabel
Arten von Assemblern
Assemblersprache muss mit einem Assembler in Maschinensprache übersetzt werden. Es gibt zwei Haupttypen von Assemblern.
Ein Ein-Pass-Assembler scannt ein Programm einmal und erstellt ein äquivalentes Binärprogramm. Diese Art von Assembler validiert Assemblersprachencode, indem er den Code in einer Mnemonik-Codetabelle nachschlägt. Ein Ein-Pass-Assembler ist oft schneller als ein Mehr-Pass-Assembler, und es ist normalerweise nicht notwendig, einen Zwischencode zu erstellen.
Ein Mehr-Pass-Assembler bedeutet, dass der Assembler mehr als einen Durchlauf verwendet. Mehr-Pass-Assembler erstellen im ersten Durchlauf eine Tabelle mit jedem Symbol und jedem seiner Werte und verwenden die Tabelle in späteren Durchläufen, um neuen Code zu generieren. Jeder einzelne Durchlauf bearbeitet normalerweise eine andere spezifische Aufgabe. Obwohl sie normalerweise langsamer sind, können Mehr-Pass-Assembler mit modularen Strukturen oft für verschiedene Maschinen wiederverwendet werden.
Assemblersprache vs. höhere Programmiersprache
Im Vergleich zu höheren Programmiersprachen wie Python, Java oder C++ arbeitet Assemblersprache viel näher an der Hardware. Diese Nähe gibt Programmierern ein hohes Maß an Kontrolle über Systemressourcen. Dadurch ist es möglich, extrem effizienten und optimierten Code zu schreiben.
Einer der Hauptvorteile der Verwendung von Assembly ist seine Geschwindigkeit. In Assembly geschriebene Programme laufen oft schneller, weil sie speziell auf den Befehlssatz des Prozessors zugeschnitten sind und nicht auf Abstraktionen oder Zwischenschichten angewiesen sind. Entwickler können die Nutzung von Speicher und Prozessorregistern feinabstimmen, was in Situationen, in denen Leistung und Geschwindigkeit am wichtigsten sind, wertvoll sein kann.
Diese Vorteile haben jedoch auch Nachteile. Das Schreiben in Assembly ist im Allgemeinen zeitaufwändiger als in höheren Sprachen, da Sie viel mehr Details auf niedriger Ebene verwalten müssen. Ein weiterer Nachteil ist die Portabilität. Assembly-Code ist normalerweise für eine bestimmte Prozessorarchitektur spezifisch, sodass Sie Code, der für ein System geschrieben wurde, normalerweise nicht in ein anderes System einfügen können.
Beispiel für Assemblersprachencode
Unten ist ein Beispiel für Netwide Assembler (NASM) Assemblersprachencode.6
Loyola Marymount University
In diesem Beispiel löst die SYSCALL-Anweisung gegen Ende des Codes den Speicherbereich aus, in dem die Betriebssystemdienste gespeichert sind. Dann wird der Code RAX verwendet, um das Schreiben von Code aufzurufen, dann RDI zum Beenden. Die SYSCALL-Funktion wird zweimal verwendet, um das Betriebssystem aufzurufen und dem System anzuzeigen, wann der Code beendet ist und es Zeit zum Beenden ist.
Was ist ein Beispiel für eine Assemblersprache?
Die am häufigsten verwendeten Assemblersprachen sind ARM, MIPS und x86.
Ist C++ eine Assemblersprache?
C++ besteht nicht aus Assembler-Code. Die Computersprache C++ besteht aus C++-Code, den ein Compiler in einen ausführbaren Maschinencode übersetzt.7
Ist Python eine Assemblersprache?
Python ist fortschrittlicher als Assemblersprachen. Assemblersprachen gelten als niedrige Programmiersprachen, während höhere Sprachen wie C, Java oder Python Nullen und Einsen anstelle von Zahlen, Symbolen und Abkürzungen verwenden.
Wie werden Assemblersprachen heute verwendet?
Obwohl sie im Vergleich zu fortgeschritteneren Sprachen als niedrigere Sprachen gelten, werden Assemblersprachen immer noch verwendet. Assemblersprache wird verwendet, um Hardware direkt zu manipulieren, auf spezialisierte Prozessoranweisungen zuzugreifen oder kritische Leistungsprobleme zu bewerten. Diese Sprachen werden auch verwendet, um ihren Geschwindigkeitsvorteil gegenüber höheren Sprachen für zeitkritische Aktivitäten wie den Hochfrequenzhandel zu nutzen.