Wie arbeitet ein Assembler (auf sehr grundlegender Ebene) bei der Übersetzung der Assemblersprache in Maschinencode?
[Mein Verständnis ist, dass, wenn ein Programm geschrieben wird, es in Text geschrieben wird und Assembler diese "Texte" dann in Bits umwandelt, die der Computer versteht. Wenn ich zum Beispiel MOV A, B geschrieben habe, wird dies mit Hilfe der "Tastatur" (in 0s & 1s, die im Grunde elektrische Impulse sind) im Speicher gespeichert. Da diese gespeicherten Bits nun Bits enthalten, die Alphabeten wie 'M', 'O', 'V' (dem ASCII-Code) usw. entsprechen, vergleicht der Assembler nun diese im Speicher gespeicherten Bits (die sind entsprechend den "Texten") zu den bereits in "Assembler" gespeicherten Bits. Die Textbits (MOV…) passen also zu einigen dieser Assemblerbits (von vielen Bitgruppen, die mit anderen Schlüsselwörtern wie MVI, ADD ) und als Ergebnis dieser Vergleiche wird "opcode" in Bezug auf "MOV"-Text ausgegeben. Liege ich richtig oder ist das eine falsche Denkweise? ]
Tatsächlich wird die 'Konvertierung' zwischen der vom Benutzer eingegebenen Textdatei und dem tatsächlichen (binären) Assembly-/ausführbaren Code von einem speziellen Programm durchgeführt, das als Assembler bezeichnet wird.
Es ist ein Textparser, der den gesamten Text stückweise parst (z. B. zuerst 'MOV', dann seine Operanden/Argumente. Einer nach dem anderen wird übersetzt (und Elemente können bei Bedarf gespeichert werden).
Parses basieren auf Regeln, wenn also zB 'M', 'O', 'V' in einer Textdatei gefunden wird, weiß es, dass es zB in Opcode 0x40 übersetzt werden muss. Und es weiß auch, was danach zu erwarten ist (Argumente). Wenn diese korrekt sind, werden diese Argumente übersetzt, andernfalls wird eine Fehlermeldung angezeigt.
Auch die Optimierung erfolgt innerhalb des Assemblers und andere Einstellungen, die den Binärcode betreffen.
Update (lt. Kommentar):
Schritte:
jonk
Nanda Sinha
jonk
Nanda Sinha
jonk