Assembler Labels in Makros?

LotadaC

Sehr aktives Mitglied
22. Jan. 2009
3.547
70
48
Marwitz
Sprachen
  1. BascomAVR
  2. Assembler
Hi,

für sich wiederholende kürze(*) Codeblöcke kann man ja Makros definieren, sogar mit bis zu zehn Parametern.
Aber wie realisiert man Sprünge innerhalb eines Makros?
Selbst ein konventioneller relativer Sprung tut ja nicht das, was er eigentlich soll.

(*) meist sind Subroutinen kleiner, was den gesamt-Flash betrifft, kosten aber jedesmal den Aufruf und die Rückkehr, was die Zeit betrifft. (Und 'ne Adresse auf dem Stack)
 
Ich denke mal du musst in Macros anstelle mit Labels mit dem Programmcounter arbeiten.

Also zum Beispiel bei einem relativen Sprung
rjmp pc+2
oder
breq pc-1
 
Danke,

hab mir jetzt mal die dort zu inkludierende "Definitionsdatei" angesehen.
Prinzipiell wird dort der Weg mit dem PC genutzt, allerdings nicht direkt relativ (->Dirk, bzw wie RJMP etc eigentlich mit immediates arbeiten müßte), sondern es werden mit .equ neue Variablen erstellt, die dann als absolute Sprungadressen (wie RJMP etc tatsächlich arbeitet) verwendet werden.
Um mehrere Instanzen eines Makros zu ermöglichen, muß dem Makro beim Aufruf ein Identifier als Parameter mitgegeben werden, der dann in die Generierung der Variablen (Adresspointer) miteinbezogen werden (->DO), bzw zu dem gesprungen wird (->LOOP).

Quintessenz: Will ich innerhalb einer Instanz eines Makros relativ springen, sollte ich Dirks Vorschlag nutzen können (also mir aus dem PC und meiner relativen Sprungweite die absolute Adresse erzeugen zu lassen, um dann mit RJMP (Relative Jump) auf die absolute Adresse springen zu können.
Soll zwischen Makros/Instanzen gesprungen werden, muß man Sprungziel-Variablen in Form von absoluten Adressen erzeugen, um diese anspringen zu lassen.
Der Sprung aus einem Makro auf ein bekanntes Label (=absolute Adresse) ist trivial.

(Hat eigentlich irgendwer 'ne Vermutung, WARUM die ganzen relativen Sprünge so irreführend (absolut) implementiert sein könnten?
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)