www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 24bit / 8bit in Assembler funzt nicht - bitte drüberschauen


Autor: Robert Budde (Gast)
Datum:
Angehängte Dateien:
  • div.txt (812 Bytes, 102 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rol    drem24d8u    ; Carry in Rest schieben

wenn danach das C gesetzt ist, must Du den Vergleich überspringen und
abziehen.


Peter

Autor: Robert Budde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.