Das SREG (Statusregister) ist eines der wichtigsten Register. Bei vielen Rechenoperationen können bestimmte besondere Zustände auftreten. Die AVR sind 8Bit-Prozessoren, fast alle Operationen basieren also auf Bytes.
Addierst oder subtrahierst Du zwei Bytes, kann das Ergebnisbyte überlaufen - dann wird automatisch das Überlaufbit (Carry) gesetzt. Tritt dabei kein Überlauf ein, wird das Carry gelöscht. Ist das Ergebnis einer Operation Null, wird das Zero-Bit gesetzt (und sonst gelöscht). Außerdem gibt es noch ein Halb-Carry-Bit (Überlauf von Bit 3 auf Bit 4), ein Negative-Bit wenn das Ergebnis im Sinne des Zweierkomplements (quasi 8-Bit-Integer) negativ ist, usw.
Beim Schieben wird der Inhalt eines Rechenregisters um eine Stelle nach links/rechts verschoben - die leere Position wird mit einer 0 aufgefüllt, das was rausgeschoben wird, landet im Carry. Für alle Bits im SREG gibt es bedingte Sprunganweisungen, die nur dann springen, wenn das Bit gesetzt bzw gelöscht ist.
Nehmen wir mal an, Du hast in Deiner Hochsprache sowas wie "If A=7 then tue was else tue was anderes"
Übersetzt wird das in:
Lade A in ein Rechenregister (LDS Rd, 'A')
Prüfe, ob Rechenregister=7 (CPE Rd, 7 - Compare with immediate, intern wird quasi Rd-7 gerechnet - ist das Ergebnis =0, wird das Zero gesetzt)
Wenn Z nicht gesetzt, springe nach "tue was anderes" (BRNE tue was anderes - Branch if not equal, springe wenn Z nicht gesetzt)
"Tue was"
springe zur nächsten Instruktion (RJMP - relative jump)
"Tue was anderes"
Hier wurde explizit mit Compare verglichen - man kann aber manchmal auch ausnutzen, das Instruktionen selbst Bits im SREG manipulieren. Wenn Du zB eine Schleife hast, die n-Mal durchlaufen werden soll, könnte man das auch so machen
Schleifenanfang
mach irgendwas
inkrementiere Zähler
prüfe ob Zähler=n (Compare)
Springe in Abhängigkeit von Z zum Schleifenanfang. (BRNE)
Aber das Inkrementieren (bzw auch das dekrementieren) manipuliert selbst das Z, also geht's auch einfacher andersrum
Schleifenanfang
mach irgendwas
dekrementiere Zähler (manipuliert außerdem Z)
springe in Abhängigkeit von Z zum Schleifenanfang
So, für Dich ist das nur Hintergrundwissen (zumindest wäre es ein Vorteil, wenn Du's weißt) - Du verwendest natürlich Deine Hochsprachenbefehle - aber manchmal sollte man trotzdem in etwa(!!) wissen, wie der Prozessor das in Maschinenprozessen umsetzt, um einschätzen zu können ob dieser oder jener Weg für die Lösung eines bestimmten Problems angemessen ist.
Ich bin eigentlich der Überzeugung, das C auch ohne Mathe-Bibliothek multiplizieren und dividieren kann - da wird's eher um Potenzen, Wurzeln, Trigonometrie und sowas gehen...
Was ist denn Dein konkretes Ziel? Das 10-Bit-Ergebnis als dezimale Zahl auf Siebensegmenten ausgeben? Dafür reicht die Division (mit Rest) durch 10. (In Bascom gibt's nur entweder Rest oder Division (obwohl der Rest ein Abfallprodukt der Division ist - nämlich genau das, was übrigbleibt (Rest eben), und ich weiß, in welchem Register Bascom diesen Rest nach der Division liegenläßt, und kann ihn da auslesen) - wie das In "Klammercode" ist, kann ich nicht sagen...)
Wie funktioniert es denn, wenn ich dividieren will?
Im Prinzip auch wieder genau so, wie Du in der Grundschule schriftlich dividieren gelernt hast - nur eben viel einfacher, da binär.
Wozu mußtest Du damals das kleine Einmaleins pauken? Damit Du 'ne Lookup-Table für die schriftliche Division im Kopf hast.
Für die Aufgabe 92527:13 mußtest erstmal bestimmen, wie oft die 13 in die 9 - gar nicht, also ... in die 92 paßt. Lookup-Table abrufen -> 7.
Als nächstes hast Du rückwärts wieder beides multipliziert, und von den 92 abgezogen - also nichts anderes als den Rest bestimmt.
Binär brauchst Du keine Lookup-Table auswendig lernen. Entweder es paßt einmal rein, oder eben nicht. Entweder der Divisor ist kleiner, oder nicht. Entsprechend hast Du 'ne eins oder 'ne null im Ergebnis.
Rückwärts muß auch nichts multipliziert werden - entweder es wird abgezogen, oder nicht...
Falls Du mal Zeit zum lesen hast, empfehle ich Dir mal die ersten Seiten
DES ASM-Tutorials. Sehr amüsant...