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?