Was ist Assembler ?
Ich wollte mich mal ein bisschen über die Programmiersprache Assembler informieren.
Erstens würde ich gerne Wissen was es mit diesen verschiedenen Arten auf sich hat von Assemblersprachen. Irgendwie gibt es da wohl tausende für verschiedenste Systeme(?) und ist dann da immer die Syntax komplett anders oder was? Oder gibt es da nur für verschiedene Sachen (z.B. Hello World) verschiedene Methoden und trotzdem die gleiche Syntax? Also ich habe mir NASM als Übersetzer, Assembler, Kompilierer(?) geholt und kann Assembler Geschreibel in richtige Dateien umwandeln. Doch nun kommt es: In diesen Dateien wenn ich sie mit einem Editor öffne sind gar keine Nullen und Einsen (Wie ich es erwartet hätte bei Assembler weil es ja auch bei Wiki und so steht) sondern irgendein normales, wirres .exe-Gedöns: "ê| ú¸ ŽÐ¼ û¸ ŽÀŽØˆ)|è) ¸ ŽÀŽØê " was ich halt echt nicht verstehe. Denn das ist doch das was Assembler so geil macht. Aber vor allem konnte ich bisher kein einziges Assembler Programm z.B. in der Terminal ausführen. Ob ich es jetzt zu .bin oder .exe oder so gemacht hab. Aber man kann ja diese komische "Programmiersprache", Assembler auch nicht irgendwie installieren dass es da bestimmte Datei-Endungen gibt und so.
Bitte erklärt mir das und sagt mir wie ich AS-Syntax zu 01110100 fuchteln kann und ausführen kann. Wiederum nicht dass ganze Gejammer dass Assembler eine schwere Sprache ist und und und. Ich will ja nur Wissen wie das alles aufgebaut ist.
Danke.
11 Antworten
Diese "exe-Gedöns" ist doch gerade das, was Du mit Assembler erzeugst.
Die Syntax ist bei allen Assemblern eigentlich dieselbe:
Ein Prozessor-Befehls-Mnemonic gefolgt von keinem oder den dazugehörigen Parametern. Diese Parameter sind Register, Speicheradressen (Variablen) oder feste Werte, bei Sprüngen auch Zielmarken, die später in Befehlsadressen umgerechnet werden.
Der Assembler transferiert die Folge solcher Befehle in eben jenes exe-Gedöns. Dabei ist "ê| ú¸ ŽÐ¼ û¸ ŽÀŽØˆ" eben auch nur eine Darstellung der Daten.
Natürlich.
Allerdings besteht "Zehn kleine Negerlein" auch aus 01101010110110001...
Nun da sich der direkte Maschinencode ja aus Nullen und Einsen zusammensetzt (also aus Binär Zahlen) muss der Editor der ja nicht weiß das es sich um einen direkten Binär Code handelt diese Nullen und Einsen interpretieren das tut er in dem er die Nullen und Einsen nimmt und in 8er Gruppen zusammenfasst, sodass sich daraus eine Zahl zwischen 0 und 255 ergibt. Jede Zahl steht aber dann im ASCII System für ein Zeichen und das wird dir dann statt der Nullen und Einsen dargestellt.
Wenn Du also einen Binärcode direkt anzeigen lassen willst, dann musst du auch einen Binäreditor zum anzeigen der Dateien verwenden.
ich weiß nur das man als Assembler eine Maschinensprache bezeichnet.
Ist also sowas wie ein Oberbegriff für Maschinensprache und eine der gängigsten ist C wo du hardwarenahe programmieren kannst, der Kompiler übersetzt dann nur z.B. eine Objektorientierte Sprache wie z.B. Python/Java usw. in die Assemblersprache. Irgendwie so.. (korrigiert mich falls ich falsch liege, weil so hab ich es verstanden)
Gruß
Nein, weder sind Assemblersprachen Maschinensprache noch ist C eine Assemblersprache. Maschinensprache ist einfach nur CPU Anweisungen aus Nullen ind Einsen, die kann man nur schwer lesen. Assemblersprachen haben für solche schwer verständlichen Anweisungen normale Wörter, welche besser zu verstehen sind. C ist eine Hochsprache welche kompiliert werden muss, da sie Hochsprachenkonzepte wie Funktionen einbringt, welche die CPU nicht kennt.
Auch Funktionen sind keine Hochsprachenkonzepte, denn die Befehle
CALL, ENTER, LEAVE, RET gab es bereits auf dem 80286
Doch, das schon. Irgendwie muss man Funktionen ja umsetzen. In einer Assemblersprache kann man jedenfalls keine Funktionen wie in Hochsprachen schreiben, da muss man sich die Funktion "Funktion" "selbst schreiben", aber Funktionen mit Namen, Parametern etc gibt es nicht.
Ein Assemblerbefehl war (ist) z.B.
MVC A,B
Das bedeutet, dass der Inhalt der Speicherstelle B nach A übertragen wird (alter IBM-Assembler).
MVC steht für Move Characters.
Ich weiß den Maschinenbefehl von MVC nicht mehr auswendig (F2 oder D2 ?). Dahinter steht dann die Länge des Empfangsfelds, das im Bestimmungsteil des Programms abgelegt ist, und wieder dahinter die Adressen der Speicherstellen (meist noch durch Registerinhalte modifiziert).
Das macht der Programmierer nicht selber, sondern ein Programm, das dann auch "Assembler" heißt. Im Maschinencode nimmt dann so ein Befehl 1 bis 4 Bytes ein - je nach Komplexität.
Was haben wir damals herumoptimiert, um Speicherplatz zu sparen. Teile des Maschinencodes wurden sogar als Längenschlüssel verwendet.
Und heute? ...
Mein erstes Assemblerprogramm hieß SOAP (Self Optimalizing Assembling Program) und verwaltete einen sich drehenden Trommelspeicher, damit dieser immer die richtige Stellung für den nächsten Befehl hatte. Dieser hatte 10.000 Speicherplätze. Das war noch vor der Erfindung von "MVC".
Ein Assembler ist ein Übersetzer für Programmcode, der sich aus Maschinenbefehlen zusammensetzt. Diese Befehle können sich je nach
verwendeten Prozessor stark unterscheiden.
Zitat aus http://assembler.hpfsc.de/
Man schreibt also keine Nullen und Einsen, sondern nutzt eine Befehlssyntax. Der Assembler übersetzt dann die Befehle auf direktem Weg in Nullen und Einsen (mal vereinfacht ausgedrückt), also in direkte Anweisungen für den Prozessor. Man spricht deshalb von hardwarenaher Programmierung (im Gegensatz zu Hochsprachen).
Hier gibt es ein Online-Buch für Anfänger:
https://de.wikibooks.org/wiki/Assembler-Programmierung_f%C3%BCr_x86-Prozessoren
und hier ein PDF:
http://avr-asm-download.de/beginner_de.pdf
Du findest im Netz noch viele weitere Informationen, ggf. solltest Du Dir auch ein gutes Anfänger-Buch kaufen, vielleicht gibt es eine gute Buchhandlung in Deiner Nähe, die entspr. Literatur anbietet.
Das heißt ja das alles in echt aus 10010101011110001 besteht !