[AVR] 32-Bit + 8-Bit Problem mit negativen Zahlen

OP #1927624
Lesenswert?
• ▲
▼
Hallo,
Ich versuche mir im Moment auf einem ATMega32 32-Bit Rechenoperationen 
zusammenzuschustern. Während die Addition von 2 32-Bit-Zahlen aber kein 
Problem ist, weiß ich nicht genau, wie ich eine 8-Bit Zahl zu einer mit 
32 Bit dazurechnen kann. Mein erster Gedanke war folgender:
1
;Temp1 ist niedrigstes Byte, Temp4 ist höchstes Byte der 32-Bit-Zahl
2
;Dazugerechnet werden soll r16
3

4
add    Temp1, r16
5
ldi    r16, 0
6
adc    Temp2, r16
7
adc    Temp3, r16
8
adc    Temp4, r16
Also nach dem Beispiel der 32-Bit-Arithmetik aus dem Tutorial.
Wenn es sich bei r16 aber um eine negative Zahl handelt (z.B. 0xFF)
sieht das doch so aus:
1
;Temp1-Temp4 sind 0
2
;r16 = 0xFF
3

4
add    Temp1, r16    ;Temp1 ist 0xFF
5
ldi    r16, 0
6
adc    Temp2, r16    ;alle anderen Register bleiben 0
7
adc    Temp3, r16    ;ganze Zahl also:
8
adc    Temp4, r16    ; 0x000000FF   -> Positive Zahl 255!

Wie sorge ich jetzt dafür, dass die Berechnung zum richtigen Ergebnis 
0xFFFFFFFF führt?

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.