GCC Assembler interpretiert .org falsch

OP #2950057
Lesenswert?

Moin, ich hab hier die größten Probs mit dem GCC Assembler, Probleme die 
eigenlich gar keine sein dürften.
Hier zB funktioniert .org nicht. Ich setze zum testen .org auf 0x110
1
    STS  CLKPR,R25  ;enable updating of CLKPR            
2
    STS  CLKPR,R24  ;write the new value
3
    ret        ;
4

5
.org  0x110
6
.global add_two
7
  add_two:
8
    ADD R24,R22    ;val_1 = val_1 + val_2
9
    CLR  R25      ;return val_1
10
    ret        ;

Und das kommt dabei heraus:
1
  fa:  90 e8         ldi  r25, 0x80  ; 128
2
    STS  CLKPR,R25  ;enable updating of CLKPR            
3
  fc:  90 93 61 00   sts  0x0061, r25
4
    STS  CLKPR,R24  ;write the new value
5
 100:  80 93 61 00   sts  0x0061, r24
6
    ret        ;
7
 104:  08 95         ret
8
  ...
9

10
0000020a <add_two>:
11

12
.org  0x110
13
.global add_two
14
  add_two:
15
    ADD R24,R22    ;val_1 = val_1 + val_2
16
 20a:  86 0f         add  r24, r22
17
    CLR  R25      ;return val_1
18
 20c:  99 27         eor  r25, r25
19
    ret        ;
20
 20e:  08 95         ret



Die org. Zuweisung wird einfach falsch ausgeführt.
Wie kommt das? Ist ein Ändern der Bereichsadresse nicht erlaubt?
OP #2950096
Lesenswert?

>> .org may only increase the location counter, or leave
>> it unchanged; you cannot use .org to move the location
>> counter backwards.
Hmmmnja.. aber ich zähl doch gar nicht rückwärts, oder?


>Warun willst du das übethaupt?
Ziel:
Hab hiern ATMega mit 16MHz der via CTC mit TCNT2=7 1MHz am OC2A ausgibt. 
Gleichzeitig möche ich TCNT2 beobachten um die Flankenumschaltung zu 
erkennen. Kurz danach schalte ich nen Ausgang.

Der Code liest über TCNT2 als Zähler quasi parallel NOPs aus ner Tabelle 
mit um damit das ganze zu synchronisieren. Um zu verhindern daas die 
Tabelle (hat sieben NOPs) aber an nem Seitenübergang liegt will ich sie 
fest anlegen.
Gast #2950100
Lesenswert?

Es geht hier nicht um das "zählen" sondern inkrementieren resp. 
dekrementieren.
Und letzteres liegt hier vor.
Du bist bei Adresse 20a

0000020a <add_two>:

und willst wieder zurück nach 110

.org  0x110

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