[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

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