Forum: Compiler & IDEs Assembler: Adresse eines Objekts negieren


von Volker (Gast)


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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

pm_lo8 und pm_hi8

von Volker (Gast)


Lesenswert?

Perfekt, danke!

Und wie bist Du darauf gekommen? Ich hab mir 'nen Wolf gesucht...

Volker

von Johann L. (gjlayde) Benutzerseite


Lesenswert?


von Volker (Gast)


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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Und das?
1
subi  XL, lo8(-(TabellenAdresse))
2
sbci  XH, hi8(-(TabellenAdresse))

Section für Daten im Flash wäre übrigen eher sowas anstatt .text:
1
.section .progmem.data,"a",@progbits

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.