Ich habe für den mega8 einen Bootloader und will am Ende die Applikation
ab Adresse 0 starten. Der Bootloader wird mit
1 | BLSTART = 0x1f00
|
2 |
|
3 | avr-ld -Ttext $(BLSTART) ...
|
gelinkt. Wenn ich nun testweise an den Anfang des Bootloaders die
Anweisungen
1 | .section .text
|
2 | rjmp 0 ; starte bei 0
|
schreibe, dann funktioniert das nicht. Im Dissasembler sehe ich auch,
warum:
1 | 1f00: ff cf rjmp .-2 ; 0x1f00 <__ctors_end>
|
Die Adresse in rjmp 0 wird offenbar relativ zur section genommen.
Wie kann ich die Adresse absolut bekommen?
Der Versuch mit
1 | .section .absolute
|
2 | .org 0
|
3 | bls:
|
4 |
|
5 | .section .text
|
6 |
|
7 | rjmp bls ; starte bei 0
|
ist erfolgreich:
1 | 1f00: 7f c0 rjmp .+254 ; 0x2000 <__data_load_end>
|
es erscheint mir aber wegen des .org-Befehls etwas umständlich. Kann
ein Label nicht mit einfacheren Mitteln "absolut" gemacht werden?