> Wenn Du ein lesbares Assemblerlisting willst, dann muß
> -g unbedingt drin sein, damit Du die zugehörenden C-Zeilen
> siehst.
Das ist die Frage der Definition von ,,lesbar''.
> Ein Listing sieht dann z.B. so aus (siehe Anhang).
Das ist kein Assemblerlisting, sondern ein Disassemblerlisting.
Das hat schon ein paar Unterschiede.
> Nur die Tabelle der Initialisierungswerte erscheint ulkiger
> Weise nicht im Listing.
Das ist einer der Artefakte, die man damit bekommt: man dröselt
ja die ganze Chose von hinten auf, folglich sieht man nur den
C-Code, für den es im Objektcode auch Debug-Informationen gab.
Die Initialisierung dagegen hat keinerlei Symbole dranhängen,
damit sieht der Disassembler sie nicht mehr. Bei bestimmten
Optimierungen kann die Ausgabe auch ziemlich konfus aussehen,
weil ein Compiler, je ,,RISCiger'' ein Prozessor ist, um so mehr
Verbiegungen am generierten Code vornimmt, um ihn optimal auf
den Prozessor anzupassen. Nun ist der AVR eigentlich nicht sehr
RISCig, aber eben schon drastisch mehr als das i386-Gerödel, das
an vom PC her kennt, und bei dem der Compiler sowieso unter
ständigem Registermangel leidet und danher nahezu alle Variablen
auch im RAM hält. Bei ,,großen'' RISC-Maschinen kommt noch hinzu,
dass sie Register- und Speicheroperationen (letztere brauchen wie
auch beim AVR länger) effektiv ineinander schachteln können, um
die Ausführungszeit zu verkürzen. Dann ,,hüpft'' der Objektcode
im Vergleich zum C-Code sehr oft nur noch hin und her. Ein
Disassemblerlisting mit eingeflochtenem C-Code sieht auf so einer
Maschine wahrscheinlich deutlich unübersichtlicher aus, als wenn
man sich gleich in den generierten Assemblercode vertiefen würde
und versucht, ihn zu verstehen. (Letzteres habe ich zu Motorola
m88k-Zeiten gemacht. Ein Disassemblerlisting mit C-Code habe
ich mir dafür nie angeguckt.)