Forum: Mikrocontroller und Digitale Elektronik Wie führt ein µC den Code im hex-format aus?


von Steffen (Gast)


Lesenswert?

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

von Markus M. (mark_m)


Lesenswert?


von Steffen (Gast)


Lesenswert?

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?

von Jack (Gast)


Lesenswert?

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.

von Jack (Gast)


Lesenswert?

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.

von Guru (Gast)


Lesenswert?

>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.

von Herr M. (herrmueller)


Lesenswert?

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.

von Guru (Gast)


Lesenswert?

Ja. So ging's auch bei mir. Allerdings mit dem Junior Computer von 
Elektor; auch ein 6502.

von Jack (Gast)


Lesenswert?

Was man sich so alles antun kann :P

von Guru (Gast)


Lesenswert?

>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.

von spess53 (Gast)


Lesenswert?

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

von Sven H. (reiter111)


Lesenswert?

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

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

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

von Christian B. (casandro)


Lesenswert?

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.

von Christian B. (casandro)


Lesenswert?


von Yvonne J. (laserlight)


Lesenswert?

Hey,

wie es dann weitergeht, siehe "Mikrocode/Mikrobefehle"

http://de.wikipedia.org/wiki/Mikrobefehl

Yve.

von MarioT (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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
Noch kein Account? Hier anmelden.