Bug in avr-gcc?(zu große Konstante bei der disassembly)

Gast #2700266
Lesenswert?

Hallo,

Ich meine einen Bug gefunden zu haben, ich bin mir aber nicht wirklich 
sicher denn das Programm läuft soweit, und er ist meiner Meinung nach so 
gravierend, dass er schon wesentlich früher aufgefallen wäre(weil fast 
jedes Programm nicht so laufen würde wie es sollte).

Also im instruction set steht zu den br** Befehlen, dass vom PC(Program 
Counter) aus um -64 ≤ k ≤ +63 gesprungen werden kann.
Ich hab jetzt allerdings(bei der Suche nach Optimierungsmöglichkeiten) 
in der *.lss Datei unter anderem folgendes gefunden, was mit der obigen 
Bedingung nicht wirklich übereinstimmt:
1
...
2
     d54:  f1 f6         brne  .-68       ; 0xd12 <fill_buffer+0x6a>
3
      {
4
        current_led_column_sd++;
5
     d56:  80 91 44 01   lds  r24, 0x0144
6
     d5a:  90 91 45 01   lds  r25, 0x0145
7
     d5e:  01 96         adiw  r24, 0x01  ; 1
8
     d60:  90 93 45 01   sts  0x0145, r25
9
     d64:  80 93 44 01   sts  0x0144, r24
10

11
        if(current_led_column_sd == pic_info.pic_length)
12
     d68:  20 91 d2 02   lds  r18, 0x02D2
13
     d6c:  30 91 d3 02   lds  r19, 0x02D3
14
     d70:  82 17         cp  r24, r18
15
     d72:  93 07         cpc  r25, r19
16
     d74:  71 f6         brne  .-100      ; 0xd12 <fill_buffer+0x6a>
17
...

Hat jemand eine Vermutung bzw. weis jemand was hier nicht stimmt(ich 
kann mir nach wie vor nicht wirklich vorstellen das, dass ein Bug 
ist...)

Weiterhin bei eigenen Assembler Stücken, die auf Sprungmarken ausserhalb 
dieses Bereiches zeigen, warnt der Gnu-assembler auch nicht, dass die 
Sprungmarke ausserhalb des Bereiches ist.

Gruß Philipp

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren