also im s-File steht noch
1 | ldi r30, lo8(sBox)
|
2 | ldi r31, hi8(sBox)
|
3 | add r30, r24
|
4 | adc r31, __zero_reg__
|
5 | lpm r24, Z
|
im hex-file an entsprechender Adresse steht dann
1 | :1001600084918E2F880F10F43BE18327E4B984B982
|
2 | ^^^^
|
das enspricht der binären Folge
und im AVR "Instruction Set Nomenclature" steht, dass "LPM" wie folgt
übersetzt wird:
1 | (i) LPM None, R0 implied PC ← PC + 1
|
2 | (ii) LPM Rd, Z 0 ≤ d ≤ 31 PC ← PC + 1
|
3 | (iii) LPM Rd, Z+ 0 ≤ d ≤ 31 PC ← PC + 1
|
4 |
|
5 | (i) 1001 0101 1100 1000
|
6 | (ii) 1001 000d dddd 0100
|
7 | (iii) 1001 000d dddd 0101
|
einzig sinnvolle Übersetzung ergibt sich, wenn man zuvor die Bytes
tauscht. Das hat sicher was mit Big- und Little-Endian zu tun, aber
damit halte ich mich jetzt mal nicht auf...
Ich vergleiche dann also:
1 | 1001 0001 1000 0100
|
2 | (ii) 1001 000d dddd 0100
|
=> d = 0b11000 = 24 (= r24, passt)
(ii) ist ohne "Post increment". Also scheints wirklich ein Fehler im
Disassembler zu sein.
Danke
Gruß Leo