Forum: Compiler & IDEs Was bedeutet dieser Assembler Code?


von Daniel R. (zerrome)


Lesenswert?

Hallo,

habe folgenden Assembler Schnipsel vom AVR-GCC und frage mich warum nach 
den sts noch subi kommen?!?
Und ist das die ganze Rechnung? Da wird doch nur vom untersten Register 
eine 1 abgezogen? Wenn es jetzt aber einen Unterlauf gibt?
1
unsigned long int var;
2
3
    var=var-1;
4
5
    1036:  60 91 5d 01   lds  r22, 0x015D
6
    103a:  70 91 5e 01   lds  r23, 0x015E
7
    103e:  80 91 5f 01   lds  r24, 0x015F
8
    1042:  90 91 60 01   lds  r25, 0x0160
9
    1046:  61 50         subi  r22, 0x01  ; 1
10
    1048:  70 40         sbci  r23, 0x00  ; 0
11
    104a:  80 40         sbci  r24, 0x00  ; 0
12
    104c:  90 40         sbci  r25, 0x00  ; 0
13
    104e:  60 93 59 01   sts  0x0159, r22
14
    1052:  70 93 5a 01   sts  0x015A, r23
15
    1056:  80 93 5b 01   sts  0x015B, r24
16
    105a:  90 93 5c 01   sts  0x015C, r25
17
    105e:  6f 5f         subi  r22, 0xFF  ; 255
18
    1060:  7f 4f         sbci  r23, 0xFF  ; 255
19
    1062:  8f 4f         sbci  r24, 0xFF  ; 255
20
    1064:  9f 4f         sbci  r25, 0xFF  ; 255

von (prx) A. K. (prx)


Lesenswert?

Das lässt sich ohne Kontext nicht erkennen. Vielleicht wird danach var+1 
verwendet (-1 subtrahieren = +1 addieren), oder der Wert von var vor 
dieser Zeile.

von Karl H. (kbuchegg)


Lesenswert?

Daniel Platte schrieb:
> Hallo,
>
> habe folgenden Assembler Schnipsel vom AVR-GCC und frage mich warum nach
> den sts noch subi kommen?!?

Das hängt davon ab, wie es im C-Source Code weitergeht.
Wenn du genau schaust, wird zb auch das Ergbnis der Subtraktion um 1 
ganz woanders gespeichert als von wo der Ausgangswert her ist.

> Und ist das die ganze Rechnung? Da wird doch nur vom untersten Register
> eine 1 abgezogen? Wenn es jetzt aber einen Unterlauf gibt?

dann wird der Unterlauf durch die nachfolgenden sbci auf die 3 
höherwertigen Register, in denen die 32 Bit Zahl gespeichert ist, 
weitergereicht.

von Daniel R. (zerrome)


Lesenswert?

Ja macht Sinn, danke.

Ich glaub ich brauch mal ein Assembler Buch :)

von Matthias L. (Gast)


Lesenswert?

>Wenn du genau schaust, wird zb auch das Ergbnis der Subtraktion um 1
>ganz woanders gespeichert als von wo der Ausgangswert her ist.

Offensichtlich wurde die Zielvariable vor der Quellvariable angelegt, da 
diese "davor" kommt....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.