mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Startpunkt im Code ASM


Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gut, jetzt hab ich's danke...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.