Tutorial Division

Gast #977700
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:
1
ldi  r16, 109   ; Dividend
2
    ldi  r17,   9   ; Divisor
3
 
4
                    ; Division r16 : r17
5
 
6
    ldi  r18,   8   ; 8 Bit Division
7
    clr  r19        ; Register für die Zwischenergebnisse / Rest
8
    clr  r20        ; Ergebnis
9
 
10
divloop:
11
    lsl  r16        ; Zwischenergebnis mal 2 nehmen und das
12
    rol  r19        ; nächste Bit des Dividenden anhängen
13
 
14
    lsl  r20        ; das Ergebnis auf jeden Fall mal 2 nehmen,
15
                    ; das hängt effektiv eine 0 an das Ergebnis an.
16
                    ; Sollte das nächste Ergebnis-Bit 1 sein, dann wird
17
                    ; diese 0 in Folge durch eine 1 ausgetauscht
18
 
19
    cp   r19, r17   ; ist der Divisor größer?
20
    brlo div_zero   ; wenn nein, dann bleibt die 0
21
    sbr  r20, 1     ; wenn ja, dann jetzt die 0 durch eine 1 austauschen ...
22
    sub  r19, r17   ; ... und den Divisor abziehen
23
 
24
div_zero:
25
    dec  r18        ; das Ganze 8 mal wiederholen
26
    brne divloop
27
 
28
                    ; in r20 steht das Ergebnis der Division
29
                    ; in r19 steht der bei der Division entstehende Rest

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

wenn ja, dann bleibt die 0

Denn wenn der Divisor größer ist, bleibt ja die Null...
Gast
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
Gast
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
Gast
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!
Gast
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.