8 bit Divisionsroutine

Gast #396938
Lesenswert?

Hat jemand schon mal mit der 8/8 bit Routine div8u von Atmel
gearbeitet?
Hab sie in ein Programm für meinen ATMega8515 eingefügt aber danach
kamen utopische Werte heraus.

Nun habe ich die Funktion allein getestet und das Ergebnis und rest im
EEPROM gespeichert um diese Werte auszulesen.

Ich habe immer das gleiche Ergebnis mit 8 als dres8u und 0 als drem8u.
Auch wenn ich die Werte für Divident und Divisor ändere komt immer das
gleiche Ergebnis dabei raus.

Jemand eine Idee woran das liegen könnte oder hatte jemand schonmal ein
ähnliches Problem mit den Routinen?

Danke schonmal für jede Hilfe.
#396941
Lesenswert?

> Niemand eine Idee an was das liegen könnte?

Ein Forum ist kein Chat.


> (a) Atmel hat Blödsinn zusammengewürfelt.

Daran liegt es tatsächlich, zumindest teilweise. Denn das Register
"dres8u", in dem laut Dokumentation das Ergebnis gespeichert wird,
wird vom Code gar nicht benutzt. Ich könnte jetzt schauen, wo das
Ergebnis anstelle dessen landet. Aber die Antwort muß ja ganz schnell
raus, und mir läuft die Zeit davon...
Gast #396942
Lesenswert?

.nolist
.include "m8515def.inc"
.list

.def  drem8u  =r18    ;remainder
.def  dres8u  =r19    ;result
.def  dd8u  =r20    ;dividend
.def  dv8u  =r21    ;divisor
.def  dcnt8u  =r22    ;loop counter
.org 0x0000


reset:  ldi  r31, LOW(RAMEND)
  out   SPL, r31                  ldi   r31, HIGH(RAMEND) 
out   SPH,
r31

main:  ldi  dd8u,11
  ldi  dv8u,3
  rcall  div8u

end:  rjmp  end

Dann hab ich genau die Routine div8u von Atmel kopiert und nun sollte
ja 11/3 gerechnet werden, also 3 rest 2.
Den Rest 2 bekomm ich aber als Ergebnis dres8u immer die 8.
Gast #396944
Lesenswert?

Doch, das Register "dres8u" wird sehr wohl verändert.

Allerdings nicht unter diesem Namen, sondern unter "dd8u". Und genau
das ist der Trick daran. Der Atmel-Code funktioniert genau dann, wenn
"dd8u" und "dres8u" das gleiche Register sind.

Wenn man, wie Thorsten, dafür getrennte Register verwendet, hat man
verloren.
Gast #396945
Lesenswert?

hmm hab ich gemacht , und nicht nur einmal :-)
Entweder steh ich voll auf dem Schlauch oder weiss auch nicht.
Aber anstatt hier Rätsel zu geben wäre mir die Lösung einiges lieber
wenn du sie weisst ;-)

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