Startpunkt im Code ASM

Gast #855980
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
#855988
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.

...
Gast #855991
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.
#856013
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

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