Forum: Mikrocontroller und Digitale Elektronik MPLAB - Makro für PC-relative Addresse


von Thomas E. (picalic)


Lesenswert?

Servus zusammen,

bin gerade dabei, mein altes PICALIC-Projekt auf Enhanced-Mode PICs 
umzustellen, mit ein paar Verbesserungen natürlich.
Für den Befehls-Interpreter möchte ich von absoluten Sprungadressen auf 
PC-relative Sprünge umstellen, und stehe dabei vor einem eigentlich 
trivialen Problem - der Assembler mag bei der Adresse keine 1 
subtrahieren!

Die Befehlscodes werden durch Assembler-Macros erzeugt, ein absoluter 
Sprungbefehl z.B. so:
1
JUMP   macro  addr
2
  dw  OPC_JUMP,addr
3
  endm

Für relative Addressierung würde es mit "addr-$" funktionieren:
1
JUMP   macro  addr
2
  dw  OPC_JUMP,addr-$
3
  endm

Nun wäre allerdings für den Codeinterpreter die Rechnung mit einem 
Programmzähler-Vorlauf besser, da der Programmzähler schon incrementiert 
ist, wenn der Interpreter die Addition durchführt. Ich bräuchte also:
1
JUMP   macro  addr
2
  dw  OPC_JUMP,addr-1-$
3
  endm
Nur leider schmeißt der ASM mir da den Fehler:
"Operand contains unresolvable labels or is too complex"

Irgenwie stehe ich da gerade auf dem Schlauch - hat jemand eine Idee, 
wie ich das hinbekomme?

Danke!

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Hihi - ausgetrickst! Habe es jetzt so hinbekommen:
1
JUMP   macro  addr
2
  dw  OPC_JUMP,(addr-label)-($-label)-1
3
  endm
wobei "label" ein beliebiges Label innerhalb der aktuellen Code-Section 
ist.

: Bearbeitet durch User
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.