Tutorial Division

Gast #977700
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:
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 #977967
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
Gast #978046
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren