Hallo Philipp,

das ist beim AVR nur mit guter Handarbeit zu erledigen. Hab mal eben ein Muster zusammengeschusselt, ich denke es sollte funktioneren - aber vorher unbedingt testen - ich will nicht schuld sein, wenn deine Bombe zufrüh hochgeht weil die Rechnung nicht stimmt :-D

.def rd1hh=r16
.def rd1h=r17
.def rd1l=r18
.def rd2h=r19
.def rd2l=r20
.def rd1ul=r21
.def rd1uh=r22
.def rehh=r23
.def reh=r24
.def rel=r25

div:
ldi rd1hh, 0x4c
ldi rd1h, 0x4b
ldi rd1l, 0x40

ldi rd2h, 0x8e
ldi rd2l, 0x94

clr rd1ul ;Hilfsregister
clr rd1uh

clr rehh ; Ergebnis rehh:reh:rel
clr reh ;
clr rel ; (Ergebnisregister dient auch als
inc rel ; Zähler bis 24! Bit 1 auf 1 setzen) diese 1 wird immer weiter nach links geschoben, wenn sie
; rauskommt sind wir fertig
;
; Hier beginnt die Divisionsschleife
;
div1:
clc ; Carry-Bit leeren
rol rd1l ; nächsthöheres Bit des Dividenten
rol rd1h ; in das Hilfsregister rotieren
rol rd1hh ;
rol rd1ul ;
rol rd1uh ;
brcs div2 ; Eine 1 ist herausgerollt, ziehe ab

cp rd1uh, rd2h
brcs div3
cp rd1ul,rd2l ; Divisionsergebnis 1 oder 0?
brcs div3 ; Überspringe Subtraktion, wenn kleiner
div2:
sub rd1ul,rd2l ; Subtrahiere Divisor
sbc rd1uh,rd2h
sec ; Setze carry-bit, Ergebnis ist eine 1
rjmp div4 ; zum Schieben des Ergebnisses
div3:
clc ; Lösche carry-bit, Ergebnis ist eine 0
div4:
rol rel ; Rotiere carry-bit in das Ergebnis
rol reh
rol rehh
brcc div1 ; solange Nullen aus dem Ergebnis
; rotieren: weitermachen


Zum erklären: am besten AVR Studio runterladen (vielleicht hast dus ja schon) und simulieren und beobachten - dann verstehen versuchen.
Im Prinzip schiebt man die 5000000 nach links raus in 2 Hilfsregister und schaut, ob man davon schon die 36500 abziehen kann. Wenn ja, ins Ergebnis eine 1 schieben sonst eine 0. Ein Sonderfall kann eintreten, nämlich das beim Hilfsregister auch eine 1 rauskommt. Die kannst du dann gleich ins Ergebnis schieben.
Wie gesagt, simulieren und studieren, dann klappts auch mit dem Assembler .
Das ganze oben ist natürlich jetzt ziemlich roh, in eine Unterroutine verpackt kannst du da noch einige Register einsparen (push / pop) werte aus dem Ram holen etc. Mußt dir halt eine gute Schnittstelle überlegen je nach Anwendung.

Was wirds wenns fertig ist?

lg

Alex