www.mikrocontroller.net

Forum: Compiler & IDEs Relative Adressen in Assembler mit anschließendem Linken?


Autor: joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
ich moechte ein Teil meines Programmes in C und einen in Assembler 
schreiben. Ich kompiliere und linke es mit der GNU-Toolchain. Zum Linken 
benutze ich ein Linker-Script. Leider unterstuetzt meine Architektur nur 
relative branches, jumps and calls, bisher habe ich aber nur rausfinden 
koennen, wie ich absoulte Adressen verwenden. Als  ein
 jmpl main
wird assembliert mit der absoluten Adresse (ich brauche aber die 
realtive) und mein Versuch
 jmpl . - main
laesst sich nicht assemblieren, da der Assembler zwar die Section des 
aktuellen PCs (den allein kann ich auch richtig laden) findet, die von 
main aber UNKNOWN ist.
Gibt es irgendeinen Befehl, der eine relative Adressierung anweist oder 
einen Trick, wie man die Section kommuniziert?

Danke und Gruss,
Joern

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir scheint, da ist ein prinzipieller Denkfehler.

Um dem auf den Grund zu gehen, solltest du dich erst mal darüber äußern, 
mit was für einem Prozessor du es zu tun hast.

Autor: joern (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Oh, ja, habe ich vergessen, ist der LEON3, eine SPARC ISA 
Implementierung. Also im wesentlichen ein SPARC.
Es mag auch gern ein Denkfehler sein, ich weiß es halt nicht ganz genau.
Mein Problem ist im Moment, dass der Assembler oder Linker meine Labels 
als absolute Adressen behandelt, waehrend ich fuer die meisten Befehle 
relative brauche. Gibt es da irgendeinen Pseudobefehl in Assembler, ne 
Einstellung im Linker, einen Grund, warum es nicht geht und ich die 
Adressen erst mit weiteren Befehlen berechnen muss?
Angehaengt habe ich mal die Assembler-Datei und den Program-Dump.
Gruss, Joern

Autor: joern (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal der Object-Dump.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und woraus schließt du, daß jmpl main mit absoluter Adresse assembliert 
wird?

Ist simple.s der Quellfile für deinen ASM-Teil?

Wenn ja, warum ist main nicht als externe Referenz deklariert?

Autor: joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, es ist die Quelldatei, aber ich hatte 
http://docs.sun.com/app/docs/doc/816-1681/pseudoop... so 
verstanden, als mache es keinen Unterschied und tatsaechlich macht es 
auch keinen. Mit oder ohne global-Deklaration findet der Linker das und 
traegt eine absolute Adresse ein obgleich ich die relative brauche.

Gruss, Joern

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mit oder ohne global-Deklaration findet der Linker das und
> traegt eine absolute Adresse ein obgleich ich die relative brauche.

Und warum brauchst eine relative Adresse?

Autor: joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf der Suche nach einem Dokument, das das Verhalten von branches in 
SPARC Assembler beschreibt habe ich gerade folgendes gefunden:
http://www.cs.princeton.edu/courses/archive/spr03/...
Ich glaube, ich weiß jetzt, wo mein Denkfehler liegt. Der opcode eines 
Branches kodiert diesen relativ ("target is a PC-relative address.") im 
Assembler gibt man aber natuerlich Labels an und die haben eine absoulte 
Adresse. Ich dachte, object-dump gibt die relative Adresse wieder, waere 
aber ja totaler Quatsch. Ich fuerchte, ich habe mich schon zuviel mit 
den Opcodes herumgeaergert...
Also vielen Dank fuer die Zweifel, ich werde spaeter mal einen 
Programmdurchlauf simulieren und mich nochmal melden, sollte es 
widererwartend doch nicht funktionieren!

Gruss, Joern

Autor: falko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuche es mal mit -fpic

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.