mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tutorial Division


Autor: Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe begonnen, mir das Tutorial durchzulesen und bin jetzt bei 
Arithmetik angelangt. Ich verstehe soweit alles, außer dem Kommentar 
beim Divisionsalgorithmus.

Da heißt es:
ldi  r16, 109   ; Dividend
    ldi  r17,   9   ; Divisor
 
                    ; Division r16 : r17
 
    ldi  r18,   8   ; 8 Bit Division
    clr  r19        ; Register für die Zwischenergebnisse / Rest
    clr  r20        ; Ergebnis
 
divloop:
    lsl  r16        ; Zwischenergebnis mal 2 nehmen und das
    rol  r19        ; nächste Bit des Dividenden anhängen
 
    lsl  r20        ; das Ergebnis auf jeden Fall mal 2 nehmen,
                    ; das hängt effektiv eine 0 an das Ergebnis an.
                    ; Sollte das nächste Ergebnis-Bit 1 sein, dann wird
                    ; diese 0 in Folge durch eine 1 ausgetauscht
 
    cp   r19, r17   ; ist der Divisor größer?
    brlo div_zero   ; wenn nein, dann bleibt die 0
    sbr  r20, 1     ; wenn ja, dann jetzt die 0 durch eine 1 austauschen ...
    sub  r19, r17   ; ... und den Divisor abziehen
 
div_zero:
    dec  r18        ; das Ganze 8 mal wiederholen
    brne divloop
 
                    ; in r20 steht das Ergebnis der Division
                    ; in r19 steht der bei der Division entstehende Rest 



Müssste das bei
cp   r19, r17   ; ist der Divisor größer?
    brlo div_zero   ; wenn nein, dann bleibt die 0
    sbr  r20, 1     ; wenn ja, dann jetzt die 0 durch eine 1 austauschen ..
    sub  r19, r17   ; ... und den Divisor abziehen
 

    

wenn ja, dann bleibt die 0

Denn wenn der Divisor größer ist, bleibt ja die Null...

Autor: Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß das keiner?

Autor: Kachel - Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dividend geteilt durch Divisor ist gleich Quotient...

Wenn der Divisor (also die Zahl, durch die geteilt wird) größer ist als 
der momentan berücksichtigte Teil des Dividenden, dann ist das Ergebnis 
dieser Stelle nunmal 0.

Oder:
Wenn der Dividend kleiner als der Divisor ist, kommt 0 raus.

Was ist daran falsch?

KH

Autor: 11833 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Müssste das bei" ... "wenn ja, dann bleibt die 0
Denn wenn der Divisor größer ist, bleibt ja die Null..."

Dieser Satz keine Frage.

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was ist daran falsch?

Nichts. Der Kommentar im Code paßt aber nicht. Das Programm
macht es genau das andersrum - also richtig.

Autor: Kachel - Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, wird wohl wieder ein "kleiner Aufmerksamkeitstest" des Autors 
gewesen sein, den ich glatt übersehen habe (sorry). Falls nicht, Autoren 
sind auch nur Menschen. Schau in der Historie nach und frag den Autor, 
er kann es dann korregieren (oder als Test stehen lassen).

KH

Autor: Gast2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne, korrigiers lieber gleich selbst - dafür ist das Wiki ja da. Es 
besteht hier ja kein Zweifel, dass es falsch ist.
Aufmerksamkeitstest sollten in einem Tutorial nicht drin sein!

Autor: Kachel - Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde ich nicht tun, denn viele Köche verderben... ääähhh, was war das 
gleich noch? - achja, viele Köche verderben die Köchin...

KH

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.