Hallo zusammen, ich habe folgende Frage: Kann mir jemand erklären nach welchem Prinzip eine CPU eine Division durchführt. Addition, Substraktion und Multiplikation sind mir klar, aber wie das beim dividieren funktionieren soll? Vielleicht kenn ja auch jemand einen Link zu einer Seite auf der so etwas erklärt wird, wenns geht bitte Deutsch (bin erst 13 und mein Englisch ist noch ned so perfekt :-) ) MfG Raphael
Exakt genauso wie Du die schriftliche Division mit Papier und Bleistift durchführst. Nur eben im Binärsystem statt im Dezimalsystem.
Hallo Raphael, Die Division läuft genau so ab, wie Du das in der Schule gelernt hast, bloß im Zweiersystem. Auf der Atmel-Homepage http: www.atmel.com gibt es zu den AVR-Controllern eine application note mit Divisionroutinen (für einfachere Controller, die das nicht per Hardware können) nebst einigen Erklärungen dazu. Ist allerdings alles auf englisch. Kannst Dich ja trotzdem durchquälen (denk einfach daran, daß Dein Englisch dadurch immer besser wird!).
Kann ich das auch mit multiplikation machen? Ich habe nämlich gerade einfach die 2 Operanden multipliziert und dann entspricht bei mir das Ergebniss immer der Anzahl der Bits vom MSB aus gemessen, wie die länge der Zahl durch die dividiert wird, oder ist das Zufall? Beispiel 36/6=6 : 100100 (=36) 110 (*6) 11011000 (=216) --- 110 (=6) Kann man das so Rechnen? Würde mich über Hilfe sehr freuen! Gruß Raphael
Wenn du durch einen festen Wert dividieren willst, kannst du es natürlich auch als Multiplikation mit dem Kehrwert machen.
Bei Fliesskommarechung kann man eine Division durch Multiplikation mit dem Kehrwert ersetzen. Bei ganzzahliger Rechnung ist das nicht so ohne weiteres möglich. Das bringt einen aber nur weiter, wenn der Nenner konstant ist.
Hab mir die App Note von Atmel mal angeschaut, aber hab mal Fragen dazu: Hab mal ein Bild vom Programmablauf angehängt. Der Text dazu lautet so: 1)Clear remainder and carry 2)Load loop counter with 17 3)Shift left dividend into carry 4)Decrement loop counter 5)If loop counter=0, return 6)Shift left carry (from dividend/result) into remainder 7)Substract divisor from remainder 8)If result negativ, add back divisor, clear carry and goto step 3 9)Set carry and goto step 3 Fragen: 1) Bedeutet Schritt 3 dass ich das MSB ins Carry schieben soll, oder das das Carry ins LSB kommen soll? Selbe frage bei Schritt 6 2) In dem ganzen Ablauf wird das Result garnicht erwähnt, außer bei Schritt 6. Wie soll darin dann das Ergebniss stehen, wenn nur der Rest (Remainder) benutzt wird? Irgendwie steht mir da jemand auf der Leitung Gruß Raphael
Falsche Sprache, aber noch einfacher geht's nicht: http://courses.cs.vt.edu/~cs1104/BuildingBlocks/divide.030.html Besonders unter "Further Example".
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.