Variablen und Registerverwendung für C Funktion ansehen

Gast #3560014
Lesenswert?

Hallo,

ich habe eine Funktion, die - natürlich - Variablen anlegt und 
verwendet. Nun möchte ich herausfinden, ob dafür die Register des AVR 
verwendet werden oder diese im SRAM abgelegt werden (oder beides).

Gibt es eine Möglichkeit zu sehen, wo der Compiler die Variablen 
"hinlegt"? Weil so in den Assemblercode zu schauen scheint mir etwas 
unübersichtlich ...

Viele Grüße,
Luke
Gast #3560264
Lesenswert?

Falls es sich um das GNU handelt:
Dazu gibt es, ich glaube im How-To oder in den FAQ, eine Beschreibung 
über die verwendeten Register im Zusammenhang mit "C". Darüber hinaus 
verhält sich das Teil wie jeder andere Compiler: Sind keine, dafür 
freigegebenen Register mehr verfügbar, so muss das RAM herhalten.
Moderator #3560407
Lesenswert?

Luke schrieb:
> Nun möchte ich herausfinden, ob dafür die Register des AVR
> verwendet werden oder diese im SRAM abgelegt werden (oder beides).

Außer der Ablage der Variable in einem Register oder im SRAM (statisch
oder Stack), gibt es noch weitere Möglichkeiten, was damit passieren
kann:

- Die Variable wird komplett eliminiert, weil ihr Inhalt nirgends
  benötigt wird.

- Eine oder mehrere Variablen werden durch eine oder mehrere neue
  Variablen mit anderem Inhalt, aber gleichem Informationsgehalt
  ersetzt.

Um all diese Fälle und die logischen Zusammenhäbge zu Gesicht zu
bekommen, führt praktisch nichts am Assemblercode vorbei.

Bei den GNU-Tools kann bekommt man mit den folgenden Compiler-Optionen
man ein Assemblerlisting mit wertvollen zusätzlichen Informationen
geliefert:
1
avr-gcc -mmcu=atmega8 -Os -c -fverbose-asm -Wa,-adhln -g avrtest.c >avrtest.lst

Es enthält:

- natürlich den Assemblercode selbst

- die C-Quellcodezeilen, aus denen der Assemblercode entstanden ist

- hinter den einzelnen Assemblerbefehlen als Kommentar die lokalen oder
  globalen Variablennamen, auf die sich die Befehlsargumente beziehen

Oftmals haben diese Variablen komische Namen, die im C-Programm gar
nicht auftauchen. Das sind dann entweder temporäre Variablen oder die
oben erwähnten Ersatzvariablen.

Alternativ dazu könntest du dir auch die RTL-Dumps anschauen, aber ohne
die genaue Kenntnis der Syntax sind diese noch viel schwerer als der
Assemblercode zu lesen.

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