PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Code Analysis / Reverse engineering



PicNick
03.05.2005, 10:49
Hi Freaks !

Um mir für die Diskussionen um Compiler-Geschwindigkeiten Argumente zu verschaffen, hab ich begonnen, mir einen HEX-file Analyzer zu schreiben, der mir den vom Compiler generierten Code ein bißchen auftröselt
Im Attachment als Beispiel eine Vergleich dreier Schleifen-Konstruktionen (FOR, DO, WHILE) und was der BasCom daraus macht.

Wenn eine ein bißchen Assembler kann, ist das Zeugs ganz gut lesbar.


--> Moderator: Vielleicht ist das ja auch eine "Projekt-Vorstellung", was weiß denn ich ß

03.05.2005, 13:30
kannste denn den anhang nochmal reinstelln? der iss nicht mit drinne

PicNick
03.05.2005, 13:49
Als Gast siehst du nix. Du mußt dich registrieren lassen
(tut garnicht weh, hab' ich gehört)

PicNick
03.05.2005, 14:48
Obwohl der WinAvr die *.lss Liste erzeugt, in der er den generierten Code darstellt, hab ich trotzdem zum Vergleich die C-Variante erzeugt.
Ich hab aber keinen "print" in die Bodies reingestellt, da der ja als Funktionsaufruf zuviel Zusätzliches generieren und das Schleifenkonstrukt schwerer erkennbar machen würde.
Und den Optimizer hab ich natürlich abgedreht.

Man sieht schon einige Unterschiede, wie die Herren Compiler das so im Detail machen.

JanB
03.05.2005, 15:02
Hallo,
schön aufgedröselt !
Stell doch noch den RAM / Flash Verbrauch, und die Laufzeit gegenüber.
Und evtl. noch zum Vergleich, was man in Assembler schreiben würde.

Gruß Jan

PicNick
03.05.2005, 15:11
Hi, Jan
Ich werd auch ein Programm in Bascom UND C schreiben, da kann man das dann in etwa vergleichen. Laufzeit ist so 'ne Sache, wahrscheinlich einfach unterm Strich über den PC, nach genügend Cycles.
Was ich aber schon gesehen habe, beim Interuppt ist der BasCom ein Tier, er pusht und popt wirklich alle register von links nach rechts.
Und bei "Nosave" gleich garnix. Na ja.

JanB
03.05.2005, 15:45
Hi Robert,
bei so kleinen Schleifen kannst du die Laufzeit doch
über die Anzahl der Takte feststellen. Die meisten
Avr-Befehle brauchen einen Taktzyklus.
Manche brauchen zwei oder drei, das steht im Datenblatt.
Oder du lässt die Schleifen im Simulator von AVR-Studio laufen,
der zählt die Takte mit.

Gruß Jan

PicNick
03.05.2005, 16:23
Ah so, Schleifen/Detail bezogen. Ja klar, das geht natürlich ganz präzise.
Derweil kämpf ich noch, wie ich am besten solche Sequenzen wie:
LDI XL, $78
LDI XH, $01
zu der Aussage: Load X, $0178
bringen kann, damit ich dann Namen vergeben kann.
Na ja, ist wie Kreuzworträtsel.
Du kennst Dich ja aus, was erzähl' ich dir