Forum: Compiler & IDEs Mit Sprungmarke in Assembler rechnen


von Benedikt (Gast)


Lesenswert?

Ich versuche ein Assembler Programm mit einer Sprungtabelle als
Assemblerprogramm in ein C Programm (AVR GCC 4.1.1) einzubinden.
Im orginalen Programm in AVR Studio Assembler funktionierte das:

subi ZL, low(-comp)
sbci ZH, high(-comp)

comp ist eine Sprungmarke ein paar Zeilen weiter unten in derselben
Funktion.

Das ganze habe ich schon an den GCC Assembler angepasst:

subi ZL, lo8(-comp)
sbci ZH, hi8(-comp)

aber anscheinend kann das der Assembler nicht auswerten:

tvgen.S:40: Error: can't resolve `L0' {*ABS* section} - `com {.text
section}
tvgen.S:40: Error: expression too complex
tvgen.S:41: Error: can't resolve `L0' {*ABS* section} - `com'
{.text section}
tvgen.S:41: Error: expression too complex

Ohne das - vor comp funktioniert das ganze (was aber eben ein falsches
Ergebnis liefert).

Als workaround könnte ich comp über ldi erst in Register laden und dann
aufaddieren, aber wiso soll ich Rechenzeit und Register für Operationen
verschwenden die schon zu Compilezeit feststehen ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Schreib mal lo8(-(comp)), ich glaube mich zu entsinnen, dass das
den Knoten auflöst.

von mr.chip (Gast)


Lesenswert?

Hallo

Ja, lo8 und hi8 für die oberen und unteren Bytes.

Gruss

Michael

von Benedikt (Gast)


Lesenswert?

Die Klammern bringen leider überhaupt nichts, das war das erste was ich
ausprobiert hatte. Auch das Makro pm() funktioniert nicht. (Dieses
scheint den Wert nur durch 2 zu teilen, da die Sprungmarken
Byteadressen sind, IJMP aber Wordadressen braucht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Schreib mal das ganze Testprogramm hier auf.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

In Zeile 47&48 auskommentiert.
Ich habe dieses vorübergehend durch den Code in Zeilen 39-45 ersetzt.
Das Ergebnis ist das selbe, nur dass ich das ganze jetzt zur Laufzeit
berechne, was mir nicht wirklich gefällt.

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.