Forum: Mikrocontroller und Digitale Elektronik Startpunkt im Code ASM


von Karsten (Gast)


Lesenswert?

Hallo zusammen,
bin noch ziemlich neu in der Mikrocontrollerwelt und hab mir nun mal 
eure Seite angesehen und versucht ein paar kleine Programme in ASM 
umzusetzten. Mein Problem liegr beim Programmaufbau.
Ich hab das so verstanden.
Erstmal kommen includes und Definitionen usw.
Danach ein paar Funktion und meistens erst später das Hauptprogramm.
Aber woher weiß der Controller wo der Einsprungpunkt im Programm ist,
ist das das Schlüsselwort main? Weil ich auch schon Programme gesehen 
habe wo das "Haupt:" heißt...

Vielen Dank schon mal für eure Antworten

von Hannes L. (hannes)


Lesenswert?

> Aber woher weiß der Controller wo der Einsprungpunkt im Programm ist,

Das ist zwischen Przessorhersteller und Programmierer vereinbart und 
steht im Datenblatt.

Beim AVR z.B. wird mit dem Befehl begonnen, der an Adresse 0 im 
Programmspeicher (Flash) steht. Damit auch Interrupts verarbeitet werden 
können, sind die folgenden Adressen als Einsprung für die Interrupts 
reserviert. Einfach mal im Datenblatt unter Reset und Interrupt-Vektoren 
nachsehen, da steht alles drin. Weitere Infos gibt es im AVR-Tutorial.

> ist das das Schlüsselwort main? Weil ich auch schon Programme gesehen
> habe wo das "Haupt:" heißt...

Das gilt wohl für Hochsprachen-Quelltexcte, damit der Compiler weiß, wo 
und wie er übersetzen soll. Das hat aber nichts mit ASM zu tun.

...

von Gast (Gast)


Lesenswert?

Ich weiß nicht ob es bei allen MC bzw. allen Compilern gleich ist. 
Normalerweise gibt es im MC eine Tabelle, in der die Adresse hinterlegt 
ist an der das Programm anfängt. Dort kann ein Name einer Funktion 
eingetragen werden. Der Compiler trägt die Adresse automatisch ein. 
Meist wird der Name "Main" gewählt.

von Peter D. (peda)


Lesenswert?

Karsten wrote:

> Aber woher weiß der Controller wo der Einsprungpunkt im Programm ist,
> ist das das Schlüsselwort main? Weil ich auch schon Programme gesehen
> habe wo das "Haupt:" heißt...

Der Controller weiß es durch das Poweron-Reset, damit springt er zum 
Resetvektor und macht dort los.

D.h. in Deinem Assemblerprogramm muß am Resetvektor ein gültiger Befehl 
stehen, üblicher Weise ein JUMP-Befehl zu Deinem Init-Krams.
Danach läuft man in den Main-Krams (Endlosschleife) und danach plaziert 
man die Unterfunktionen.

Beim AVR ist der Resetvektor 0x0000. Startest Du den Assemblerlauf, ist 
schon das Codesegment ausgewählt und auf Adresse 0x0000 gesetzt.

D.h. der erste Befehl in Deinem Quelltext wird nach einem Reset 
ausgeführt.


Peter

von Karsten (Gast)


Lesenswert?

gut, jetzt hab ich's danke...

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.