Assembler: Adresse eines Objekts negieren

Gast #2230587
Lesenswert?

Ich erstelle Assemblercode mit dem GCC.

Zur Errechnung eines Tabellenindex wollte ich das Pendant für die nicht 
vorhandenen Befehle addi und adci verwenden: subi und sbci. Also will 
ich den Subtrahend negiert angeben.

Leider macht mir der GCC hier ein paar Probleme, denn folgender Code
1
.text
2
  mov  XL, r16
3
  clr  XH
4
  subi  XL, lo8 (-TabellenAdresse)
5
  sbci  XH, hi8 (-TabellenAdresse)
6

7
...
8

9
TabellenAdresse:
10
  .byte  ..

wird nicht kompiliert:
1
can't resolve `0' {.data section} - `SetDigitAdr' {.text section}

Hat noch jemand eine Idee, wie ich das effizient hinkriegen kann?

Danke im Voraus!

Volker
Gast #2233287
Lesenswert?

Hat leider doch nicht geholfen.

Der Unterschied zw. pm_lo8 und lo8 ist lediglich, dass pm_xxx das 
Argument >>1 angibt, was aber - so mein Eindruck - beim GCC höchstens 
gebraucht werden könnte, wenn ich als Argument die Adresse eines 
Objektes zum Anspringen verwenden möchte (weil nur dann "halbe" 
Adressen verwendet werden). Insofern ist die Verwendung von lo8 (ohne 
pm) durchaus richtig.

Die Frage war viel eher ja nach einer Negationsmöglichkeit.

Ich habe es mittlerweile selbst hingekriegt durch die Benutzung eines 
Labels an Adresse 0.
1
.text
2
.org 0
3
Beginn:
4
   [r]jmp Main
5

6
...
7

8
Main:
9
  subi  XL, lo8 (Beginn-TabellenAdresse)
10
  sbci  XH, hi8 (Beginn-TabellenAdresse)
11

12
...
13

14
TabellenAdresse:
15
  .byte  ..

Da der GCC nun sowohl Minuend als auch Subtrahend im Segment .text 
"sieht", führt er die Operation fehlerfrei aus.

Somit geht es.

Vielleicht stolpert ja nochmal jemand über dieses Problem.

VG
Volker

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren