Hallochen,
Dieser Code hier war in der Dissassembling, ich will hier nur wissen
wohin diese GOTO´s gehen?
Hexadezimal stimmen sie jedenfalls nicht mit den Registern in den Bänken
überein!Welches Register wird hier vom GOTO angepeilt?
Rudi R. schrieb:> Dieser Code hier war in der Dissassembling, ich will hier nur wissen> wohin diese GOTO´s gehen?
Bist du dir sicher, dass das wirklich ein Dissassembling von einem
Programm ist?
Was soll denn das für eine merkwürdiger Prozessor sein? ich habe noch
keine asm- Mnemonik gesehen wo es ein "goto" gibt, die heißen eigentlich
fast immer jump oder so ähnlich?
Für mich sieht das ganze irgendwie mehr nach einem assembler listing aus
das als Zwischencode von einem c-compiler erzeugt wurde. Da dürfte es
sich um einen fiktiven Sprungbefehl zu fiktiver Adresse innerhalb dieser
Datei handeln (also die erste Zeile ist quasi Adresse 0x00 usw.) Diese
werden dann später vom linker in echte jumps umgerechnet, wenn er die
ganzen Dateien zu einem Ergebnis zusammenfügt.
Das ist irgendein PIC. Da gibt's GOTO und die Condition-Tests skippen
die nächste Instruktion oder nicht, ein "BTFSS GOTO GOTO" ist nichts
anderes als ein if-then-else. Merkwürdig sieht der Code aber schon
aus - automatisch generiert ohne auch nur ein fitzelchen Optimierung.
Der Parameter vom GOTO ist an sich direkt die Zieladresse. Adressen
sind in dem Listing aber nicht zu sehen ...
Eigendlich müsste ein Disassembler vor die
ensprechenden Befehle den entsprechenden Code
stellen.
Das kann man auch irgendwo einstellen.
Schau nach, ob dein Disasssembler ne Symboltabelle
ausspuckt!
Spiele mit dem Kommandozeilenprompt!
mfg
BetaTest schrieb:> Solchen Codeverhau erzeugt der Compiler, weil sein Herrchen> zu geizig ist, ein paar Kullerchen für die Lizenz abzudrücken.>> Selber schuld!
Das könnte durchaus möglich sein!:(
Ich dachte erst es wären die Speicherplätze,die hier automatisch mit den
vor der Routine zu speichernden Daten bestückt werden, um sie danach
wieder abzuarbeiten!?
Irgend W. schrieb:> Für mich sieht das ganze irgendwie mehr nach einem assembler listing aus> das als Zwischencode von einem c-compiler erzeugt wurde. Da dürfte es> sich um einen fiktiven Sprungbefehl zu fiktiver Adresse innerhalb dieser> Datei handeln (also die erste Zeile ist quasi Adresse 0x00 usw.) Diese> werden dann später vom linker in echte jumps umgerechnet, wenn er die> ganzen Dateien zu einem Ergebnis zusammenfügt.
Ja,das ist doch eine Disassebling!?
Haben sie vielleicht mal eine Disassembling von Ihnen?
Würde mich mal interessieren, wie das richtiger weise aussehen müsste.
Das Programm dazu funktioniert aber in meinem Fall!...
Ich will es halt versuchen nachzuvollziehen, was da passiert, weil mir
das Codegewusel da zu lang und uneffizient erscheint.
Also kann man sich die Sprünge da auch wegdenken, weil sie nur der
Zusammenführung vom Linker dienen??
Danke;o)
michael_ schrieb:> Und mehrere GOTO hintereinander machen gar keinen Sinn.> Bitte das nächste Salami-Scheibchen.
Zumindest ein Goto könnte übersprungen werden, wenn ein entsprechender
Sprungbefehl davor liegt.
Ähm,ich bin noch neu in diesem Gebiet, vielleicht gibt es sowas?
Garade das fand ich ja auch so eigenartig...also das Programm dazu
funktioniert jedenfalls.:)
ähm das ist MCC...sorry war ne weile nicht aktiv hier...im Sommer
weniger Zeit und Muse für sowas,deshalb!;o)...jetzt gehts gerade
weiter...besser als Fernsehgucken und so ein Zeug ne...:)
Rudi R. schrieb:> Dieser Code hier war in der Dissassembling, ich will hier nur wissen> wohin diese GOTO´s gehen?
Sieht aus wie der vom XC8 in der FREE Version generierte Code ohne jede
Optimierung. Wenn man sich nicht die Dateien, sondern den
Programmspeicher in der IDE anschaut, dann sieht man auch noch, an
welcher Adresse die Befehle stehen und damit auch wohin die GOTOs
springen.