Forum: Mikrocontroller und Digitale Elektronik Tutorial Division


von Neuling (Gast)


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...

von Neuling (Gast)


Lesenswert?

Weiß das keiner?

von Kachel - Heinz (Gast)


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

von 11833 (Gast)


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.

von let (Gast)


Lesenswert?

> Was ist daran falsch?

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

von Kachel - Heinz (Gast)


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

von Gast2 (Gast)


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!

von Kachel - Heinz (Gast)


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

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
Noch kein Account? Hier anmelden.