Forum: Compiler & IDEs Frage zu Disassemblinglist


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rudi R. (microwitsch)


Bewertung
0 lesenswert
nicht 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)


Bewertung
5 lesenswert
nicht 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)


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

von Hp M. (nachtmix)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 ~Mercedes~  . (lolita)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Ist das der HI-Tech compiler? Oder schon MCC? Oder XC8?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.