www.mikrocontroller.net

Forum: Compiler & IDEs Was bedeutet dieser Assembler Code?


Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht 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?
unsigned long int var;

    var=var-1;

    1036:  60 91 5d 01   lds  r22, 0x015D
    103a:  70 91 5e 01   lds  r23, 0x015E
    103e:  80 91 5f 01   lds  r24, 0x015F
    1042:  90 91 60 01   lds  r25, 0x0160
    1046:  61 50         subi  r22, 0x01  ; 1
    1048:  70 40         sbci  r23, 0x00  ; 0
    104a:  80 40         sbci  r24, 0x00  ; 0
    104c:  90 40         sbci  r25, 0x00  ; 0
    104e:  60 93 59 01   sts  0x0159, r22
    1052:  70 93 5a 01   sts  0x015A, r23
    1056:  80 93 5b 01   sts  0x015B, r24
    105a:  90 93 5c 01   sts  0x015C, r25
    105e:  6f 5f         subi  r22, 0xFF  ; 255
    1060:  7f 4f         sbci  r23, 0xFF  ; 255
    1062:  8f 4f         sbci  r24, 0xFF  ; 255
    1064:  9f 4f         sbci  r25, 0xFF  ; 255


Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja macht Sinn, danke.

Ich glaub ich brauch mal ein Assembler Buch :)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.