Hallo, Wenn man Code in Assemblersprache schreibt, wird dieser ja in ein Hex-File übersetzt. Dabei werden die Mnemonics durch ihre entsprechenden Hex-Werte ersetzt. Nun frag ich mich, wie dieses Format genau aussieht. Bzw. was passiert mit den Parametern? Und wie führt der µC diesen Code aus? Wie verhindert er, dass Parameter nicht für Programmcode gehalten und ausgeführt werden? Nun lässt sich danach nicht sonderlich gut googlen, man findet nur "Bedienungsanleitungen" für Assembler und entsprechende Coding-Tutorials, nichts aber zu den Internas. Deswegen frag ich euch ;) Viele Grüße, Steffen
Vielen Dank für den Link. Ich les da herraus, dass manche Parameter mit in den Opcode hineingezogen werden können (zB LD A und LD B), manche aber auch einen Operanden haben können. Woher weis der µC dann, wie viele Bytes er "überspringen" muss? Und was passiert, wenn man durch eine falsche Adresse in einen Operand reinspringt?
Du kannst Google benutzen um Grundlageninfos zu finden wie CPUs Programmcode ausführen auf unterstem Level. Ob µC oder PC Prozessor spielt im Prinzip keine Rolle. Eine "Anleitung" wirst du nicht finden, weil kein Mensch HEX Code schreibt, die unterste sinnvolle Stufe für Menschen ist Assembler.
Das was du da fragst ist im Compiler integriert. Der Compiler muss wissen welche (hex)-nummer ein Assembler Befehl hat damit er das Assembler Programm richtig übersetzen kann. Er muss auch die Registernummern kennen etc.
>Woher weis der µC dann, wie viele Bytes er "überspringen" muss? Das ist eine Information die Teil des Opcodes ist. >Und was passiert, wenn man durch eine falsche Adresse in einen Operand >reinspringt? Der Prozessor wird diese Daten als Operationscode interpretieren. Es mag vielleicht hilfreich sein, diese Fragestellungen auch noch von der anderen Seite her zu untersuchen. Wie ist ein Prozessor aufgebaut? Wie werden Operationen auf diesem Level "ausgeführt"? Such mal mit Google. Von der daher ist die erste Frage auch so zu beantworten: Als Teil der Ausführung werden Operanden "geholt" (engl. to fetch) und dies hat wiederrum ein inkrement des Programmzählers (engl. Program Counter) als Teiloperation. So ergibt sich ein "überspringen" der Operanden. Die zweite Frage mag etwas genauer so beantwortet werden: An sich ist zwischen Operationskodes und Operanden im Speicher kein Unterschied zu sehen. Der Prozessor liest einen Wert egal ob er ursprünglich als Operand gedacht war oder als Befehl. Dies ist wieder ein Teil der Ausführung von Operation. Ist das zufällig ein Wert der sich als Operationscode interpretieren lässt, so wird die Operation ausgeführt.
Jack schrieb: > ... weil kein Mensch HEX Code schreibt, die unterste sinnvolle Stufe für > Menschen ist Assembler. Mein erstes Programm habe ich tatsächlich im Hex Format in einen KIM (6502 CPU) getippt. Auch beim C64 habe ich kleine Sachen in Hex programmiert. Allerdings beinhalten die Opcodes vom 6502 keine Parameter, deshalb war es egal, ob man LDA oder A9 schreibt.
Ja. So ging's auch bei mir. Allerdings mit dem Junior Computer von Elektor; auch ein 6502.
>Was man sich so alles antun kann
Das hat man damals nicht so empfunden. Im Gegenteil. Ich hab in der
U-Bahn Listings gelesen und auch sonst jede freie Minute irgendwie über
das Zeug gegrübelt, wie und warum uswusf. und ein, oder zwei Leute
gekannt, mit denen ich darüber geredet habe und wir entwickelten sogar
Witze über das Thema. Irgendwelche absurden Befehle oder Mechaniken.
Hi >>Was man sich so alles antun kann >Das hat man damals nicht so empfunden. Im Gegenteil. Genau. Der erste 'Computer' mit dem ich zu tun hatte. war der http://www.kc85.de/lerncomp.html#Poly%20880 Da sieht man kleinliche Diskussionen über vor- und Nachteile von IDEs in einem anderen Licht. MfG Spess
Ich habe auch so einen Poly zu Hause. Bin mal in der Ausbildung mit dem in Berührung gekommen und wollte sowas wieder haben ;) Man kann schon viel mit so einem Gerät lernen und probieren, wie PIO-Programmierung etc.. oder die Interruptmöglichkeiten und -bearbeitung. Um Einblick in die Funktion zu bekommen, ideal.... Im sogenannten Einzelschrittbetrieb kann man an dem Gerät den Zustand jedes Bits von Adress-, Steuer- u. Datenbus sehen.... Sven
http://softwareschmiede-schmidt.de/seite14.html mit soetwas(änhlichem) inclusive Magnetkarten 128 Befehls~ und 128 Datenregister und umgeehrt polnischer Notation begann es bei mir. Der Lerncomputer war auch mal kurz aufgetaucht Mein erster eigener war der ATARI 800 XL und maschinencodierte Programme gab man mit einem Monitor ein. Namaste
Also um zur ursprünglichen Frage zurück zu kommen. Typischerweise kann man Microprozessoren als Automaten ansehen. Ein Automat ist ein Konstrukt, welches auf eine Vorherbestimmte Art und Weise zwischen Zuständen wechselt. Technisch kann man das beispielsweise über ein ROM erreichen, bei dem man die Datenleitungen über eine Reihe von D-Flipflops zum Adressbus zurückführt. Besser vorstellen kann man sich das vielleicht als Brettspiel oder Modelleisenbahn. Man hat die Spielfigur / den Zug, welcher zwischen unterschiedlichen Punkten (=Zuständen) auf bestimmten Linien fahren kann. Spielregeln oder Weichen bestimmen wo hin es geht. Bei einem Mikrocontroller kann das nun beispielsweise so aussehen. Es gibt einen Startpunkt "Befehl lesen". An diesen Punkt legt der Mikroprozessor den Programmzeiger auf den Adressbus, und holt sich das was vom Speicher zurückkommt in das Befehlsregister. Abhängig von dem Wert in dem Register geht er nun in zahlreiche andere Zustände. Je nach Zustand macht er dann was anderes, beispielsweise noch ein Befehlswort laden, oder 2 Zahlen addieren. Irgendwann kommt der dann wieder in den Zustand "Befehl lesen" und er ließt den nächsten Befehl.
Hier vielleicht mal ein schöner Vortrag. http://media.ccc.de/browse/congress/2010/27c3-4159-en-reverse_engineering_mos_6502.html
Hey, wie es dann weitergeht, siehe "Mikrocode/Mikrobefehle" http://de.wikipedia.org/wiki/Mikrobefehl Yve.
Hier stehen die Bit vom Code mit drin. In Hex kannst Du sie ja dann umwandeln. http://www.avr-roboter.de/controller/befehle/beschreibung/beschreibung.html
MarioT schrieb: > Hier stehen die Bit vom Code mit drin. In Hex kannst Du sie ja dann > umwandeln. > http://www.avr-roboter.de/controller/befehle/beschreibung/beschreibung.html Die stehen auch in der Hilfe zum AVR-Studio. ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.