Was bedeutet dieser Assembler Code?

OP #1378755
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
#1378768
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.
Gast #1379494
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....

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