Was ist Assembler ?

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.


GluecklicheHuhn 
Beitragsersteller
 06.08.2016, 22:12

Das heißt ja das alles in echt aus 10010101011110001 besteht !

0
Mikkey  06.08.2016, 22:15
@GluecklicheHuhn

Natürlich.

Allerdings besteht "Zehn kleine Negerlein" auch aus 01101010110110001...

0

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.


GluecklicheHuhn 
Beitragsersteller
 06.08.2016, 22:14

Hab ich mir mal gedownloadet

0

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ß


androhecker  06.08.2016, 22:37

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.

0
androhecker  06.08.2016, 22:04

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.

1
Mikkey  06.08.2016, 22:12
@androhecker

Auch Funktionen sind keine Hochsprachenkonzepte, denn die Befehle

CALL, ENTER, LEAVE, RET gab es bereits auf dem 80286

0

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.

In der Art der verwendeten Befehle besteht der wesentliche Unterschied zu allen anderen Programmiersprachen. Während sich Befehle bei den Hochsprachen in der Übersetzung aus mehreren Anweisungen im endgültigen Code zusammensetzen, wird der Assemblerbefehl durch den Assembler lediglich in die entsprechende Binärform übersetzt. Weiterhin ersetzt der Assembler Variablen durch die entsprechenden Speicheradressen.

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.

Woher ich das weiß:Berufserfahrung – Langjährige Erfahrung als IT-Systemtechniker