Wie führt ein µC den Code im hex-format aus?

Gast #2166972
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
Gast #2166983
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?
Gast #2166984
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.
Gast #2166985
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.
Gast #2166987
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.
#2166995
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.
Gast #2167002
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.
#2167018
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
(Firma: Nisch-Aufzüge) Persönliche Seite #2167030
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
#2167041
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren