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.