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

OP #1927624
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?
OP
Genau das hab ich mir gerade auch gedacht, nur konnte ich meinen Beitrag 
schon nicht mehr bearbeiten :D

Wie krieg ich das denn möglichst sauber gebacken? Über einen bedingten 
Sprung (sozusagen if-then-else in Assembler)? Oder gibt es schönere 
Lösungen für das ganze?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.