Variablen nur in Registern, zuviel gepoppe in Interrupts?

Gast #511899
Nabend,
Hab bisher Assembler programmiert und bin nun dabei mich in den GCC 
einzuarbeiten.
Was mir auffiel:
1. Variablen werden im Ram abgelegt, auch wenn ich zB nur eine brauche. 
Gibts ne Möglichkeit, die Variable als Register zu deklarieren?
2. Bei Interrupts werden erstmal R0, R1, R24, R25, R28, R29 gepusht, 
auch wenn ich sie nicht brauche und dann natürlich auch wieder gepoppt. 
Kann man das auch umgehen?
mfg pripri
Gast #511923
> 1. Variablen werden im Ram abgelegt, auch wenn ich zB nur eine brauche.
> Gibts ne Möglichkeit, die Variable als Register zu deklarieren?

Es gibt eine Möglichkeit (Forumsuche benutzen).

Aber(!) diese Möglichkeit möchtest du wahrscheinlich nicht benutzen, 
weil nicht garantiert ist, dass sie in einem Jahr noch funktioniert und 
weil sie dir vermutlich zu wenig Vorteile bringt um diese 
Inkompatibilitätsgefahr zu kompensieren.

Dadurch, dass du eine Hochsprache wie C benutzt, erhältst du eine 
gewisse Abstraktion. Das Konzept "Register" wird von dieser Abstraktion 
versteckt.
Deswegen ist es eher unnatürlich in C Variablen an bestimmte Register zu 
binden. Bei lokalen Variablen wird der Compiler selbstverständlich auch 
ohne besondere Hinweise Register nutzen. Je nach Verwendung und 
Optimierungseinstellungen wird er die Variable sogar komplett vom RAM 
fernhalten und ausschließlich in einem Register speichern.
#512296
pripri wrote:

> 2. Bei Interrupts werden erstmal R0, R1, R24, R25, R28, R29 gepusht,
> auch wenn ich sie nicht brauche und dann natürlich auch wieder gepoppt.

Nein, R24, R25, R28, R29 werden nur gepusht, wenn man sie auch braucht

Und das Geeiere mit R0, R1 hat historische Gründe.
Sie wurden als Null- bzw. Statussaveregister deklariert, aber können von 
LPM, MUL geändert werden.
Ein Wechsel z.B. auf R2, R3 wurde bisher nicht angegangen, also muß man 
damit leben.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.