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!