Forum: Compiler & IDEs Frage zu Disassemblinglist


von Rudi R. (microwitsch)


Lesenswert?

1
---  C:/Users/Admin/CH8-Demo1.X/mcc_generated_files/interrupt_manager.c  --------------------------------
2
3
            #include "interrupt_manager.h"
4
            #include "mcc.h"
5
                        
6
                       void __interrupt() INTERRUPT_InterruptManager (void)
7
8
    BSF 0x7FE, 0x0
9
    MOVLP 0x0                                            
10
    MOVLB 0xE       // interrupt handler / if(PIE0bits.IOCIE == 1 && PIR0bits.IOCIF == 1)
11
    BTFSS PIE0, 0x4
12
    GOTO 0xA
13
    GOTO 0xB
14
    GOTO 0x1D
15
    BTFSS PIR0, 0x4
16
    GOTO 0xE
17
    GOTO 0xF
18
    GOTO 0x1D           
19
    MOVLB 0x0      // if(IO_RA3_GetValue())
20
    BTFSS PORTA, 0x3
21
    GOTO 0x13
22
    GOTO 0x14
23
    GOTO 0x17      
24
    BSF LATD, 0x2    // IO_RD2_SetHigh();
25
    GOTO 0x19
26
    GOTO 0x19                
27
    BCF LATD, 0x2    // IO_RD2_SetLow();
28
    GOTO 0x19                          
29
    MOVLB 0x3E       // IOCAFbits.IOCAF0 = 0;
30
    BCF IOCAF, 0x0              
31
    GOTO 0x1D                   // else
32
    GOTO 0x1D
33
    BCF 0x1F7E, 0x0
34
    RETFIE

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?

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

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.

von michael_ (Gast)


Lesenswert?

Und mehrere GOTO hintereinander machen gar keinen Sinn.
Bitte das nächste Salami-Scheibchen.

von Hp M. (nachtmix)


Lesenswert?

Rudi R. schrieb:
> ich will hier nur wissen
> wohin diese GOTO´s gehen?

Dann hättest du mal den Prozessor nennen und den Hexdump zeigen sollen.

von foobar (Gast)


Lesenswert?

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 ...

von Lotta  . (mercedes)


Lesenswert?

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

von BetaTest (Gast)


Lesenswert?

Solchen Codeverhau erzeugt der Compiler, weil sein Herrchen
zu geizig ist, ein paar Kullerchen für die Lizenz abzudrücken.

Selber schuld!

von Chregu (Gast)


Lesenswert?

foobar schrieb:
> ein "BTFSS GOTO GOTO" ist nichts anderes als ein if-then-else.

Aber 3 GOTOs hintereinander...?

Gruss Chregu

von Rudi R. (microwitsch)


Lesenswert?

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!?

von Einer (Gast)


Lesenswert?

Chregu schrieb:
> Aber 3 GOTOs hintereinander...?

Das scheint so eine Art break zu sein.
1D ist wohl die Adresse vom RETFIE.

von Rudi R. (microwitsch)


Lesenswert?

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)

von Rudi R. (microwitsch)


Lesenswert?

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.:)

von Andras H. (kyrk)


Lesenswert?

Ist das der HI-Tech compiler? Oder schon MCC? Oder XC8?

von Rudi R. (microwitsch)


Lesenswert?

ä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...:)

von Erich (Gast)


Lesenswert?

Du solltest versuchen, eine höhere Optimierrungsstufe des Compilers 
einzusetzen.
Statt 0 zumindest 1.
Gruss

von Blame4Lame (Gast)


Lesenswert?

michael_ schrieb:
> Und mehrere GOTO hintereinander machen gar keinen Sinn.

Doch, nennt sich Sprungtabelle:

https://de.wikipedia.org/wiki/Sprungtabelle

von Hugo H. (hugo_hu)


Lesenswert?

Rudi R. schrieb:
> Welches Register wird hier vom GOTO angepeilt?

Keines, das sind absolute Adressen.

von Volker S. (vloki)


Angehängte Dateien:

Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.