Marco V. schrieb:
> Eine Frage hab Ich noch, warum wird bei low() subi und bei high() subci
> verwendet?
Weil subi eine 8 Bit Subtraktion ist, du aber eine 16 Bit Subtraktion
brauchst. Also muss ein eventueller Übertrag, der bei der Subtraktion
der unteren 8 Bit entstanden sein könnte, für die Subtraktion der oberen
8 Bit mitgenommen werden. subci macht genau das.
Machst du ja beim händischen Subtrahieren auch.
Deine erste händische Rechnung lautet (wenn du das so gelernt hast wie
ich:
8 und wieviel ist 13? (13 deswegen, wel 3 ja kleiner als 8 ist).
8 und 5 ist 13. 5 angeschrieben, 1 weiter
1 | 193
|
2 | - 78
|
3 | 1
|
4 | ------
|
5 | 5
|
1 und 7 macht 8, 8 und wieviel ist 9?
8 und 1 ist 9. 1 angeschrieben, 0 weiter
1 | 193
|
2 | - 78
|
3 | 0
|
4 | ------
|
5 | 15
|
0 und 0 macht 0, 0 und wieviel macht 1?
0 und 1 macht 1
1 | 193
|
2 | - 78
|
3 | 0
|
4 | ------
|
5 | 115
|
beachte: bei der ersten Subtraktion gab es noch keinen zu
berücksichtigenden Übertrag aus den kleineren Stellen. Daher musste da
auch nichts berücksichtigt werden.
Konzeptionell ist das ganz genau das gleiche wie hier.
Das Carry Flag transportiert einen möglichen Über- Unterlauf von einer
'Berechnungsposition' zur nächsten, wenn die Berechnung in mehrere Teile
aufzuteilen ist (wie bei dir 16 Bit Subtraktion auf 8 Bit Subtraktion,
oder eben händisch die Subtraktion mehrstelliger Zahlen auf die
Subtraktion einzelner Ziffern. Die erste Subtraktion ist ein SUBI, alle
weiteren sind ein SBCI)