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?