Hallo! Hänge gerade an einem mehr oder weniger großem Problem fest, um zwar funktioniert der Algorithmus zum Dividieren einer 24bit durch eine 8bit Zahl nicht. Habe einen Algorithmus für 32bit / 16bit, der funktioniert auch, allerdings hätte ich es gerne massgeschneidert.n Unter ca. 160 funktioniert alles wie gewünscht, bei mehr als 160 scheint er durch mehr zu teilen. Wäre nett wenn mal jemand drüberschauen könnte. Danke! Gruß Robert
rol drem24d8u ; Carry in Rest schieben wenn danach das C gesetzt ist, must Du den Vergleich überspringen und abziehen. Peter
Hallo Peter, vielen Dank für deine rasche und effektive Hilfe. Der o.g. Code funzt mit einem "brcs ...subtr" sehr gut. Da ich keinen Rest brauche wollte ich jetzt weiter optmieren, heraus kam das: div24d8u2: ldi dcnt24d8u,16 clc div24d8u2_loop: lsl dd24d8u0 ; schieben, in LSB kommt 0 rol dd24d8u1 ; rol dd24d8u2 ; brcs div24d8u2_subtr ; cp dd24d8u2,dv24d8u ; falls Rest brcs div24d8u2_skip ; kleiner Divisor -> Sprung div24d8u2_subtr: sub dd24d8u2,dv24d8u ; Divisor von Rest subtrah. inc dd24d8u0 ; größer Divisor -> LSB setzen div24d8u2_skip: dec dcnt24d8u ; Schleifenzähler decrem. brne div24d8u2_loop ; und evtl. fortsetzen ret Funzt (wie könnte es anders sein) natürlich wieder nicht. Eventuell kann hier noch mal jemand helfen, ich höre dann auch auf, versprochen! g Gruß Robert
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.