Startpunkt im Code ASM

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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.