Forum: Compiler & IDEs Label Zuweisung für Register xy in C unter GCC


von Siegfried S. (dieleena)


Lesenswert?

Hallo,
arbeite an einem Projekt mit mega8 in C unter GCC
Die Variablen mochte ich gerne den Register 1 bis 24 zuweisen.
Ein Beispiel in Assember
.def   Zaehler  =  r25
Wie mache ich dieses in C ?
Gruß Siegfried

von Simon K. (simon) Benutzerseite


Lesenswert?

Warum willst du das machen? In C verwaltet der Compiler die Speicherorte 
von Variablen, da hast du nix mit am Hut.

von Markus E. (engelmarkus)


Lesenswert?

Also ich bin mir nicht sicher, ob das das ist, was du willst:
1
register unsigned char zaehler asm("r3");

Allerdings darfst du das nur mit den Registern r2-r7 machen, die anderen 
werden von GCC z. B. für die Parameter-Übergabe verwendet.

von (prx) A. K. (prx)


Lesenswert?

Siegfried Saueressig schrieb:

> Wie mache ich dieses in C ?

Das machst du vorzugsweise überhaupt nicht.

Rein technisch ist es möglich, wie grad beschrieben, aber das sollte man 
allenfalls machen, wenn man schon ein paar Jahre drinsteckt. Das Risiko, 
dass man sich dabei eine Zeitbombe einhandelt, ist erheblich. Auch diese 
r2-r7 sind nämlich keineswegs frei.

von Siegfried S. (dieleena)


Lesenswert?

Hallo,

Vorab mochte ich sagen, das ich mit " GCC" noch nicht gearbeitet habe.

Die Variable "zaehler" ist im SRAM an Adresse 0x008A angelegt.
Habe mir ein Teil im Disassembler angesehen. Dort finde ich immer wieder 
die Ragister 0, 1, 24, 25 die der Compiler benutzt.

Hier ein paar Zeilen aus dem disassember
217:      zaehler ++;
+0000035F:   9180008A  LDS     R24,0x008A       Load direct from data 
space
+00000361:   5F8F      SUBI    R24,0xFF         Subtract immediate
+00000362:   9380008A  STS     0x008A,R24       Store direct to data 
space

Wie hier zu sehen ist, macht der Compiler 3 Befehle für eine einfache 
erhöhung einer Variable. es würde doch reichen mit diesem "inc" Befehl.

Ich hoffe, das ich hier keinen Unsinn schreibe.

Gruß Siegfried

von (prx) A. K. (prx)


Lesenswert?

Lass dem Compiler was des Compilers ist. Ohne Erfahrung mit dem Compiler 
schaufelst du dir bei solchen Versuchen nur dein eigenes Grab.

Hast du mit diesem Code ästhetische Problem oder bist du wirklich bei 
der Performance am Limit?

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.