Hey Leute! Ich habe ne Frage: Wie kann ich in asm (programmiere einen atmega16) zwei 16bit zahlen dividieren bzw multiplizieren? Ich konnte bis jetzt leider nichts brauchbares finden. könntet ihr mir vielleicht helfen? mfg der anfänger
Hallo, geh mal zu: www.atmel.com dort findest du: AVR Applikation Note 200 - Multiply and Divide Routines und AVR Applikation Note 201 - 16bit multiply routines using hardware multiplier Gruß Jan
Dividieren: http://www.atmel.com/dyn/resources/prod_documents/doc0936.pdf Multiplizieren: http://www.atmel.com/dyn/resources/prod_documents/doc1631.pdf Um zu Dividieren muss ich einfach das programmieren: 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. Subtract divisor from remainder. 8. If result negative, add back divisor, clear carry and go to Step 3. 9. Set carry and go to Step 3. Und um zu Multiplizieren muss ich nur laut Seite5 (Zeichnung) vorgehen. Habe ich das richtig verstanden? mfg der anfänger
Den habe ich aber leider nicht gefunden :-( Wo gibs den? mfg der anfänger
Da wo du auch die Applikation Notes gefunden hast. Direkt neben dem PDF-Symbol gibt es auch ein CD-Symbol. MfG Willi
Hi In der Liste der Application Notes siehst du ein PDF-Symbol und ein Disk-Symbol. Mit letzteren kannst du die Software herunterladen. MfG Spess
Danke! Ich habe immer nur das PDF Zeichen verwendet. MFG der Anfänger
Hallo Leute! Ich hätte noch ne frage: Das Dividieren funktioniert zwar, aber leider nicht in den Kommabereich. Wie kann man diese Problem am besten lösen? mfg der Anfänger
@ Anfänger (Gast) >Das Dividieren funktioniert zwar, aber leider nicht in den Kommabereich. Aber sicher. Festkommaarithmetik MfG Falk
@ Anfänger (Gast)
>Gibts die Festkommaarithmetik auch für ASM?
Ja, aber nicht als Artikel. Letztendlich ist es "normale"
Integerarithmetik, "nur" der Programmierer muss etwas umdenken.
MfG
Falk
Ich stehe zur zeit leider auf der Leitung. Ich möchte zum Beispiel 5 / 1024 dividieren. Wenn ich das mache kommt heraus: Result: Low Byte- 000 HighByte -000 Remainder: Low Byte - 005 Hgih Byte - 000 ?!? mfg der Anfänger
Anfänger wrote: > Ich stehe zur zeit leider auf der Leitung. > > Ich möchte zum Beispiel 5 / 1024 dividieren. > > Wenn ich das mache kommt heraus: > Result: Low Byte- 000 > HighByte -000 > > Remainder: Low Byte - 005 > Hgih Byte - 000 > > ?!? > > mfg der Anfänger Und wo ist das Problem? Bzw. Was stimmt daran nicht? Du kannst ja (wie schon mit dem Festkommaarithmetik-Link) angedeutet 5000/1024 teilen. Das Ergebnis ist dann nur um 3 Stellen nach links verschoben (Im Dezimalsystem natürlich).
Na ja, wie ich schon sagte, kann Integerarithmetik nicht mit Nachkommastellen umgehen. Wenn du sie dafür benutzen willst, muß du die Kommaschiebereien selbst machen und die Eingangsoperanden/Ergebnis so geschickt zurechtmultiplizieren/dividieren, daß die gewünschte Nachkommagenauigkeit dabei herauskommt. Die int-Artihmetik schmeißt alles weg, was kleiner als 1 ist.
@ Anfänger (Gast), div 1024 ist dasselbe wie binaer 10 positionen nach rechts schieben.
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.